线性回归

线性回归,简单而言,就是将输入项分别乘以一些常量,再将结果加起来得到输出。线性回归包括一元线性回归和多元线性回归。
image.png

一元线性回归

线型回归分析中,如果仅有一个自变量与一个因变量,且其关系大致上可用一条直线表示,则称之为一元线性回归(简单回归分析)。如果发现因变量Y和自变量X之间存在高度的正相关,可以确定一条直线的方程,使得所有的数据点尽可能接近这条拟合的直线。简单回归分析的模型可以用以下方程表示:机器学习--线性回归(原理) - 图2 其中:机器学习--线性回归(原理) - 图3为自变量, 机器学习--线性回归(原理) - 图4为因变量,机器学习--线性回归(原理) - 图5为截距,机器学习--线性回归(原理) - 图6为相关系数,机器学习--线性回归(原理) - 图7为模型的误差项。

最小二乘法求解拟合线

简单线性回归模型的求解问题,即如何根据自变量机器学习--线性回归(原理) - 图8和因变量机器学习--线性回归(原理) - 图9,求解回归系数机器学习--线性回归(原理) - 图10机器学习--线性回归(原理) - 图11。前面已经提到,误差项机器学习--线性回归(原理) - 图12是为了平衡等号两边的值,如果拟合线能够精确地捕捉到每一个点(所有的散点全部落在拟合线上),那么对应的误差项机器学习--线性回归(原理) - 图13应该为0。按照这个思路来看,要想得到理想的拟合线,就必须使误差项ε达到最小。由于误差项是机器学习--线性回归(原理) - 图14机器学习--线性回归(原理) - 图15的差,结果可能为正值或负值,因此误差项机器学习--线性回归(原理) - 图16达到最小的问题需转换为误差平方和最小的问题(**最小二乘法的思路**)。
误差平方和的公式可以表示为:机器学习--线性回归(原理) - 图17由于建模时的自变量值和因变量值都是已知的,因此求解误差平方和最小值的问题就是求解函数机器学习--线性回归(原理) - 图18的最小值,而该函数的参数就是回归系数机器学习--线性回归(原理) - 图19机器学习--线性回归(原理) - 图20。该目标函数其实就是一个二元二次函数,如需使得目标函数机器学习--线性回归(原理) - 图21达到最小,可以使用偏导数的方法求解出参数机器学习--线性回归(原理) - 图22机器学习--线性回归(原理) - 图23,进而得到目标函数的最小值。关于目标函数的求导过程如下:
第一步:展开平方项
image.png(公式1-1)
第二步:求偏导数并设偏导数为0
image.png(公式1-2)
第三步:和公式转换
image.png(公式1-3)
第四步:化解

image.png(公式1-4)
第五步:将参数a带入,求解b
image.png(公式1-5)
如上推导结果所示,参数机器学习--线性回归(原理) - 图29机器学习--线性回归(原理) - 图30的值都是关于自变量x和因变量y的公式。

最小二乘法实践

问题引入:**通过公式(1-5)计算出工作年限与收入之间回归模型的参数值a和b。

  1. # 导入第三方模块
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. # 导入数据集
  5. income = pd.read_csv(r'E:/Data/6/Salary_Data.csv')
  6. x = income['YearsExperience']
  7. y = income['Salary']
  8. # 绘制散点图
  9. plt.scatter(x , y )
  10. plt.xlabel("YearsExperience")
  11. plt.ylabel("Salary")
  12. # 显示图形
  13. plt.show()

image.png
上图反映的就是自变量YearsExperience与因变量Salary之间的散点图,从散点图的趋势来看,工作年限与收入之间存在明显的正相关关系,即工作年限越长,收入水平越高。下面我们思考如何得到找到一条拟合线,让每个散点基本上都是围绕在拟合线附近。要得到这条拟合曲线,需要先确定其参数机器学习--线性回归(原理) - 图32机器学习--线性回归(原理) - 图33,进而确定其数学表达式。

  1. income.shape

output:`` (30, 2)
从公式(1-5)中我们可知,需要先计算出自变量、因变量、自变量平方、自变量与因变量乘积的和。image.png

  1. # 样本量
  2. n = income.shape[0]
  3. # 计算自变量xi、因变量yi、自变量平方xi^2、自变量与因变量乘积xiyi的和
  4. sum_x = income.YearsExperience.sum()
  5. sum_y = income.Salary.sum()
  6. sum_x2 = income.YearsExperience.pow(2).sum()
  7. xy = income.YearsExperience * income.Salary
  8. sum_xy = xy.sum()

根据上面求出的几个变量,我们可套用公式计算出机器学习--线性回归(原理) - 图35

  1. b = (sum_xy-(sum_x*sum_y)/n)/(sum_x2-(sum_x**2/n))
  2. a = income.Salary.mean()-b*income.YearsExperience.mean()
  3. # 打印出计算结果
  4. print('回归参数a的值:',a)
  5. print('回归参数b的值:',b)

output:
回归参数a的值: 25792.200198668666
回归参数b的值: 9449.962321455081

  1. # 绘制拟合曲线
  2. pred_y= a + b*x
  3. plt.scatter(x , y)
  4. plt.plot(x,pred_y,c='r')
  5. plt.show()

image.png
图中的直线就是关于散点的线性回归拟合线,从图中可知,每个散点基本上都是围绕在拟合线附近。因此,收入的简单线性回归模型可以表示成:Salary=25792.20+9449.96YearsExperience

梯度下降法求解拟合线

多元线性回归

多元线性回归是简单线性回归的推广,指的是多个因变量对多个自变量的回归。其中最常用的是只限于一个因变量但有多个自变量的情况,也叫多重回归。多重回归的一般形式如下:机器学习--线性回归(原理) - 图37,机器学习--线性回归(原理) - 图38代表截距,机器学习--线性回归(原理) - 图39为回归系数。