机器学习算法1_线性回归

1 线性回归

1.1 概念

  • 利用称为线性回归方程的最小二乘函数对 一个或者多个自变量因变量 之间关系进行建模的一种回归分析。
  • 主要应用于对连续值的预测,例如股票的价格、房价的趋势等

1.2 推导方法

1.2.1 模型 - 线性回归方程

(1) y ( x , w ) = w 0 + w 1 x y(x, w) = w_0 + w_1x \tag{1}

1.2.2 目标函数 - 平方损失函数

一个数据点为 ( x i x_{i} , y i y_{i} ) 的误差:
(2) y i ( w 0 + w 1 x i ) y_{i}-(w_0 + w_1x_{i}) \tag2
误差损失总和 「残差」:
(3) i = 1 n ( y i ( w 0 + w 1 x i ) ) \sum\limits_{i = 1}^n {{{(y_{i}-(w_0 + w_1x_{i}))}}} \tag3

在线性回归中,使用残差的平方和来表示所有样本点的误差「平方损失函数」:
(4) i = 1 n ( y i ( w 0 + w 1 x i ) ) 2 \sum\limits_{i = 1}^n {{{(y_{i}-(w_0 + w_1x_{i}))}}^2} \tag4

1.2.3 求解方法

1.2.3.1 最小二乘法 - 代数求解(一元)

平方损失函数为:
(5) f = i = 1 n ( y i ( w 0 + w 1 x i ) ) 2 f = \sum\limits_{i = 1}^n {{{(y_{i}-(w_0 + w_1x_{i}))}}^2} \tag5
我们的目标是求取平方损失函数 m i n ( f ) min(f) 最小时,对应的 w w 。首先求 f f 1 阶偏导数:
(6) f w 0 = 2 ( i = 1 n y i n w 0 w 1 i = 1 n x i ) f w 1 = 2 ( i = 1 n x i y i w 0 i = 1 n x i w 1 i = 1 n x i 2 ) \frac{\partial f}{\partial w_{0}}=-2(\sum_{i=1}^{n}{y_i}-nw_{0}-w_{1}\sum_{i=1}^{n}{x_i})\\ \frac{\partial f}{\partial w_{1}}=-2(\sum_{i=1}^{n}{x_iy_i}-w_{0}\sum_{i=1}^{n}{x_i}-w_{1}\sum_{i=1}^{n}{x_i}^2) \tag6
然后,我们令 f w 0 = 0 \frac{\partial f}{\partial w_{0}}=0 以及 f w 1 = 0 \frac{\partial f}{\partial w_{1}}=0 ,解得:
(7) w 1 = n x i y i x i y i n x i 2 ( x i ) 2 w 0 = x i 2 y i x i x i y i n x i 2 ( x i ) 2 w_{1}=\frac {n\sum_{}^{}{x_iy_i}-\sum_{}^{}{x_i}\sum_{}^{}{y_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2}\\ w_{0}=\frac {\sum_{}^{}{x_i}^2\sum_{}^{}{y_i}-\sum_{}^{}{x_i}\sum_{}^{}{x_iy_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2}\tag7

求出了平方损失函数最小时对应的 w w 参数值,这也就是最佳拟合直线。

1.2.3.2 最小二乘法 - 矩阵求解(一元 或者 多元)

线性回归方程:
(1) y ( x , w ) = w 0 + w 1 x y(x, w) = w_0 + w_1x \tag{1}
表达成矩阵形式为:

(8) [ y 1 y 2 . . . y 9 y 10 ] = [ 1 , x 1 1 , x 2 . . . 1 , x 9 1 , x 10 ] [ w 0 w 1 ] \begin{bmatrix}y_{1} \\ y_{2} \\ ... \\ y_{9} \\ y_{10} \end{bmatrix} = \begin{bmatrix}1, x_{1} \\ 1, x_{2} \\ ... \\ 1, x_{9} \\ 1, x_{10} \end{bmatrix} * \begin{bmatrix}w_{0} \\ w_{1} \end{bmatrix} \tag8
即:
(8) y ( x , w ) = X W y(x, w) = XW \tag{8}

(8)式中,而 X X 则是 [ 1 , x 1 1 , x 2 . . . 1 , x 9 1 , x 10 ] \begin{bmatrix}1, x_{1} \\ 1, x_{2} \\ ... \\ 1, x_{9} \\ 1, x_{10} \end{bmatrix} W W [ w 0 w 1 ] \begin{bmatrix}w_{0} \\ w_{1} \end{bmatrix} 矩阵。

平方损失函数为:

(9) f = i = 1 n ( y i ( w 0 + w 1 x i ) ) 2 = ( y X W ) T ( y X W ) f = \sum\limits_{i = 1}^n {{{(y_{i}-(w_0 + w_1x_{i}))}}}^2 =(y-XW)^T(y-XW)\tag{9}

此时,对矩阵求偏导数得到:

(10) f W = 2 X T X W 2 X T y = 0 \frac{\partial f}{\partial W}=2*X^TXW-2*X^Ty=0 \tag{10}
常用向量矩阵求导公式

当矩阵 X T X X^TX 满秩时 ( X T X ) 1 X T X = E (X^TX)^{-1}X^TX=E ,且 E W = W EW=W 。所以, ( X T X ) 1 X T X W = ( X T X ) 1 X T y (X^TX)^{-1}X^TXW=(X^TX)^{-1}X^Ty 。最终得到:

(11) W = ( X T X ) 1 X T y W=(X^TX)^{-1}X^Ty \tag{11}

在使用矩阵求解的过程中,还是使用了一元来举例子求解,但如果(8)式中, X X 代入 [ 1 , x 11 , x 12 , x 13 , . . . , x 1 n 1 , x 21 , x 22 , x 23 , . . . , x 2 n 1 , x 31 , x 32 , x 33 , . . . , x 3 n . . . 1 , x m 1 , x m 2 , x m 3 , . . . , x m n ] \begin{bmatrix}1, x_{11}, x_{12}, x_{13},..., x_{1n} \\ 1, x_{21}, x_{22}, x_{23},..., x_{2n} \\ 1, x_{31}, x_{32}, x_{33},..., x_{3n} \\ ... \\ 1, x_{m1}, x_{m2}, x_{m3},..., x_{mn} \end{bmatrix} W W 代入 [ w 0 w 1 w 2 w 3 . . . w m ] \begin{bmatrix}w_{0} \\ w_{1} \\ w_{2} \\ w_{3} \\ ... \\ w_{m} \end{bmatrix} 矩阵,其实这个就是多元的线性回归的求解过程。

1.2.4 性能度量

平均绝对误差(MAE) 就是绝对误差的平均值:
(12) MAE ( y , y ^ ) = 1 n i = 1 n y i y ^ i \textrm{MAE}(y, \hat{y} ) = \frac{1}{n}\sum_{i=1}^{n}{|y_{i}-\hat y_{i}|} \tag{12}

其中, y i y_{i} 表示真实值, y ^ i \hat y_{i} 表示预测值, n n 则表示值的个数。MAE 的值越小,说明预测模型拥有更好的精确度。

均方误差(MSE) 它表示误差的平方的期望值:

(13) MSE ( y , y ^ ) = 1 n i = 1 n ( y i y ^ ) 2 \textrm{MSE}(y, \hat{y} ) = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y})^{2} \tag{13}

其中, y i y_{i} 表示真实值, y ^ i \hat y_{i} 表示预测值, n n 则表示值的个数。MSE 的值越小,说明预测模型拥有更好的精确度。

2 sklearn 中使用

from sklearn.linear_model import LinearRegression

model = LinearRegression() # 建立模型
model.fit(train_x, train_y) # 训练模型
model.coef_, model.intercept_ # 输出训练后的模型参数和截距项
# 线性回归误差计算
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score#R square

# results 模型预测后的结果,即 model.fit(train_x, train_y)
print("线性回归平均绝对误差: ", mean_absolute_error(test_y, results.flatten())) 
print("线性回归均方误差: ", mean_squared_error(test_y, results.flatten()))
print("线性回归 R square: ", r2_score(test_y, results.flatten()))

3 优缺点

优点: 实现简单,计算简单
缺点: 不能拟合非线性数据

4 疑问

4.1 线性回归用于特征的筛选

LinearRegression训练后,使用 model.coef_得到模型的参数,参数越大表示权重越大

4.2 线性回归,Ridge回归(L2范式),Lasso回归(L1范式)之间的联系

前面矩阵求解的时候,最小二乘法的矩阵解法是有局限性的,就是 公式 ( 11 ) (11) 成立的条件就是 X T X \left | X^{T}X \right | 不能为 0。而当变量之间的相关性较强(多重共线性),或者 m m 大于 n n 时, ( 11 ) (11) 式中的 X X 不是满秩( r a n k ( A ) d i m ( x ) rank(A)\neq dim(x) )矩阵。从而使得 X T X \left | X^{T}X \right | 的结果趋近于 0,造成拟合参数的数值不稳定性增加。

所以以下两种场景建议使用 L1 或者 L2 范式

  • 数据集的列(特征)数量 > 数据量(行数量),即 XX 不是列满秩。
  • 数据集列(特征)数据之间存在较强的线性相关性,即模型容易出现过拟合。

4.3 最小二乘法算法复杂度怎么分析?

4.4 由2引出的疑问 sklearn 中 Ridge / Lasso 和 LinearRegression 结果是一样的吗? 有待验证

from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso

4.5 最大似然估计,梯度下降,最小二乘法之间有什么联系

  • 为什么会出现这些求解过程?SVM支持向量机
  • 在 sklearn 的 LinearRegression 有使用到么?LinearRegression 使用的是最小二乘法,sklearn 里面也有梯度下降的算法

批量梯度下降(BGD)
优点:得到全局最优解;易于并行实现
缺点:当样本数目很多时,训练过程会很慢
随机梯度下降(SGD)
优点:训练速度快
缺点:准确度下降,并不是全局最优;不易于并行实现
小批量梯度下降(MBGD)

参考资料

机器学习算法1_线性回归 Datawhale
线性回归 - 爖
线性回归算法 - 黑桃

猜你喜欢

转载自blog.csdn.net/q370835062/article/details/82943365