最近是一边刷题一边学机器学习的算法,另一边还得补上前端react的学习和后端Django框架的学习,学的实在有点多。今天这里开一个笔记的坑,复习一下最近学的机器学习的算法。
线性回归
- 最小二乘法(矩阵表达、几何意义)
- 概率角度意义
- 正则化{“L1”:“Lasso”,“L2”:“ridge”}
1.最小二乘法
首先将最小二乘法的数学证明复习一下。
设样本集为D = {(x1, y1) (x2, y2) … (xn, yn)}
提取出x的集合为X = (x1 x2 … xn)T(转置 )
=(x11 x12 … x1p
x21 x22 … x2p
… …
xN1 xN2 … xNp)
Y = (y1 y2 … yN)T
设f(w) = wTX
则损失函数L(w) = ∑||wTxi-yi||²(i=1到N)
这里的范式可以拆开为括号,等于∑(wTxi-yi)²
将X,Y代入,去掉求和符号。
L(w) = (wTx1-y1 wTx2-y2 … wTxN-yN)·(wTx1-y1 wTx2-y2 … wTxN-yN)T
将wT提出来,可以得到损失函数等于wTXTXw-wTXTY-YTXw+YTY
对w求偏导,可得2XTXw-2XTY=0
w=(XTX)^(-1)·XTY
在几何意义上,x1到xN构成了一个p维空间,而y一般都是在这个p维空间之外。如果y在p维空间内就不用做线性回归了,但是数据具有随机性嘛,y基本不可能在这个空间里。若求y的线性回归,则是求y到<x1,xN>的p维空间的投影。
设f(w)=wTx=xTβ
可知Y到X空间投影的距离为Y-Xβ,且垂直于X空间,可得:
(Y-Xβ)·XT=0(全为向量表示)
则求得β=(XTX)^(-1)·XTY
在几何上可以看做是把误差分散在p维上。
接下来先贴一下代码。
import numpy as np
import matplotlib.pyplot as plt
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.randn(100,1)
X_b = np.c_[np.ones((100,1)),X]
theta = np.linalg.inv(X_b.T.dot(X_b)).T.dot(X_b.)T.dot(y)
X_new = np.array([[0],[2]])
X_new_b = np.c_[np.ones((2,1)),X_new]
y_predict = X_new_b.dot(theta)
plt,plot(X_new,y_predict,'r-')
plt.plot(X,y,'b.')
plt,axis([0,2,0,15])
plt,show()
print(X_new)
print(y_predict)
运行一下得到图像和结果。
从数据可以看出,虽然存在着一定的误差,但是线性回归确实实现了。
接下来我们用sklearn来实现一下(这个就简单许多了)。
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
X = 2 * np.random.rand(100,1)
y = 3 + 4 * X + np.random.randn(100,1)
lin_reg = LinearRegression()
lin_reg.fit(X,y)
print(lin_reg.intercept_,lin_reg.coef_)
X_new = np.array([[0],[2]])
print(lin_reg.predict(X_new))
plt,plot(X_new,lin_reg.predict(X_new),'r-')
plt.plot(X,y,'b.')
plt.axis([0,2,0,10])
plt.show()
运行得到结果。
算出来系数也存在一点误差,不过也是线性回归了(貌似效果还好一点)。
接下来从概率角度看看线性回归。
假设存在误差服从高斯分布,ε~N(0,δ²)
y=f(w)+ε=wTX+ε
则y|xiw~N(wTx,δ²)
可得P(y|xiw)=1/(√2π·δ)·exp^{-(y-wTx)²/2δ²}
l(w)=logP(y|xiw)=log∏P(y|xiw)=∑logP(y|xiw)=∑log1/(√2π·δ)+log exp^{-(y-wTx)²/2δ²}=∑log1/(√2π·δ)-(y-wTx)²/2δ²
根据极大似然估计,w=argmax l(w)=argmax -(y-wTx)²/2δ²=argmin (y-wTx)²
最后得出的结果与最小二乘法的损失函数一样。
故我们可以得出一个结论,最小二乘估计隐含了一个噪声服从高斯分布的假设。
写完这第一篇线性回归的笔记,可以整理下一个算法了。
下一个算法是梯度下降法,也是一种回归。