7 线性回归及Python实现

news2024/12/26 22:40:09

1 统计指标

  • 随机变量 X X X的理论平均值称为期望: μ = E ( X ) \mu = E(X) μ=E(X)
  • 但现实中通常不知道 μ \mu μ, 因此使用已知样本来获取均值
    X ‾ = 1 n ∑ i = 1 n X i . \overline{X} = \frac{1}{n} \sum_{i = 1}^n X_i. X=n1i=1nXi.
  • 方差variance定义为:
    σ 2 = E ( ∣ X − μ ∣ 2 ) . \sigma^2 = E(|X - \mu|^2). σ2=E(Xμ2).
  • 用已知样本的数据来代替:
    S 2 = V a r ( X ) = 1 n ∑ i = 1 n ( X i − μ ) 2 . S^2 = Var(X) = \frac{1}{n} \sum_{i = 1}^n (X_i - \mu)^2. S2=Var(X)=n1i=1n(Xiμ)2.
  • 由于 μ \mu μ未知, 使用贝塞尔校正:
    S 2 = V a r ( X ) = 1 n − 1 ∑ i = 1 n ( X i − X ‾ ) 2 . S^2 = Var(X) = \frac{1}{n - 1} \sum_{i = 1}^{n} (X_i - \overline{X})^2. S2=Var(X)=n11i=1n(XiX)2.
  • 原因: 在已知数据上, 使用 X ‾ \overline{X} X获得的结果一般更小:
    ∑ i = 1 n − 1 ( X i − X ‾ ) 2 ≤ ∑ i = 1 n − 1 ( X i − μ ) 2 . \sum_{i = 1}^{n - 1} (X_i - \overline{X})^2 \leq \sum_{i = 1}^{n - 1} (X_i - \mu)^2. i=1n1(XiX)2i=1n1(Xiμ)2.
  • 更多解释: https://www.zhihu.com/question/20099757
  • 标准差:
    σ X = S = V a r ( X ) . \sigma_X = S = \sqrt{Var(X)}. σX=S=Var(X) .

偏差与方差:
在这里插入图片描述

  • 方差(again)
    V a r ( X ) = σ X 2 = 1 n − 1 ∑ i = 1 n ( X i − X ‾ ) ( X i − X ‾ ) . Var(X) = \sigma_X^2 = \frac{1}{n - 1} \sum_{i = 1}^{n} (X_i - \overline{X})(X_i - \overline{X}). Var(X)=σX2=n11i=1n(XiX)(XiX).
  • 协方差
    C o v ( X , Y ) = 1 n − 1 ∑ i = 1 n ( X i − X ‾ ) ( Y i − Y ‾ ) . Cov(X, Y) = \frac{1}{n - 1} \sum_{i = 1}^{n} (X_i - \overline{X})(Y_i - \overline{Y}). Cov(X,Y)=n11i=1n(XiX)(YiY).
  • Pearson相关系数
    C o r r ( X , Y ) = ρ X , Y = C o v ( X , Y ) σ X σ Y . Corr(X, Y) = \rho_{X, Y} = \frac{Cov(X, Y)}{\sigma_X \sigma_Y}. Corr(X,Y)=ρX,Y=σXσYCov(X,Y).

2 线性回归

2.1 回归任务

分类与回归

  • 分类任务预测类别,即是/否等离散值:如是否生病;
  • 回归任务预测实型值:如气温

拟合空间中的点 (注意数据点没有类别标记, 输出也占一维):

  • 一个条件属性:直线;
  • 两个条件属性:平面;
  • 更多条件属性:超平面.

拟合线:
在这里插入图片描述
在这里插入图片描述

2.2 最小二乘法

线性分割面的表达

  • 平面几何表达直线(两个系数):
    y = a x + b . y = ax + b. y=ax+b.
  • 重新命名变量:
    w 0 + w 1 x 1 = y . w_0 + w_1 x_1 = y. w0+w1x1=y.
  • 强行加一个 x 0 ≡ 1 x_0 \equiv 1 x01:
    w 0 x 0 + w 1 x 1 = y . w_0 x_0 + w_1 x_1 = y. w0x0+w1x1=y.
  • 向量表达:
    x w = y \mathbf{xw} = y xw=y

与Logistic regression相比: w \mathbf{w} w x \mathbf{x} x均少了一维。

损失函数
∑ i = 1 m ( x i w − y i ) 2 . \sum_{i = 1}^m (\mathbf{x}_i\mathbf{w} - y_i)^2. i=1m(xiwyi)2.
矩阵化的表达:
∥ X w − Y ∥ 2 . \|\mathbf{X} \mathbf{w} - \mathbf{Y}\|^2. XwY2.
矩阵化的展开式:
L ( X , Y , w ) = ( X w − Y ) T ( X w − Y ) . L(\mathbf{X}, \mathbf{Y}, \mathbf{w}) = (\mathbf{X} \mathbf{w} - \mathbf{Y})^\mathrm{T}(\mathbf{X} \mathbf{w} - \mathbf{Y}). L(X,Y,w)=(XwY)T(XwY).
求解推导
L ( X , Y , w ) = ( X w − Y ) T ( X w − Y ) = ( w T X T − Y T ) ( X w − Y ) = w T X T X w − w T X T Y − Y T X w + Y T Y \begin{array}{l} L(\mathbf{X}, \mathbf{Y}, \mathbf{w})\\ = (\mathbf{X} \mathbf{w} - \mathbf{Y})^\mathrm{T}(\mathbf{X} \mathbf{w} - \mathbf{Y})\\ = (\mathbf{w}^\mathrm{T}\mathbf{X}^\mathrm{T} - \mathbf{Y}^\mathrm{T})(\mathbf{X} \mathbf{w} - \mathbf{Y})\\ = \mathbf{w}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{X} \mathbf{w} - \mathbf{w}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{Y} - \mathbf{Y}^\mathrm{T}\mathbf{X}\mathbf{w} + \mathbf{Y}^\mathrm{T}\mathbf{Y} \end{array} L(X,Y,w)=(XwY)T(XwY)=(wTXTYT)(XwY)=wTXTXwwTXTYYTXw+YTY
为最小化该函数, 应对 w \mathbf{w} w求导, 且其结果为0。
根据矩阵求导法则:
∂ A w ∂ w = A , ∂ w T A ∂ w = A T , ∂ w T A w ∂ w = 2 w T A . \begin{array}{l} \frac{\partial A \mathbf{w}}{\partial \mathbf{w}} = A,\\ \frac{\partial \mathbf{w}^{\mathrm{T}} A}{\partial \mathbf{w}} = A^{\mathrm{T}},\\ \frac{\partial \mathbf{w}^{\mathrm{T}} A \mathbf{w}}{\partial \mathbf{w}} = 2 \mathbf{w}^{\mathrm{T}} A. \end{array} wAw=A,wwTA=AT,wwTAw=2wTA.
可知:
∂ L ( X , Y , w ) ∂ w = ∂ w T X T X w ∂ w − ∂ w T X T Y ∂ w − ∂ Y T X w ∂ w + ∂ Y T Y ∂ w = 2 w T X T X − Y T X − Y T X + 0 = 2 w T X T X − 2 Y T X \begin{array}{l} \frac{\partial L(\mathbf{X}, \mathbf{Y}, \mathbf{w})}{\partial \mathbf{w}}\\ = \frac{\partial \mathbf{w}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{X} \mathbf{w}}{\partial \mathbf{w}} - \frac{\partial \mathbf{w}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{Y}}{\partial \mathbf{w}} - \frac{\partial \mathbf{Y}^\mathrm{T}\mathbf{X}\mathbf{w}}{\partial \mathbf{w}} + \frac{\partial \mathbf{Y}^\mathrm{T}\mathbf{Y}}{\partial \mathbf{w}}\\ = 2 \mathbf{w}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{X} - \mathbf{Y}^\mathrm{T}\mathbf{X} - \mathbf{Y}^\mathrm{T}\mathbf{X} + 0\\ = 2 \mathbf{w}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{X} - 2 \mathbf{Y}^\mathrm{T}\mathbf{X} \end{array} wL(X,Y,w)=wwTXTXwwwTXTYwYTXw+wYTY=2wTXTXYTXYTX+0=2wTXTX2YTX

2 w ^ T X T X − 2 Y T X = 0 , 2 \mathbf{\hat{w}}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{X} - 2 \mathbf{Y}^\mathrm{T}\mathbf{X} = 0, 2w^TXTX2YTX=0,
可得
w ^ T X T X = Y T X . \mathbf{\hat{w}}^\mathrm{T}\mathbf{X}^\mathrm{T}\mathbf{X} = \mathbf{Y}^\mathrm{T}\mathbf{X}. w^TXTX=YTX.
两边转置
X T X w ^ = X T Y . \mathbf{X}^\mathrm{T}\mathbf{X}\mathbf{\hat{w}} = \mathbf{X}^\mathrm{T}\mathbf{Y}. XTXw^=XTY.
最后
w ^ = ( X T X ) − 1 X T Y . \mathbf{\hat{w}} = (\mathbf{X}^\mathrm{T}\mathbf{X})^{-1}\mathbf{X}^\mathrm{T}\mathbf{Y}. w^=(XTX)1XTY.

2.3 代码分析

#Test my implemenation of Logistic regression and existing one.
import time
#import sklearn, sklearn.datasets, sklearn.neighbors, sklearn.linear_model
import matplotlib.pyplot as plt
import numpy as np

"""
Train a regressor
"""
def linearRegression(X, Y):
    weights = (X.T * X).I * X.T * Y
    return weights

"""
函数:画出决策边界,仅为演示用,且仅支持两个条件属性的数据
"""
def plotBestFit(paraWeights):
    X, Y = loadDataset()

    dataArr = np.array(X)
    
    x1 = [x[1] for x in dataArr]
    print("x1 = ", x1)

    y1 = np.array(Y)

    fig=plt.figure()
    ax=fig.add_subplot(111)
    ax.scatter(x1, y1,s=30,c='red',marker='s')

    #画出拟合直线
    x = np.arange(0, 1.5, 0.1)
    y = paraWeights[0] + paraWeights[1]*x    #直线满足关系:y = w0 + w1 x
    ax.plot(x,y)
 
    plt.xlabel('a1')
    plt.ylabel('a2')
    plt.show()

"""
读数据, csv格式
"""
def loadDataset(paraFilename="data/regression-example01.csv"):
    dataMat=[]  #列表list
    labelMat=[]
    txt=open(paraFilename)
    for line in txt.readlines():
        tempValuesStringArray = np.array(line.replace("\n", "").split(','))
        tempValues = [float(tempValue) for tempValue in tempValuesStringArray]
        tempArray = [1.0] + [tempValue for tempValue in tempValues]
        tempx = tempArray[:-1] #不要最后一列
        tempy = tempArray[-1] #仅最后一列
        
        dataMat.append(tempx)
        labelMat.append(tempy)
        
    print("dataMat = ", dataMat)
    print("labelMat = ", labelMat)
    return np.mat(dataMat), np.mat(labelMat).T

"""
Linear regression
"""
def mfLinearRegressionTest():
    #Step 1. Load the dataset and initialize
    #如果括号内不写数据,则使用4个属性前2个类别的iris
    X, Y = loadDataset("data/regression-example01.csv")

    tempStartTime = time.time()
    tempScore = 0
    numInstances = len(Y)
    
    #Step 2. Train
    weights = linearRegression(X, Y)

    print("Weights = ", weights)

    
    tempEndTime = time.time()
    tempRuntime = tempEndTime - tempStartTime

    #Step 4. Output
    #print('Mf logistic socre: {}, runtime = {}'.format(tempScore, tempRuntime))

    #Step 5. Illustrate 仅对两个属性情况有效
    rowWeights = np.transpose(weights).A[0]
    plotBestFit(rowWeights)

"""
Local linear regression for one data point
"""
def localLinearRegression(paraTestPoint, X, Y, k = 1.0):
    m = len(X)
    weights = np.mat(np.eye((m)))
    for j in range(m):
        diffMat = paraTestPoint - X[j, :]
        #print("diffMat = {}, diffMat^2 = {}".format(diffMat, diffMat * diffMat.T))
        weights[j, j] = np.exp(- diffMat * diffMat.T/(2.0 * k**2))
        #print("weights[{}, {}] = {}".format(j, j, weights[j, j]))
    #print("weights = ", weights)
    
    tempWeights = (X.T * weights * X).I * X.T  * weights * Y
    
    prediction = paraTestPoint * tempWeights
    return prediction[0, 0]

"""
局部加权回归
"""
def mfLocalLinearRegressionTest():
    #Step 1. Load the dataset and initialize
    #如果括号内不写数据,则使用4个属性前2个类别的iris
    X, Y = loadDataset("data/regression-example01.csv")

    tempStartTime = time.time()
    tempScore = 0
    numInstances = len(Y)
    
    #Step 2. Predict one by one
    predicts = [0] * numInstances
    for i in range(numInstances):
        predicts[i] = localLinearRegression(X[i], X, Y, 0.05)

    #print("predicts = ", predicts)
    #print("Real = ", Y)
    
    tempEndTime = time.time()
    tempRuntime = tempEndTime - tempStartTime

    #Step 4. Output
    plotLocalLinear(X, Y, X, predicts)
    
"""
函数:画出决策边界,仅为演示用,且仅支持两个条件属性的数据
"""
def plotLocalLinear(paraX1, paraY1, paraX2, paraY2):
    #print("The data is: ", paraX1)
    m = len(paraY1)
    x1 = [paraX1[i, 1] for i in range(m)]
    #print("x1 = ", x1)
    y1 = np.array(paraY1)
    
    fig=plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(x1, y1, s = 30, c = 'red', marker = 's')

    #画出拟合线
    x2 = [paraX2[i, 1] for i in range(m)]
    y2 = np.array(paraY2)
    ax.plot(x2, y2)
 
    plt.xlabel('a1')
    plt.ylabel('a2')
    plt.show()

"""
Train a ridge regressor
"""
def ridgeRegression(X, Y, paraLambda):
    m = len(X[0])
    ridge = np.mat(np.eye((m))) * 0.1

    weights = (X.T * X + ridge).I * X.T * Y
    return weights


"""
Linear regression
"""
def mfRidgeRegressionTest():
    #Step 1. Load the dataset and initialize
    #如果括号内不写数据,则使用4个属性前2个类别的iris
    X, Y = loadDataset("data/regression-example01.csv")

    tempStartTime = time.time()
    tempScore = 0
    numInstances = len(Y)
    
    #Step 2. Train
    weights = ridgeRegression(X, Y, 0.1)

    print("Weights = ", weights)

    tempEndTime = time.time()
    tempRuntime = tempEndTime - tempStartTime

    #Step 4. Output
    #print('Mf logistic socre: {}, runtime = {}'.format(tempScore, tempRuntime))

    #Step 5. Illustrate 仅对两个属性情况有效
    rowWeights = np.transpose(weights).A[0]
    plotBestFit(rowWeights)
    
def main():
    mfLinearRegressionTest()
    #mfLocalLinearRegressionTest()
    mfRidgeRegressionTest()

main()

3 局部线性回归

4 岭回归

5 Lasso回归

6 小结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32单片机的FLASH和RAM

STM32内置有Flash和RAM(而RAM分为SRAM和DRAM,STM32内为SRAM),硬件上他们是不同的设备存储器、属于两个器件,但这两个存储器的寄存器输入输出端口被组织在同一个虚拟线性地址空间内。 MDK预处理、编译、汇编、链接后编…

月薪7k和月薪27k的测试人都有哪些区别?掌握这些,领导都要高看你...

了解软件测试这行的人都清楚,功能测试的天花板可能也就15k左右,而自动化的起点就在15k左右,当然两个岗位需要掌握的技能肯定是不一样的。 如果刚入门学习完软件测试,那么基本薪资会在7-8k左右,这个薪资不太高主要是因…

【存储】RAID0、RAID1、RAID3、RAID5、RAID6、混合RAID10、混合RAID50

存储RAID基本概念RAID数据组织形式RAID数据保护方式常用RAID级别与分类标准创建RAID组成员盘要求热备盘(Hot Spare)RAID 0的工作原理RAID 0的数据写入RAID 0的数据读取RAID 1的工作原理RAID 1的数据写入RAID 1的数据读取RAID 3的工作原理RAID 3的数据写入…

数据Python 异常处理

python标准异常异常名称描述BaseException所有异常的基类SystemExit解释器请求退出KeyboardInterrupt用户中断执行(通常是输入^C)Exception常规错误的基类StopIteration迭代器没有更多的值GeneratorExit生成器(generator)发生异常来通知退出StandardError所有的内建标准异常的基…

python学习之定制发送带附件的电子邮件

Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封…

数据结构与算法基础(王卓)(12):队列的定义及其基础操作(解决假上溢的方法,循环队列解决队满时判断方法,链队和循环队列的初始化等)

循环队列: 解决假上溢的方法:引入循环队列(判断是否溢出) 将入队操作由: base[rear]x; rear; 准确的来说,是: Q.base[Q.rear]x; Q.rear; 改为 Q.base[Q.rear]x; Q.rear(Q.rear1)% MAXQSIZ…

摘录一下Python列表和元组的学习笔记

1 基础概念 列表一个值,列表值指的是列表本身,而不是列表中的内容 列表用[]表示 列表中的内容称为 表项 len()函数可以显示列表中表项的个数,比如下面这个例子 spam [cat, bat, dog, rat]print(len(spam))列表的范围选取中,比…

96.【SpringBoot接入支付宝-thymeleaf-springBoot】

SpringBoot接入支付宝(一)、前提工作:1、进入支付宝开发平台—沙箱环境1.1、进入个人沙箱环境1.2、接下来进行几个密钥的生成1.3、拿到两个密钥后,进行自定义密钥配置1.4、至此,我们沙箱环境的配置和基本参数都已经获取到。(二)、Java代码-thymeleaf1.导…

蓝桥杯-超级质数

蓝桥杯-超级质数1、问题描述2、解题思路3、代码实现1、问题描述 如果一个质数 P 的每位数字都是质数, 而且每两个相邻的数字组成的两位 数是质数, 而且每三位相邻的数字组成的三位数是质数, 依次类推, 如果每相邻的 k 位数字组成的 k 位数都是质数, 则 P 称为超级质数。 如果把…

重型工业机械设备远程监控解决方案

随着企业的发展,各类机械设备日益增多,为了实现高效的管理和使用,保障安全生产,建立智能化、信息化的工业制造系统成为了必然趋势。 传统的机械设备管理大多采用人工方式,现场作业人员需要每天通过电话、或者E-mail等方…

利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)

【案例12-3】:利用反射实现通过读取配置文件对类进行实例化 【案例介绍】 1.案例描述 现在有一个项目,项目中创建了一个Person类,在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类,在Student类中…

项目管理PMP证书的含金量真的高吗?

含金量当然高的,特别是在项目管理这个领域,绝对是知名度最高的,行业内最受认可的相关证书,含金量等同于于MBA,那么,除去它本身专业知识价值,它的含金量高在哪里呢? (含资…

linux离线状态下将视频mp4格式转换m3u8

因为业务需求,python文件生成的视频为MP4格式,无法在前端浏览器正常播放,需切换m3u8格式,但因为服务器是没有网络的,因袭需要在离线状态下进行完成。 1.离线安装ffmpeg 看网上许多教程,ffmpeg可完成视频格…

【工具】笔记软件测评(简单)

介绍 笔记软件测评 印象笔记 ── ❌开源、❌markdown(不好用)、❌本地存储 臭名昭著,被资本搞烂的理想。 notion ── ❌开源、❌本地存储、✔️数据导出:PDF、HTML、Markdown & CSV (include subpages&#xf…

重回利润增长,涪陵榨菜为何能跑赢周期?

2022年消费市场持续低迷,疫情寒冬之下,不少食品快消企业均遭遇严重的业绩下滑,但一年里不断遭遇利空打击的“榨菜茅”涪陵榨菜,不仅安然躲过“酸菜劫”、走出“钠”争议,而且顺利将产品价格提起来,并在寒冬…

C++基础篇(一)-- 简单入门

C 语言是在优化 C 语言的基础上为支持面向对象的程序设计而研制的一个通用目的的程序设计语言。在后来的持续研究中,C 增加了许多新概念,例如虚函数、重载、继承、标准模板库、异常处理、命名空间等。 C 语言的特点主要表现在两个方面:全面兼…

CSS的背景版块知识

😊博主页面:鱿年年 👉博主推荐专栏:《WEB前端》👈 ​💓博主格言:追风赶月莫停留,平芜尽处是春山❤️ 目录 前言 一、背景颜色 二、背景图片 三、背景平铺 四、背景图片位置…

ATTCK v10版本战术介绍—持久化(二)

一、引言在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行战术、持久化战术(一)知识,本期我们为大家介绍ATT&CK 14项战术中持久化战术(二)涉及的6项子技术,后续会陆续介绍其他战术…

魔兽世界335 自动加入公会教程

最近遇到新人进游戏不能自动加入公会的问题,论坛找了好久也没有找到解决办法。自己摸索后发现是核心的问题,下面教程开始1.利用GM账号进游戏,分别创建LM、BL角色,利用GM命令创建公会举例 LM角色名字:暴风 BL角色名字&a…

开发手册——一、编程规约_4.OOP规约

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访…