线性回归

简单线性回归介绍

首先,线性回归当然是为了解决回归问题了。这种线性回归思想简单,容易实现,是许多强大的非线性模型的基础。相对kNN,他的结果具有很好的可解释性。线性回归,蕴含机器学习中的很多重要思想。
在生活中,有很多关系可以匹配我们的线性模型。例如房屋面积和价格的走势:
在这里插入图片描述
我们用一条线来拟合:
在这里插入图片描述
所以,线性回归的定义就是,寻找一条直线,最大程度的“拟合”样本特征和样本输出标记之间的关系。
样本特征只有一个,称为简单线性回归。

损失函数

假设我们找到最佳拟合的直线方程:
y = a x + b y=ax+b y=ax+b
对于每一个样本点 x ( i ) x^{(i)} x(i),根据我们的直线方程,预测值为:
y ^ ( i ) = a x ( i ) + b \hat{y}^{(i)}=ax^{(i)}+b y^(i)=ax(i)+b
真值为 y ( i ) y^{(i)} y(i)
我们希望 y ^ ( i ) \hat{y}^{(i)} y^(i) y ( i ) y^{(i)} y(i)之间的差距尽量小,结果越准确,表达他们的差距:
y ( i ) − y ^ ( i ) y^{(i)}-\hat{y}^{(i)} y(i)y^(i)
也就是
∣ y ( i ) − y ^ ( i ) ∣ |y^{(i)}-\hat{y}^{(i)}| y(i)y^(i)
也可以通过以下表达:
( y ( i ) − y ^ ( i ) ) 2 (y^{(i)}-\hat{y}^{(i)})^2 (y(i)y^(i))2
考虑上所有的样本
∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})^2 i=1m(y(i)y^(i))2
我们的目标是使得 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})^2 i=1m(y(i)y^(i))2尽可能小,我们有条件 y ^ ( i ) = a x ( i ) + b \hat{y}^{(i)}=ax^{(i)}+b y^(i)=ax(i)+b,将 y ^ ( i ) \hat{y}^{(i)} y^(i)代入公式,就是使得:
∑ i = 1 m ( y ( i ) − a x ( i ) − b ) 2 \sum_{i=1}^{m}(y^{(i)}-ax^{(i)}-b)^2 i=1m(y(i)ax(i)b)2尽可能小。
我们的目标就是找到a和b,使得 ∑ i = 1 m ( y ( i ) − a x ( i ) − b ) 2 \sum_{i=1}^{m}(y^{(i)}-ax^{(i)}-b)^2 i=1m(y(i)ax(i)b)2尽可能小。在机器学习里面我们把 ∑ i = 1 m ( y ( i ) − a x ( i ) − b ) 2 \sum_{i=1}^{m}(y^{(i)}-ax^{(i)}-b)^2 i=1m(y(i)ax(i)b)2称为损失函数(loss function),也叫效用函数(utility function)。通过分析问题,确定问题的损失函数或者效用函数;通过最优化损失函数或者效用函数,获得机器学习模型。
在很多机器学习的模型中,都是这种套路,例如线性回归、多项式回归、逻辑回归、SVM、神经网络等。

最小二乘法

找到a和b,使得 ∑ i = 1 m ( y ( i ) − a x ( i ) − b ) 2 \sum_{i=1}^{m}(y^{(i)}-ax^{(i)}-b)^2 i=1m(y(i)ax(i)b)2尽可能小,也就是最小化误差的平方,是一个典型的最小二乘法问题。(最小二乘法,二乘又叫平方,使“离差平方和为最小”的方法叫最小二乘法)
通过求a和b的偏导,使得偏导为零,我们能够先求出b,再求出a,我们直接得出结论:
b = y ‾ − a x ‾ b=\overline{y}-a\overline{x} b=yax
a = ∑ i = 1 m ( x ( i ) − x ‾ ) ( y ( i ) − y ‾ ) ∑ i = 1 m ( x ( i ) − x ‾ ) 2 a=\frac{\sum_{i=1}^{m}(x^{(i)}-\overline{x})(y^{(i)}-\overline{y})}{\sum_{i=1}^{m}(x^{(i)}-\overline{x})^2} a=i=1m(x(i)x)2i=1m(x(i)x)(y(i)y)
有兴趣的可以查阅资料或者自己推导。
现在先通过这种形式,计算出结果,稍后我们会通过向量的形式,优化我们的计算。

简单线性回归的实现

首先把架子搭建起来
在这里插入图片描述
根据公式,计算出x平均值和y平均值,然后再计算出a的分子分母:
在这里插入图片描述
计算出a和b然后计算y预测值:
在这里插入图片描述
将y的预测值和x与y画在同一个图上,可以很直观的看到我们的预测的直线:
在这里插入图片描述
输入一个x并预测,然后查看a(斜率)和b(截距)的值:
在这里插入图片描述

向量化运算

介绍

a的表达式为:
a = ∑ i = 1 m ( x ( i ) − x ‾ ) ( y ( i ) − y ‾ ) ∑ i = 1 m ( x ( i ) − x ‾ ) 2 a=\frac{\sum_{i=1}^{m}(x^{(i)}-\overline{x})(y^{(i)}-\overline{y})}{\sum_{i=1}^{m}(x^{(i)}-\overline{x})^2} a=i=1m(x(i)x)2i=1m(x(i)x)(y(i)y)
我们通过上面的代码知道,通过for循环的方式进行,这样效率比较低,比较好的方式是通过向量的方式。
先看百度百科关于向量点乘的解释:
在这里插入图片描述
向量 w w w ( w ( 1 ) , w ( 2 ) , . . . , w ( m ) ) (w^{(1)},w^{(2)},...,w^{(m)}) (w(1),w(2),...,w(m))
向量 v v v ( v ( 1 ) , v ( 2 ) , . . . , v ( m ) ) (v^{(1)},v^{(2)},...,v^{(m)}) (v(1),v(2),...,v(m))
根据向量点乘代数意义:
w ⋅ v = ∑ i = 1 m w ( i ) ⋅ v ( i ) w\cdot v={\sum_{i=1}^{m}w^{(i)}\cdot {v}^{(i)}} wv=i=1mw(i)v(i)
假设向量 x ( i ) − x ‾ x^{(i)}-\overline{x} x(i)x w ( i ) w^{(i)} w(i)
假设向量 y ( i ) − y ‾ y^{(i)}-\overline{y} y(i)y v ( i ) v^{(i)} v(i)
a就可以为 a = ∑ i = 1 m ( x ( i ) − x ‾ ) ( y ( i ) − y ‾ ) ∑ i = 1 m ( x ( i ) − x ‾ ) 2 = ∑ i = 1 m w ( i ) ⋅ v ( i ) ∑ i = 1 m v ( i ) ⋅ v ( i ) a=\frac{\sum_{i=1}^{m}(x^{(i)}-\overline{x})(y^{(i)}-\overline{y})}{\sum_{i=1}^{m}(x^{(i)}-\overline{x})^2}=\frac{\sum_{i=1}^{m}w^{(i)} \cdot v^{(i)}}{\sum_{i=1}^{m}v^{(i)} \cdot v^{(i)} } a=i=1m(x(i)x)2i=1m(x(i)x)(y(i)y)=i=1mv(i)v(i)i=1mw(i)v(i)
也就是 a = w ⋅ v v ⋅ v a=\frac{w\cdot v}{v\cdot v} a=vvwv
向量的运算,numpy经过优化的,计算速度可以大幅提升。
只需要把原来a的计算方式修改为:
(x - x_mean).dot(y - y_mean) / (x - x_mean).dot(x - x_mean)
x和y分别是向量。

计算

先计算基本的平均值:
在这里插入图片描述
然后向量化运算得出回归直线,又简洁速度又快:
在这里插入图片描述

性能对比

我们写两个函数,第一个是普通方式,第二个是向量化过的方式,模拟一百万数据的时候,性能对比:
在这里插入图片描述
速度大概相差50倍数,说明了向量化计算的优势。

线性回归的评测标准

为了找到a和b使得 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})^2 i=1m(y(i)y^(i))2也就是 ∑ i = 1 m ( y ( i ) − a x ( i ) − b ) 2 \sum_{i=1}^{m}(y^{(i)}-ax^{(i)}-b)^2 i=1m(y(i)ax(i)b)2尽可能小,我们使用了最小二乘法和向量化的方法。 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})^2 i=1m(y(i)y^(i))2的大小,是我们衡量的标准。
在数学上,还有另外一个衡量标准,均方误差MSE(Mean Squared Error),计算方式:
1 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})^2 m1i=1m(y(i)y^(i))2
这个均方误差是之前我们为了保证每项为正,且可导,我们对式子做了一个平方,会导致量纲的问题,例如房价为万元,平方后会变成万元的平方,所以我们要改进。
进一步,有一个均方根误差RMSE(Root Mean Squared Error):
1 m ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 = M S E \sqrt{\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\hat{y}^{(i)})^2}=\sqrt{ MSE} m1i=1m(y(i)y^(i))2 =MSE
还有一个,平均绝对误差MAE(Mean Absolute Error):
1 m ∑ i = 1 m ∣ y ( i ) − y ^ ( i ) ∣ \frac{1}{m}\sum_{i=1}^{m}| y^{(i)}-\hat{y}^{(i)}| m1i=1my(i)y^(i)由于绝对值不是处处可导的,这个误差方式不便用来求极值。
来看看RMSE和MAE的对比,我们通过sklearn导入了自带的衡量的库,并且计算出MSE和MAE:
在这里插入图片描述
对比自己实现的MSE和MAE:
在这里插入图片描述结果一致。
在机器学习里面,其实还有一个很好的评判标准R Squared,计算方式如下:
R 2 = 1 − s s r e s i d u a l s s t o t a l R^2=1-\frac{ss_{residual}}{ss_{total}} R2=1sstotalssresidual也等于 1 − ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 ∑ i = 1 m ( y ‾ ( i ) − y ( i ) ) 2 1-\frac{\sum_{i=1}^{m}(\hat y^{(i)}-{y}^{(i)})^2}{\sum_{i=1}^{m}(\overline y^{(i)}-{y}^{(i)})^2} 1i=1m(y(i)y(i))2i=1m(y^(i)y(i))2
s s r e s i d u a l ss_{residual} ssresidual表示 residual sum of squares,计算方式为:
s s r e s i d u a l = ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 ss_{residual}=\sum_{i=1}^{m}(\hat y^{(i)}-{y}^{(i)})^2 ssresidual=i=1m(y^(i)y(i))2,它表示使用我们模型预测产生的错误
s s t o t a l ss_{total} sstotal表示total sum of squares,计算方式为:
s s r e s i d u a l = ∑ i = 1 m ( y ‾ ( i ) − y ( i ) ) 2 ss_{residual}=\sum_{i=1}^{m}(\overline y^{(i)}-{y}^{(i)})^2 ssresidual=i=1m(y(i)y(i))2,它表示使用平均值作为预测值也就是 y = y ‾ y=\overline y y=y(Baseline Model基准模型)预测产生的错误。
对于这个R,有如下说明:

  • R 2 R^2 R2<=1
  • R 2 R^2 R2越大越好,当我们的预测模型不产生任何错误, R 2 R^2 R2等于1。
  • 当我们的模型等于基准模型, R 2 R^2 R2等于0
  • 如果 R 2 R^2 R2<=0,说明我们学习到的模型还不如基准模型。此时,很有可能我们的数据不存在任何线性关系。
    其实 R 2 R^2 R2进一步推导,就是:
    R 2 = 1 − s s r e s i d u a l s s t o t a l = 1 − ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 ∑ i = 1 m ( y ‾ ( i ) − y ( i ) ) 2 = 1 − ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 / m ∑ i = 1 m ( y ‾ ( i ) − y ( i ) ) 2 / m = 1 − M S E ( y ^ , y ) V a r ( y ) R^2=1-\frac{ss_{residual}}{ss_{total}}=1-\frac{\sum_{i=1}^{m}(\hat y^{(i)}-{y}^{(i)})^2}{\sum_{i=1}^{m}(\overline y^{(i)}-{y}^{(i)})^2}=1-\frac{\sum_{i=1}^{m}(\hat y^{(i)}-{y}^{(i)})^2/m}{\sum_{i=1}^{m}(\overline y^{(i)}-{y}^{(i)})^2/m}=1-\frac {MSE(\hat y,y)}{Var(y)} R2=1sstotalssresidual=1i=1m(y(i)y(i))2i=1m(y^(i)y(i))2=1i=1m(y(i)y(i))2/mi=1m(y^(i)y(i))2/m=1Var(y)MSE(y^,y)分母上面是MSE,下面是方差。
    通过sklearn引入r2_score并且与我们自己实现的r2_score对比,一致:
    在这里插入图片描述

多元线性回归

多元线性回归,其实就是把二维的变成多维,公式变成了:
y = θ 0 + θ 1 x 1 + . . . + θ n x n y=\theta _0+\theta _1x_1+...+\theta _nx_n y=θ0+θ1x1+...+θnxn
预测值的计算:
y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + . . . + + θ n X n ( i ) \hat y^{(i)}=\theta_0+\theta_1X^{(i)}_1+\theta_2X^{(i)}_2+...++\theta_nX^{(i)}_n y^(i)=θ0+θ1X1(i)+θ2X2(i)+...++θnXn(i)
我们的目标是使得
∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}(y^{(i)}-\hat y^{(i)})^2 i=1m(y(i)y^(i))2尽可能小,而
y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + . . . + + θ n X n ( i ) \hat y^{(i)}=\theta_0+\theta_1X^{(i)}_1+\theta_2X^{(i)}_2+...++\theta_nX^{(i)}_n y^(i)=θ0+θ1X1(i)+θ2X2(i)+...++θnXn(i)
也就是,我们要找到 θ 0 , θ 1 , θ 2 , . . . , θ n \theta_0,\theta_1,\theta_2,...,\theta_n θ0,θ1,θ2,...,θn使得 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}(y^{(i)}-\hat y^{(i)})^2 i=1m(y(i)y^(i))2尽可能小
θ = ( θ 0 , θ 1 , θ 2 , . . . θ n ) T \theta=(\theta_0,\theta_1,\theta_2,...\theta_n)^T θ=(θ0,θ1,θ2,...θn)T
X 0 ( i ) = 1 X^{(i)}_0=1 X0(i)=1
X ( i ) = ( X 0 ( i ) , X 1 ( i ) , X 2 ( i ) , . . . , X n ( i ) ) X^{(i)}=(X^{(i)}_0,X^{(i)}_1,X^{(i)}_2,...,X^{(i)}_n) X(i)=(X0(i),X1(i),X2(i),...,Xn(i))
所以根据向量点乘代数意义我们很容易知道 y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + . . . + θ n X n ( i ) = θ 0 X 0 ( i ) + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + . . . + θ n X n ( i ) = X ( i ) ⋅ θ \hat y^{(i)}=\theta_0+\theta_1X^{(i)}_1+\theta_2X^{(i)}_2+...+\theta_nX^{(i)}_n=\theta_0X^{(i)}_0+\theta_1X^{(i)}_1+\theta_2X^{(i)}_2+...+\theta_nX^{(i)}_n=X^{(i)} \cdot \theta y^(i)=θ0+θ1X1(i)+θ2X2(i)+...+θnXn(i)=θ0X0(i)+θ1X1(i)+θ2X2(i)+...+θnXn(i)=X(i)θ
我们令 X b X_b Xb
在这里插入图片描述
θ = ( θ 0 , θ 1 , θ 2 , . . . θ n ) T \theta=(\theta_0,\theta_1,\theta_2,...\theta_n)^T θ=(θ0,θ1,θ2,...θn)T,所以
y ^ = X b ⋅ θ \hat y=X_b \cdot \theta y^=Xbθ
使 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^{m}(y^{(i)}-\hat y^{(i)})^2 i=1m(y(i)y^(i))2尽可能小,就是使:
( y − X b ⋅ θ ) T ( y − X b ⋅ θ ) (y-X_b \cdot \theta)^T(y-X_b \cdot \theta) (yXbθ)T(yXbθ)尽可能小,
θ \theta θ,数学上多元线性回归的正规方程解(Normal Equation)
θ = ( X b T X b ) − 1 X b T y \theta =(X^T_b X_b)^{-1}X^T_by θ=(XbTXb)1XbTy
这个虽然是向量方法,还是存在时间复杂度高的问题,时间复杂度为 O ( n 3 ) O(n^3) O(n3),可以优化到 O ( n 2.4 ) O(n ^ {2.4}) O(n2.4)
在我们得到的 θ \theta θ向量里, θ 0 \theta_0 θ0是截距(intercept),其他的
θ 1 , θ 2 , θ 3 , . . , θ n \theta_1,\theta_2,\theta_3,..,\theta_n θ1,θ2,θ3,..,θn都称为系数(coefficients)

总结

  • 评价线性回归模型,使用R Squared
  • 线性回归算法是典型的参数学习,对比kNN是非参数学习
  • 线性回归算法只能解决回归问题。虽然很多分类方法中,线性回归是基础(如逻辑回归)。对比kNN,kNN既能解决分类问题,也可以解决回归问题。
  • 线性回归算法对数据有假设,假设数据是线性的。对比kNN对数据没有假设。
  • 对结果具有强解释性,kNN得到的结果没有可解释性,
  • 多元线性回归方程正规解: θ = ( X b T X b ) − 1 X b T y \theta =(X^T_b X_b)^{-1}X^T_by θ=(XbTXb)1XbTy
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值