摘要
本篇文章笔记总结来自网络和书本,引用部分都有来源,内容主要介绍线性回归相关基础相关实际应用搞得入门例子,很简单,但是能说明线性回归相关基础的原理相关。
文章同步于: 我的gitbook
LinearRegression算法
学习参考来源
一、最小二乘法的拟合原理
最小二乘法定义如上图所示,但是初看可能会有点懵,上面的表示是啥意思,好接下来总结下我的理解
最小二乘法(又称最小平方法)是一种数学优化技术,除了能拟合直线还能拟合曲线问题。
1.1 代数推导:
如何求解这些参数(a,b)
得到:
1.1.1 代数推导的代码实现
Copy import numpy as np
import matplotlib . pyplot as plt
def calcAB ( x , y ):
n = len (x)
sumX , sumY , sumXY , sumXX = 0 , 0 , 0 , 0
for i in range ( 0 ,n):
sumX += x [ i ]
sumY += y [ i ]
sumXX += x [ i ] * x [ i ]
sumXY += x [ i ] * y [ i ]
a = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX)
b = (sumXX * sumY - sumX * sumXY) / (n * sumXX - sumX * sumX)
return a , b ,
xi = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
yi = [ 10 , 11.5 , 12 , 13 , 14.5 , 15.5 , 16.8 , 17.3 , 18 , 18.7 ]
a , b = calcAB (xi,yi)
print ( "y = %10.5f x + %10.5f " % (a,b))
x = np . linspace ( 0 , 10 )
y = a * x + b
plt . plot (x,y)
plt . scatter (xi,yi)
plt . show ()
1.2 矩阵推导
损失函数为:
最后可化为
令偏导为0
另外:
1.2.1 代码实现:
Copy import numpy as np
import matplotlib . pyplot as plt
x = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
y = [ 10 , 11.5 , 12 , 13 , 14.5 , 15.5 , 16.8 , 17.3 , 18 , 18.7 ]
A = np . vstack ([x,np. ones ( len (x))]). T
a , b = np . linalg . lstsq (A,y) [ 0 ]
print ( "y = %10.5f x + %10.5f " % (a,b))
x = np . array (x)
y = np . array (y)
plt . plot (x,y, 'o' ,label = 'data' ,markersize = 10 )
plt . plot (x,a * x + b, 'r' ,label = 'line' )
plt . show ()
拟合的效果(蓝线)
1.3 小结
二、线性回归
线性回归的目的是找到一个与这些数据最为温和的线性函数,用来预测或者分类,主要解决线性问题。 一般来说,线性回归问题都可以通过最小二乘法来求出方程。线性回归属于监督学习,因此方法和监督学习应该一样,先给一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(拟合是否恰当)。Cost Function 越小的函数,说明训练数据拟合程度越好。
一般向量形式写为:
b是一个学习到的参数,这个现行函数中的常量也称模型的偏置(Bias)
根据输入属性可分为一元,二元......多元线性回归。
多元数据集的定义如下:
即数据集j元的属性矩阵表示为:
2.1 一元线性回归
属性:
这里一元的线性回归,用最小二乘法求解的参数估计,称为线性回归模型的最小二乘法“参数估计”(parameter estimation).
2.2 多元线性回归
书中截取部分如果可以这样理解α i \alpha_{i} α i ,如果是二次项的话y = α 1 x 2 + α 2 x + α 3 y=\alpha_{1} x^{2}+\alpha_{2} x + \alpha_{3} y = α 1 x 2 + α 2 x + α 3 ,知道了吧,就是一个二项式子中的待解参数。
本文为了推导和笔记的简单化,直接以拟合直线 f ( x ; a , b ) : y = a x + b f(x;a,b): y=ax+b f ( x ; a , b ) : y = a x + b
[1]. 假设拟合直线 f ( x ; a , b ) : y = a x + b f(x;a,b): y=ax+b f ( x ; a , b ) : y = a x + b
[2]. 已经由n个样本( x n , y n ) (x_{n}, y_{n}) ( x n , y n )
[3]. 误差e i = y i − ( a x i + b ) e_{i}=y_{i}-(ax_{i}+b) e i = y i − ( a x i + b )
[4]. 当S = ∑ i = 1 n e i 2 S = \sum_{i=1}^{n} e_{i}^{2} S = ∑ i = 1 n e i 2 为最小值时,即得到的a,b参数就是最小二乘法得到的解.
∂ S ∂ b = − 2 ( ∑ i = 1 n y i − n b − a ∑ i = 1 n x i ) \frac{\partial S}{\partial b}=-2(\sum_{i=1}^{n}y_{i}-nb-a\sum_{i=1}^{n}x_{i}) ∂ b ∂ S = − 2 ( ∑ i = 1 n y i − nb − a ∑ i = 1 n x i )
∂ S ∂ a = − 2 ( ∑ i = 1 n x i y i − b ∑ i = 1 n x i − a ∑ i = 1 n x i 2 ) \frac{\partial S}{\partial a}=-2(\sum_{i=1}^{n}x_{i}y_{i}-b\sum_{i=1}{n}x_{i}-a\sum_{i=1}^{n}x_{i}^{2}) ∂ a ∂ S = − 2 ( ∑ i = 1 n x i y i − b ∑ i = 1 n x i − a ∑ i = 1 n x i 2 )
分别令上式中对a,b求偏导数的有点等于0,以此求取对a,b的最值.有:n x ˉ = ∑ i = 1 n x i , n y ˉ = ∑ i = 1 n y i n\bar x=\sum_{i=1}^{n}x_i,n\bar y=\sum_{i=1}^{n}y_i n x ˉ = ∑ i = 1 n x i , n y ˉ = ∑ i = 1 n y i
a = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 a=\frac {\sum_{i=1}^{n}({x_i-\bar x})(y_i-\bar y)} {\sum_{i=1}^{n}({x_i-\bar x})^2} a = ∑ i = 1 n ( x i − x ˉ ) 2 ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ )
b = y ˉ − a x ˉ b=\bar y-a\bar x b = y ˉ − a x ˉ
a = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 a=\frac {n\sum_{}^{}{x_iy_i}-\sum_{}^{}{x_i}\sum_{}^{}{y_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} a = n ∑ x i 2 − ( ∑ x i ) 2 n ∑ x i y i − ∑ x i ∑ y i
b = ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i n ∑ x i 2 − ( ∑ x i ) 2 b=\frac {\sum_{}^{}{x_i}^2\sum_{}^{}{y_i}-\sum_{}^{}{x_i}\sum_{}^{}{x_iy_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} b = n ∑ x i 2 − ( ∑ x i ) 2 ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i
对于y = a x + b y=ax+b y = a x + b ,转为向量的形式为
W = [ w 0 w 1 ] , X = [ 1 x 1 ] W=\begin{bmatrix}
w_0\\
w_1
\end{bmatrix},X=\begin{bmatrix}
1\\
x_1
\end{bmatrix} W = [ w 0 w 1 ] , X = [ 1 x 1 ] 于是: y = w 1 x 1 + w 0 = W T X y=w_1x_1+w_0=W^TX y = w 1 x 1 + w 0 = W T X
L = 1 n ∑ i = 1 n ( y n − ( W T X ) 2 ) = 1 n ( y − X W ) T ( y − X W ) L=\frac{1}{n}\sum_{i=1}^{n}(y_n-(W^TX)^2)=\frac{1}{n}(y-XW)^T(y-XW) L = n 1 i = 1 ∑ n ( y n − ( W T X ) 2 ) = n 1 ( y − X W ) T ( y − X W ) 1 n X T W T X W − 2 n X T W T y + 1 n y T y \frac{1}{n}X^TW^TXW-\frac{2}{n}X^TW^Ty+\frac{1}{n}y^Ty n 1 X T W T X W − n 2 X T W T y + n 1 y T y
∂ L ∂ W = 2 n X T X W − 2 n X T y = 0 \frac{\partial L}{\partial W}=\frac{2}{n}X^TXW-\frac{2}{n}X^Ty=0 ∂ W ∂ L = n 2 X T X W − n 2 X T y = 0
( X T X ) − 1 X T X = E , E W = W (X^TX)^{-1}X^TX=E,EW=W ( X T X ) − 1 X T X = E , E W = W ,则
( X T X ) − 1 X T X W = ( X T X ) − 1 X T y , W = ( X T X ) − 1 X T y (X^TX)^{-1}X^TXW=(X^TX)^{-1}X^Ty,W=(X^TX)^{-1}X^Ty ( X T X ) − 1 X T X W = ( X T X ) − 1 X T y , W = ( X T X ) − 1 X T y
f ( x ) = ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + . . . + ω d x d + b f(x)=\omega_{1}x_{1}+\omega_{2}x_{2}+\omega_{3}x_{3}+...+\omega_{d}x_{d}+b f ( x ) = ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + ... + ω d x d + b
f ( x ) = ω T x + b f(x)=\omega^{T}x+b f ( x ) = ω T x + b
其中的ω = ( ω 1 ; ω 2 ; ω 2 ; . . . ω d ) \omega=(\omega_{1};\omega_{2};\omega_{2};...\omega_{d}) ω = ( ω 1 ; ω 2 ; ω 2 ; ... ω d )
x 1 , x 2 , . . . x k x_{1},x_{2},...x_{k} x 1 , x 2 , ... x k 是一组独立的预测变量
ω 1 , ω 2 , . . . ω k \omega_{1},\omega_{2},...\omega_{k} ω 1 , ω 2 , ... ω k 为模型从训练数据中学习得到的参数,或称赋予每个变量的权值。
D = [ x i , j , y i ] D=\left [ x_{i,j}, y_{i}\right ] D = [ x i , j , y i ] ,其中i,表示数据集第i位序列的值,而j则表示在第i位x的属性是j种属性,即数据集中,x(i,j),i维行,j维纵坐标的矩阵。
[ x 1 , 1 x 1 , 2 . . . x 1 , j − 1 x 1 , j x 2 , 1 x 2 , 2 . . . x 2 , j − 1 x 2 , j . . . . . . . . . . . . . . . x i , 1 x i , 2 . . . x i , j − 1 x i , j ] \begin{bmatrix}
x_{1,1} & x_{1,2} & ... & x_{1,j-1} & x_{1,j}\\
x_{2,1} & x_{2,2} & ... & x_{2,j-1} & x_{2,j}\\
... & ... & ... & ... & ...\\
x_{i,1} & x_{i,2} & ... & x_{i,j-1} & x_{i,j}
\end{bmatrix} x 1 , 1 x 2 , 1 ... x i , 1 x 1 , 2 x 2 , 2 ... x i , 2 ... ... ... ... x 1 , j − 1 x 2 , j − 1 ... x i , j − 1 x 1 , j x 2 , j ... x i , j 比如3元的表示一个西瓜好坏,【hue, root, echo】,加入预测函数的参数已经求得ω = [ 0.2 , 0.5 , 0.3 ] , b = 1 \omega=\left [ 0.2, 0.5, 0.3 \right ],b=1 ω = [ 0.2 , 0.5 , 0.3 ] , b = 1 ,则好瓜(good)函数f g o o d ( x ) = 0.2 ⋅ x h u e + 0.5 ⋅ x r o o t + 0.3 ⋅ x e c h o + 1 f_{good}(x)=0.2 \cdot x_{hue}+0.5 \cdot x_{root}+0.3 \cdot x_{echo}+1 f g oo d ( x ) = 0.2 ⋅ x h u e + 0.5 ⋅ x roo t + 0.3 ⋅ x ec h o + 1
这里考虑一元的情况则数据集为: D = [ x i , y i ] i = 1 m D=\left [ x_{i}, y_{i}\right ]_{i=1}^{m} D = [ x i , y i ] i = 1 m ,即上面矩阵表示的j元数据集中j=1,现在我们来尝试一元的线性回归。
[1] 假设我们预测函数形式:f ( x i ) = ω x i + b i f(x_{i})=\omega x_{i}+b_{i} f ( x i ) = ω x i + b i ,使得f ( x i ) ≈ y i f(x_{i})\approx y_{i} f ( x i ) ≈ y i .
接下来我们引入上面的最小二乘法求参数ω , b \omega , b ω , b .
e ω ∗ , b ∗ = a r g ( ω , b ) m i n ∑ i = 1 m ( f ( x i ) − y i ) 2 e_{\omega^*,b^*}=arg_{(\omega,b)}min \sum_{i=1}^{m}(f(x_{i})-y_{i})^2 e ω ∗ , b ∗ = a r g ( ω , b ) min ∑ i = 1 m ( f ( x i ) − y i ) 2
[3] 对上式e的函数分别对ω , b \omega,b ω , b 求偏导,对偏导结果赋值0,求ω , b \omega,b ω , b 值。
∂ E ω , b ∂ ω = 2 ( ω ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) \frac{\partial E_{\omega,b}}{\partial \omega}=2(\omega\sum_{i=1}^{m}x_{i}^{2}-\sum_{i=1}^{m}(y_{i}-b)x_{i}) ∂ ω ∂ E ω , b = 2 ( ω ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i )
∂ E ω , b ∂ b = 2 ( m b − ∑ i = 1 m ( y i − ω x i ) ) \frac{\partial E_{\omega,b}}{\partial b}=2(mb-\sum_{i=1}^{m}(y_{i} - \omega x_{i})) ∂ b ∂ E ω , b = 2 ( mb − ∑ i = 1 m ( y i − ω x i ))
[5] 上一步骤中的偏导数都设为零,以此来求得ω , b \omega , b ω , b .
ω = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 \omega = \frac{\sum_{i=1}^{m} y_{i}(x_{i}-\bar{x})}{\sum_{i=1}^{m}x_{i}^{2}-\frac{1}{m}(\sum_{i=1}^{m}x_{i})^2} ω = ∑ i = 1 m x i 2 − m 1 ( ∑ i = 1 m x i ) 2 ∑ i = 1 m y i ( x i − x ˉ )
b = 1 m ∑ i = 1 m ( y i − ω x i ) , x ˉ = 1 m ∑ i = 1 m x i b=\frac{1}{m}\sum_{i=1}^{m}(y_{i}-\omega x_{i}),\bar{x}=\frac{1}{m}\sum_{i=1}^{m}x_{i} b = m 1 ∑ i = 1 m ( y i − ω x i ) , x ˉ = m 1 ∑ i = 1 m x i ,x ˉ \bar{x} x ˉ 为序列x的均值。
类似一元,但是求解 估计的参数矩阵ω , b \omega, b ω , b ,就需要全部看成矩阵的求解方法求出。见最小二乘法矩阵推导那一节,不再具体推推导了,在2.1节基础上明白线性回归,多元回归思想即可明白。