机器学习实战之路 —— 1 线性回归 (一)

近期自己准备将之前在机器学习方面做的一些学习及研究工作,重新稍加整理成稿发出来,权当记录分享。俗话说,好记性不如烂笔头,有时候自己理解是一个层次,而写出来给别人看,往往需要站在受众的角度去思考,进而希望更好的传达自己的观点和想法,所以在文章构思及落笔成文时,已经加深了自己对原本问题和相关知识的理解,这是比仅仅自己理解更深入的一个层次。回顾自己求学及工作中整理撰写各类论文及报告时,莫不如此。分享不仅是对自己过往学习的一个回顾,一定程度上也是驱动进一步学习的动力。

1. 线性回归

回归问题和分类问题的区别仅仅在于设定的目标值得类型不同。分类设定的目标值是离散的,意义是“类别”;而回归设定的目标值是连续的,意义是某种“数值”。由于仅仅是目标值不同,所以对于大部门的机器学习模型而言,一般都有对应的“分类版”模型实现和“回归版”模型实现。相对应的分类模型和回归模型在实现思路上非常相近,一般而言,两者的主要区别在于:
*目标数值的类型不同(离散值 vs 连续值)
*损失函数设计不同
*评估指标选择不同
——《机器学习之路》 P 61 P_{61} P61

线性模型形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型 (nonlinear model)可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于 ω 直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性 (comprehensibility)。
——《机器学习-周志华》 P 53 P_{53} P53

优点:结果易于理解,计算上不复杂。
缺点:对非线性的数据拟合不好。
适用数据类型:数值型和标称型数据。
——《机器学习实战》 P 136 P_{136} P136

回归的一般方法:

  1. 收集数据:采用任意方法收集数据。
  2. 准备数据:回归需要数值型数据,标称型数据将被转成二值型数据。
  3. 分析数据:绘出数据的可视化二维图将有助于对数据做出理解和分析,在采用缩减法求得新回归系数之后, 可以将新拟合线绘在图上作为对比。
  4. 训练算法:找到回归系数。
  5. 测试算法:使用 R 2 R^2 R2或者预测值和数据的拟合度,来分析模型的效果。
  6. 使用算法:使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。
    ——《机器学习实战》 P 137 P_{137} P137

2. 标准线性回归

2.1 方程组求解

在此首先将以线性回归为例,介绍回归算法和模型。回归分析是迄今为止数值型数据建模最常用的方法,可以适用几乎所有的数据,且提供了变量与结果之间强度与大小的估计。在线性回归的学习过程中,在此也将会展开论述其中的推导过程。

对于给定数据集 D = { ( x 1 , y 1 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . . . , ( x m , y m ) } D=\{ (x_1,y_1),(x_1,y_1),(x_2,y_2),......,(x_m,y_m)\} D={(x1,y1),(x1,y1),(x2,y2),......,(xm,ym)},其中 x i = ( x i 1 , x i 1 , . . . . . . , x i d ) x_i=(x_i1,x_i1,......,x_id) xi=(xi1,xi1,......,xid), y i ∈ R y_i\in R yiR,线性回归(linear regression)试图学得一个线性模型 f ( x i ) = ω ∗ x i + b f(x_i)=ω* x_i+b f(xi)=ωxi+b,以尽可能准确地预测实值输出标记 f ( x i ) ≈ y i f(x_i)\approx y_i f(xi)yi

回归任务中常使用均方误差来衡量 f(x) 与 y 之间的差别。使均方误差最小化得到的 ω, b 即我们所求。基于均方误差来进行模型求解的方法称为最小二乘法:

L ( ω , b ) = ∑ i = 1 m ( y i − f ( x i ) ) 2 = ∑ i = 1 m ( y i − ( ω ∗ x i + b ) ) 2 ( 2.1 ) \begin{aligned} L(ω,b)&=\sum_{i=1}^{m}(y_i-f(x_i))^2 \\ &=\sum_{i=1}^{m}(y_i-(ω* x_i+b))^2 \qquad (2.1) \end{aligned} L(ω,b)=i=1m(yif(xi))2=i=1m(yi(ωxi+b))2(2.1)
L(ω,b)是关于ω和b的凸函数,当它关于ω和b导数均为0时,可得到ω和b的最优解。

求解 b,将L(ω,b)对b求偏导令其等于零:
∂ L ( ω , b ) ∂ b = 2 ∗ ( ∑ i = 1 m ( y i − ( ω ∗ x i + b ) ) ) ∗ ( − 1 ) = 0 ∑ i = 1 m y i = ∑ i = 1 m ( ω ∗ x i + b ) ∑ i = 1 m y i = ω ∑ i = 1 m x i + m ∗ b 1 m ∑ i = 1 m y i = 1 m ∗ ω ∑ i = 1 m x i + b y i ‾ = ω ∗ x i ‾ + b b = y i ‾ − ω ∗ x i ‾ \begin{aligned} \frac{\partial L(ω,b)}{\partial b} =2*(\sum_{i=1}^{m}(y_i-(ω* x_i+b)))* (-1)&=0\\ \sum_{i=1}^{m}y_i &=\sum_{i=1}^{m}(ω* x_i+b)\\ \sum_{i=1}^{m}y_i &=ω\sum_{i=1}^{m}x_i+m* b\\ \frac{1}{m}\sum_{i=1}^{m}y_i &=\frac{1}{m}* ω\sum_{i=1}^{m}x_i+b\\ \overline{y_i} &=ω*\overline{x_i}+b \\ b &=\overline{y_i} - ω*\overline{x_i} \end{aligned} bL(ω,b)=2(i=1m(yi(ωxi+b)))(1)i=1myii=1myim1i=1myiyib=0=i=1m(ωxi+b)=ωi=1mxi+mb=m1ωi=1mxi+b=ωxi+b=yiωxi

b的表达式为:
b = y i ‾ − ω ∗ x i ‾ ( 2.2 ) b=\overline{y_i} - ω*\overline{x_i} \qquad (2.2) b=yiωxi(2.2)
其中: x ‾ = 1 m ∗ ∑ i = 1 m x i \overline{x}=\frac{1}{m}* \sum_{i=1}^{m}x_i x=m1i=1mxi y ‾ = 1 m ∗ ∑ i = 1 m y i \overline{y}=\frac{1}{m}* \sum_{i=1}^{m}y_i y=m1i=1myi
求解ω,将L(ω,b)对ω求导令其等于零:
∂ L ( ω , b ) ∂ ω = 2 ∗ ( ∑ i = 1 m ( y i − ( ω ∗ x i + b ) ) ) ∗ ( − x i ) = 0 ( ∑ i = 1 m ( y i ∗ x i ) ) = ω ∑ i = 1 m x i 2 + ∑ i = 1 m b ∗ x i \begin{aligned} \frac{\partial L(ω,b)}{\partial ω} =2*(\sum_{i=1}^{m}(y_i-(ω* x_i+b)))* (-x_i) &= 0\\ (\sum_{i=1}^{m}(y_i* x_i)) &= ω\sum_{i=1}^{m}x_i^2+\sum_{i=1}^{m}b* x_i\\ \end{aligned} ωL(ω,b)=2(i=1m(yi(ωxi+b)))(xi)(i=1m(yixi))=0=ωi=1mxi2+i=1mbxi
b = y i ‾ − ω ∗ x i ‾ b=\overline{y_i} - ω*\overline{x_i} b=yiωxi带入上式:
∑ i = 1 m y i ∗ x i = ω ∑ i = 1 m x i 2 + ∑ i = 1 m ( y i ‾ − ω ∗ x i ‾ ) ∗ x i ∑ i = 1 m y i ∗ x i = ω ∑ i = 1 m x i 2 + y i ‾ ∑ i = 1 m x i − ω ∗ x i ‾ ∑ i = 1 m x i ω ∗ ( ∑ i = 1 m x i 2 − x i ‾ ∑ i = 1 m x i ) = ∑ i = 1 m y i ∗ x i − y i ‾ ∑ i = 1 m x i ω = ∑ i = 1 m y i ∗ x i − y i ‾ ∑ i = 1 m x i ∑ i = 1 m x i 2 − x i ‾ ∑ i = 1 m x i ( 2.3 ) \begin{aligned} \sum_{i=1}^{m}y_i* x_i &= ω\sum_{i=1}^{m}x_i^2+\sum_{i=1}^{m}(\overline{y_i} - ω*\overline{x_i})* x_i\\ \sum_{i=1}^{m}y_i* x_i &= ω\sum_{i=1}^{m}x_i^2+\overline{y_i}\sum_{i=1}^{m} x_i - ω*\overline{x_i}\sum_{i=1}^{m} x_i\\ ω* (\sum_{i=1}^{m}x_i^2-\overline{x_i}\sum_{i=1}^{m} x_i )&=\sum_{i=1}^{m}y_i* x_i -\overline{y_i}\sum_{i=1}^{m}x_i \\ ω &=\frac{ \sum_{i=1}^{m}y_i* x_i -\overline{y_i}\sum_{i=1}^{m}x_i }{ \sum_{i=1}^{m}x_i^2-\overline{x_i}\sum_{i=1}^{m} x_i } \qquad (2.3) \end{aligned} i=1myixii=1myixiω(i=1mxi2xii=1mxi)ω=ωi=1mxi2+i=1m(yiωxi)xi=ωi=1mxi2+yii=1mxiωxii=1mxi=i=1myixiyii=1mxi=i=1mxi2xii=1mxii=1myixiyii=1mxi(2.3)
上式(2.3)中:
y i ‾ ∑ i = 1 m x i = 1 m ∑ i = 1 m y i ∑ i = 1 m x i = 1 m ∑ i = 1 m x i ∑ i = 1 m y i = x i ‾ ∑ i = 1 m y i y i ‾ ∑ i = 1 m x i = x i ‾ ∑ i = 1 m y i ( 2.4 ) \begin{aligned} \overline{y_i}\sum_{i=1}^{m}x_i &= \frac{1}{m} \sum_{i=1}^{m}y_i\sum_{i=1}^{m}x_i \\ &= \frac{1}{m} \sum_{i=1}^{m}x_i \sum_{i=1}^{m}y_i\\ &= \overline{x_i}\sum_{i=1}^{m}y_i \\ \overline{y_i}\sum_{i=1}^{m}x_i =\overline{x_i}\sum_{i=1}^{m}y_i \qquad (2.4) \end{aligned} yii=1mxiyii=1mxi=xii=1myi(2.4)=m1i=1myii=1mxi=m1i=1mxii=1myi=xii=1myi
此外:
y i ‾ ∑ i = 1 m x i = m ∗ 1 m ∗ y i ‾ ∑ i = 1 m x i = m ∗ y i ‾ ∗ x i ‾ = ∑ i = 1 m y i ‾ ∗ x i ‾ y i ‾ ∑ i = 1 m x i = ∑ i = 1 m y i ‾ ∗ x i ‾ ( 2.5 ) \begin{aligned} \overline{y_i}\sum_{i=1}^{m}x_i &= m*\frac{1}{m} * \overline{y_i}\sum_{i=1}^{m}x_i \\ &= m* \overline{y_i}* \overline{x_i} \\ &= \sum_{i=1}^{m}\overline{y_i}* \overline{x_i} \\ \overline{y_i}\sum_{i=1}^{m}x_i =\sum_{i=1}^{m}\overline{y_i}* \overline{x_i} \qquad (2.5) \end{aligned} yii=1mxiyii=1mxi=i=1myixi(2.5)=mm1yii=1mxi=myixi=i=1myixi
联立(2.4)和(2.5),可得式(2.6)及推广(2.7):
y i ‾ ∑ i = 1 m x i = x i ‾ ∑ i = 1 m y i = ∑ i = 1 m y i ‾ ∗ x i ‾ ( 2.6 ) x i ‾ ∑ i = 1 m x i = x i ‾ ∑ i = 1 m x i = ∑ i = 1 m x i ‾ 2 ( 2.7 ) \begin{aligned} \overline{y_i}\sum_{i=1}^{m}x_i =\overline{x_i}\sum_{i=1}^{m}y_i = \sum_{i=1}^{m}\overline{y_i}* \overline{x_i} \qquad (2.6) \\ \overline{x_i}\sum_{i=1}^{m}x_i =\overline{x_i}\sum_{i=1}^{m}x_i = \sum_{i=1}^{m}\overline{x_i}^2 \qquad (2.7) \\ \end{aligned} yii=1mxi=xii=1myi=i=1myixi(2.6)xii=1mxi=xii=1mxi=i=1mxi2(2.7)
同样推导可得:
x i ‾ ∑ i = 1 m x i = 1 m ∑ i = 1 m x i ∑ i = 1 m x i = 1 m ( ∑ i = 1 m x i ) 2 x i ‾ ∑ i = 1 m x i = 1 m ( ∑ i = 1 m x i ) 2 ( 2.8 ) \begin{aligned} \overline{x_i}\sum_{i=1}^{m}x_i &= \frac{1}{m} \sum_{i=1}^{m}x_i\sum_{i=1}^{m}x_i \\ &= \frac{1}{m} (\sum_{i=1}^{m}x_i )^2\\ \overline{x_i}\sum_{i=1}^{m}x_i = \frac{1}{m} (\sum_{i=1}^{m}x_i )^2 \qquad (2.8) \end{aligned} xii=1mxixii=1mxi=m1(i=1mxi)2(2.8)=m1i=1mxii=1mxi=m1(i=1mxi)2
将式(2.5) y i ‾ ∑ i = 1 m x i = x i ‾ ∑ i = 1 m y i \overline{y_i}\sum_{i=1}^{m}x_i =\overline{x_i}\sum_{i=1}^{m}y_i yii=1mxi=xii=1myi和式(2.8) x i ‾ ∑ i = 1 m x i = 1 m ( ∑ i = 1 m x i ) 2 \overline{x_i}\sum_{i=1}^{m}x_i = \frac{1}{m} (\sum_{i=1}^{m}x_i )^2 xii=1mxi=m1(i=1mxi)2带入式(2.3)即可得式(2.9):
ω = ∑ i = 1 m y i ∗ x i − y i ‾ ∑ i = 1 m x i ∑ i = 1 m x i 2 − x i ‾ ∑ i = 1 m x i = ∑ i = 1 m y i ∗ x i − x i ‾ ∑ i = 1 m y i ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 = ∑ i = 1 m y i ∗ ( x i − x i ‾ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 ( 2.9 ) \begin{aligned} ω &=\frac{ \sum_{i=1}^{m}y_i* x_i -\overline{y_i}\sum_{i=1}^{m}x_i }{ \sum_{i=1}^{m}x_i^2-\overline{x_i}\sum_{i=1}^{m} x_i } \\ &=\frac{ \sum_{i=1}^{m}y_i* x_i -\overline{x_i}\sum_{i=1}^{m}y_i }{ \sum_{i=1}^{m}x_i^2- \frac{1}{m} (\sum_{i=1}^{m}x_i )^2 } \\ &=\frac{ \sum_{i=1}^{m}y_i*( x_i -\overline{x_i}) }{ \sum_{i=1}^{m}x_i^2- \frac{1}{m} (\sum_{i=1}^{m}x_i )^2 } \qquad (2.9) \end{aligned} ω=i=1mxi2xii=1mxii=1myixiyii=1mxi=i=1mxi2m1(i=1mxi)2i=1myixixii=1myi=i=1mxi2m1(i=1mxi)2i=1myi(xixi)(2.9)
联立ω和b表达式(2.9),(2.2),即可得ω,b的第一种表达形式 (2.10):
ω = ∑ i = 1 m y i ∗ ( x i − x i ‾ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 b = y i ‾ − ω ∗ x i ‾ ( 2.10 ) \begin{aligned} ω &=\frac{ \sum_{i=1}^{m}y_i*( x_i -\overline{x_i}) }{ \sum_{i=1}^{m}x_i^2- \frac{1}{m} (\sum_{i=1}^{m}x_i )^2 } \qquad b=\overline{y_i} - ω*\overline{x_i} \qquad (2.10) \end{aligned} ω=i=1mxi2m1(i=1mxi)2i=1myi(xixi)b=yiωxi(2.10)
x ‾ = 1 m ∗ ∑ i = 1 m x i \overline{x}=\frac{1}{m}* \sum_{i=1}^{m}x_i x=m1i=1mxi y ‾ = 1 m ∗ ∑ i = 1 m y i \overline{y}=\frac{1}{m}* \sum_{i=1}^{m}y_i y=m1i=1myi带入式(2.10),整理即可得ω,b的第二种表达形式(2.11):
ω = m ∗ ∑ i = 1 m y i ∗ x i − ∑ i = 1 m y i ∑ i = 1 m x i m ∗ ∑ i = 1 m x i 2 − ( ∑ i = 1 m x i ) 2 b = ∑ i = 1 m x i 2 ∑ i = 1 m y i − ∑ i = 1 m x i ∑ i = 1 m x i ∗ y i m ∗ ∑ i = 1 m x i 2 − ( ∑ i = 1 m x i ) 2 ( 2.11 ) \begin{aligned} ω =\frac{ m*\sum_{i=1}^{m}y_i* x_i - \sum_{i=1}^{m}y_i \sum_{i=1}^{m}x_i }{ m*\sum_{i=1}^{m}x_i^2-(\sum_{i=1}^{m}x_i )^2 } \qquad b=\frac{ \sum_{i=1}^{m}x_i^2 \sum_{i=1}^{m}y_i - \sum_{i=1}^{m}x_i \sum_{i=1}^{m}x_i* y_i }{ m*\sum_{i=1}^{m}x_i^2-(\sum_{i=1}^{m}x_i )^2 } \qquad (2.11) \end{aligned} ω=mi=1mxi2(i=1mxi)2mi=1myixii=1myii=1mxib=mi=1mxi2(i=1mxi)2i=1mxi2i=1myii=1mxii=1mxiyi(2.11)
将式(2.6) 和式(2.7)带入式(2.9)即可得式(2.12):
ω = ∑ i = 1 m y i ∗ x i − y i ‾ ∑ i = 1 m x i ∑ i = 1 m x i 2 − x i ‾ ∑ i = 1 m x i = ∑ i = 1 m y i ∗ x i − y i ‾ ∑ i = 1 m x i − x i ‾ ∑ i = 1 m y i + ∑ i = 1 m y i ‾ ∗ x i ‾ ∑ i = 1 m x i 2 − x i ‾ ∑ i = 1 m x i − x i ‾ ∑ i = 1 m x i + ∑ i = 1 m x i ‾ 2 = ∑ i = 1 m ( x i − x i ‾ ) ( y i − y i ‾ ) ∑ i = 1 m ( x i − x i ‾ ) 2 = c o v ( x , y ) v a r ( x ) ( 2.12 ) \begin{aligned} ω &=\frac{ \sum_{i=1}^{m}y_i* x_i -\overline{y_i}\sum_{i=1}^{m}x_i }{ \sum_{i=1}^{m}x_i^2-\overline{x_i}\sum_{i=1}^{m} x_i } \\ &=\frac{ \sum_{i=1}^{m}y_i* x_i -\overline{y_i}\sum_{i=1}^{m}x_i -\overline{x_i}\sum_{i=1}^{m}y_i + \sum_{i=1}^{m}\overline{y_i}* \overline{x_i} }{ \sum_{i=1}^{m}x_i^2-\overline{x_i}\sum_{i=1}^{m} x_i -\overline{x_i}\sum_{i=1}^{m}x_i + \sum_{i=1}^{m}\overline{x_i}^2 } \\ &=\frac{ \sum_{i=1}^{m}( x_i -\overline{x_i})( y_i - \overline{y_i}) }{ \sum_{i=1}^{m} (x_i- \overline{x_i} )^2 } \\ &= \frac{cov(x,y) }{ var(x) } \qquad (2.12) \end{aligned} ω=i=1mxi2xii=1mxii=1myixiyii=1mxi=i=1mxi2xii=1mxixii=1mxi+i=1mxi2i=1myixiyii=1mxixii=1myi+i=1myixi=i=1m(xixi)2i=1m(xixi)(yiyi)=var(x)cov(x,y)(2.12)
联立可得ω,b的第三种表达形式:
ω = c o v ( x , y ) v a r ( x ) = ∑ i = 1 m ( x i − x i ‾ ) ( y i − y i ‾ ) ∑ i = 1 m ( x i − x i ‾ ) 2 b = y i ‾ − ω ∗ x i ‾ ( 2.13 ) \begin{aligned} ω = \frac{cov(x,y) }{ var(x) }=\frac{ \sum_{i=1}^{m}( x_i -\overline{x_i})( y_i - \overline{y_i}) }{ \sum_{i=1}^{m} (x_i- \overline{x_i} )^2 } \qquad b=\overline{y_i} - ω*\overline{x_i} \qquad (2.13) \end{aligned} ω=var(x)cov(x,y)=i=1m(xixi)2i=1m(xixi)(yiyi)b=yiωxi(2.13)

2.2 矩阵求解

除了上述方程组的求解方法,还可以利用矩阵方法来求解。对于原拟合函数,同样可写成:
y = ω ∗ x i + b = ω 0 + ω 1 ∗ x \begin{aligned} y &=ω* x_i+b \\ &=ω_0+ω_1* x \\ \end{aligned} y=ωxi+b=ω0+ω1x
对于m个样本,则相应的矩阵表达式为:
Y = X ω \begin{aligned} Y &= Xω \\ \end{aligned} Y=Xω
式中:
Y = [ y 1 y 2 ⋮ y m ] X = [ 1 x 1 1 x 2 ⋮ 1 x m ] ω = [ ω 0 ω 1 ] \begin{aligned} Y= \left[ \begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{matrix} \right] \qquad X= \left[ \begin{matrix} 1&x_1 \\ 1&x_2 \\ \vdots \\ 1&x_m \end{matrix} \right] \qquad ω= \left[ \begin{matrix} ω_0 \\ ω_1 \end{matrix} \right] \end{aligned} Y=y1y2ymX=111x1x2xmω=[ω0ω1]
进而可得:
L = ∑ i = 1 m ( y i − x i T ω ) 2 = ( Y − X ω ) T ( Y − X ω ) = ( Y − X ω ) T Y − ( Y − X ω ) X ω = Y T Y − ω T X T Y − Y T X ω + ω T X T X ω ( 2.14 ) \begin{aligned} L &=\sum_{i=1}^{m}(y_i-x_i^Tω)^2 \\ &=(Y - Xω)^T(Y - Xω)\\ &=(Y - Xω)^TY - (Y - Xω)Xω\\ &=Y^TY - ω^TX^TY - Y^TXω+ω^TX^TXω \qquad (2.14) \end{aligned} L=i=1m(yixiTω)2=(YXω)T(YXω)=(YXω)TY(YXω)Xω=YTYωTXTYYTXω+ωTXTXω(2.14)
根据矩阵求导的几个重要公式及性质:
∂ X T A X ∂ X = 2 A X ∂ X T A ∂ X = A ∂ A X ∂ X = A T \begin{aligned} \frac{\partial X^TAX}{\partial X} =2AX \qquad \frac{\partial X^TA}{\partial X} =A \qquad \frac{\partial AX}{\partial X} =A^T \qquad \end{aligned} XXTAX=2AXXXTA=AXAX=AT
则式对(2.14)求导可得:
∂ L ∂ ω = ∂ Y T Y − ω T X T Y − Y T X ω + ω T X T X ω ∂ ω = − 2 X T Y + 2 X T X ω \begin{aligned} \frac{\partial L}{\partial ω} &=\frac{\partial Y^TY - ω^TX^TY - Y^TXω+ω^TX^TXω}{\partial ω} \\ &= -2X^TY +2X^TXω \\ \end{aligned} ωL=ωYTYωTXTYYTXω+ωTXTXω=2XTY+2XTXω
令该导数为零,当 X T X X^TX XTX可逆,则有:
− 2 X T Y + 2 X T X ω = 0 X T X ω = X T Y ω = ( X T X ) − 1 X T Y ( 2.15 ) \begin{aligned} -2X^TY +2X^TXω &= 0\\ X^TXω &= X^TY \\ ω &= ( X^TX)^{-1}X^TY \qquad (2.15)\\ \end{aligned} 2XTY+2XTXωXTXωω=0=XTY=(XTX)1XTY(2.15)

2.3 模型评估

基于线性回归拟合得到的模型之后,很重要的一点就是如何评估该线性回归模型对给定数据的拟合程度?
关于该问题,在回归算法通常采用决定系数(coefficient ofdetermination) R 2 R^2 R2来评估。以下给出 R 2 R^2 R2的相关概念定义。
总平方和 S S R t o t SSR_{tot} SSRtot S S R t o t = ∑ i = 1 m ( y i − y i ‾ ) SSR_{tot} = \sum_{i=1}^{m}(y_i- \overline{y_i}) SSRtot=i=1m(yiyi)
回归平方和 S S R r e g SSR_{reg} SSRreg S S R r e g = ∑ i = 1 m ( f ( x i ) − y i ‾ ) SSR_{reg} = \sum_{i=1}^{m}(f(x_i)- \overline{y_i}) SSRreg=i=1m(f(xi)yi)
残差平方和 S S R r e s SSR_{res} SSRres S S R r e g = ∑ i = 1 m ( y i − f ( x i ) ) SSR_{reg} = \sum_{i=1}^{m}(y_i-f(x_i)) SSRreg=i=1m(yif(xi))
决定系数 R 2 R^2 R2 R 2 = 1 − S S R r e s S S R t o t R^2 = 1 - \frac{SSR_{res}}{SSR_{tot}} R2=1SSRtotSSRres
S S R r e s SSR_{res} SSRres表征的是真实数据和回归数据的误差, S S R t o t SSR_{tot} SSRtot表征的是真实数据和其平均值的误差, S S R r e s SSR_{res} SSRres一般情况下比 S S R t o t SSR_{tot} SSRtot小,其比值一般在0-1之间。当回归拟合越准确,则 S S R r e s SSR_{res} SSRres越小, R 2 R^2 R2越接近于1;当拟合越不准确,则 S S R r e s SSR_{res} SSRres越大, R 2 R^2 R2越接近于0。
R 2 R^2 R2表征了自变量x对因变量y的解释程度,当自变量引起的变动占总变动的百分比高,则观察点在回归直线附近越密集,也就是回归拟合度越好。

3. 实战

问题描述:
假设某披萨店的披萨价格和披萨直径之间有下列数据关系:

IDDiameterPrice
167.0
289.0
31013.0
41417.5
51818.0

其中 Diameter 为披萨直径,单位为“英寸”;Price 为披萨价格,单位为“美元”。
根据以上训练数据,来预测任一直径的披萨的价格。

要分析该问题,我们首先可以使用 matplotlib 画出数据的散点图,x 轴表示披萨直径,y 轴表示披萨价格。由此可以直观的查看和分析数据信息。

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

# 读取数据
pizza = pd.read_csv("pizza.csv", index_col='Id')
pizza.head()

# 定义绘图
def runplt():
    plt.figure()
    plt.scatter(dia, price, c='r', marker='o')  # 绘制散点图
    plt.title("Pizza price plotted against diameter")
    plt.xlabel("Diameter")
    plt.ylabel("Price")
    plt.grid(True)
    plt.xlim(0,25)
    plt.ylim(0,25)
    return plt
	
# 获取pizza尺寸、价格数据
dia = pizza.loc[:,'Diameter'].values 
price = pizza.loc[:,'Price'].values

# 绘制散点图
plt = runplt()
plt.show()

绘制得到的数据视图如下:

在这里插入图片描述

基于以上训练数据散点图可容易看出,其分布具备线性关系,由此我们可以假设披萨的直径和价格关系可用线性回归模型表示: f ( x ) = ω ∗ x + b f(x)=ω* x+b f(x)=ωx+b,这里 x 指披萨的直径,f(x) 为预测的披萨的价格。根据2.1章节的方程组推导公式,求解参数ω,b。
实现代码如下:

# 解法一 公式(2.10) :
# w = np.sum(price * (dia - np.mean(dia))) / (np.sum(dia**2) - (1/dia.size) * (np.sum(dia))**2)
# b = (1 / dia.size) * np.sum(price - w * dia)

#解法二 公式(2.13):
variance = np.var(dia, ddof=1)  # 计算方差,doff为贝塞尔(无偏估计)校正系数
covariance = np.cov(dia, price)[0][1]  # 计算协方差
w = covariance / variance
b = np.mean(price) - w * np.mean(dia)
print("w = %f\nb = %f" % (w, b))
y_pred = w * dia + b # 拟合曲线
# 拟合曲线
plt = runplt()
plt.plot(dia, y_pred, 'b-')
plt.show()

输出结果如下:

w= 0.976293
b= 1.965517

绘图如下:
在这里插入图片描述

也可以根据2.2章节的矩阵求解推导公式,求解回归系数。

# 解法三:矩阵求解
def standRegres(xArr,yArr):
    xMat = mat(xArr); yMat = mat(yArr).T
    xTx = xMat.T*xMat
    if linalg.det(xTx) == 0.0:
        print("矩阵为奇异矩阵,不能求逆")
        return
    # 计算回归系数
    ws = xTx.I * (xMat.T*yMat)
    return ws
dia1 = np.vstack([np.ones(len(dia)), dia]).T # 增加单位1的首列
regrescoeff = standRegresMatirx(dia1,price)  # 回归系数
print(regrescoeff)

输出结果如下:

 [[1.96551724]
 [0.9762931 ]]

易知矩阵解法和方程组求解获得同样的回归系数。

也可以直接调用sklearn库,使用linear_model中线性回算法模型,关键代码如下:

解法四:sklearn.linear_model 线性回归模型求解
model = LinearRegression() #创建模型
x_train = dia.reshape((-1,1)) # 数据转换成1列
y_train = price
model.fit(x_train,y_train) # 用训练集来训练出线型回归模型
print("回归系数:", model.coef_, "   截距:", model.intercept_)

x_test = [[0], [10], [22]] # 取3个预测值
y_pred2 = model.predict(x_test) # 进行预测
print("预测值:",y_pred2)

plt = runplt()
plt.plot(x_test, y_pred2, 'g-',label='sklearn') #绘制拟合曲线
plt.plot(dia, y_pred, 'b--',label='standRegres')
plt.legend(loc='upper left')
plt.show()

# 模型评估
x_test = [[8], [9], [11], [16], [12]]
y_test = [[11], [8.5], [15], [18], [11]]

print("======== 模型评价 R^2 ========")
print("Training R^2 = ", model.score(x_train, y_train))
print("Test R^2 = ", model.score(x_test, y_test))

输出结果如下:

回归系数: [0.9762931]    截距: 1.965517241379315
预测值: [ 1.96551724 11.72844828 23.44396552]
======== 模型评价 R^2 ========
Training R^2 =  0.9100015964240102
Test R^2 =  0.6620052929422553

由于该回归模型本身基于训练数据集拟合得来,所以可以看到该回归模型对训练数据拟合较好,但对测试数据的拟合程度并没那么好。
输出的绘图如下:
在这里插入图片描述
可以看到两条拟合直线重合,即我们之前求解回归系数得到的回归模型与使用sklearn库求出的回归模型是相同的。

4. 参考学习的书目及论文

本人在学习过程中,主要参考的相关书籍等材料在此也列出并标注相应章节,由于本人来自汽车行业,知识技术的学习及理解运用的目的始终是希望围绕联系具体的自身业务领域,所以也给出阅读学习的一些汽车方面相关机器学习的硕博论文以作参考。

  1. 机器学习算法视频 - 邹博
  2. 《线性回归分析导论》机械工业出版社
  3. 《线性代数 - 吴传生》第3章 矩阵的运算
  4. 《机器学习实战》第8章 预测数值型数据:回归
  5. 《机器学习之路》第2章 机器学习进阶:调试模型
  6. 《机器学习 - 周志华》第3章 线性模型
  7. 《基于机器学习方法的打车需求量预测研究》魏楷聪 2019 硕士论文 - 第4章 基于线性回归和样条曲线的变化趋势提取

=文档信息=
本学习笔记由博主整理编辑,仅供非商用学习交流使用
由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :zhudj
文章出处:https://zhudj.blog.csdn.net/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值