1.线性回归
2.非线性回归
3.聚类
4.分类
5.降维
6.优化算法(启发式优化算法)
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。也是机器学习中常用的优化器。
设 ( x , y ) (x,y) (x,y)是一对观测量,且 x = [ x 1 , x 2 , . . . , x n ] T ∈ R N , y ∈ R x=[x_1,x_2,...,x_n]^T\in \mathbb R^N,y\in\mathbb R x=[x1,x2,...,xn]T∈RN,y∈R满足以下公式: y = f ( x , w ) = ∑ n = 0 n x i w i y=f(x,w)=\sum_{n=0}^{n}x_iw_i y=f(x,w)=n=0∑nxiwi其中 w = [ w 1 , w 2 , . . . , w n ] T w=[w_1,w_2,...,w_n]^T w=[w1,w2,...,wn]T为待定的参数。
为了寻找函数 y = f ( x , w ) y=f(x,w) y=f(x,w)的参数 的最优估计值,对于给定 m m m组观测数据 ( x i , y i ) (x_i,y_i) (xi,yi),求解目标函数(均方误差) L ( y , f ( x , w ) ) = ∑ m = 0 m [ y i − f ( x i , w ) ] 2 L(y,f(x,w))=\sqrt{\sum_{m=0}^{m}[y_i-f(x_i,w)]^2} L(y,f(x,w))=m=0∑m[yi−f(xi,w)]2当目标函数取值最小所对应的参数 w w w,即为最小二乘的求解参数,即 a r g m i n w L ( y , f ( x , w ) ) \underset{w}{argmin} \ L(y,f(x,w)) wargmin L(y,f(x,w))
最小二乘法
的矩阵求解假设 m m m个数据, Y ∈ R m , X ∈ R m × n Y\in \mathbb R^m,X\in \mathbb R^{m\times n} Y∈Rm,X∈Rm×n , W ∈ R 1 × n ,W \in\mathbb R^{1\times n} ,W∈R1×n,则损失函数有 L ( W ) = [ ( X W − Y ) T ( X W − Y ) ] 1 / 2 L(W)=[(XW-Y)^T(XW-Y)]^{1/2} L(W)=[(XW−Y)T(XW−Y)]1/2根据最小二乘法原理要对 L ( W ) L(W) L(W)求最小值,则对 W W W求导得到 ∂ L ∂ W = X T ( X W − Y ) \frac {\partial L} {\partial W}=X^T(XW-Y) ∂W∂L=XT(XW−Y)然后令导数等于0,得 X T X W = X T Y X^TXW=X^TY XTXW=XTY整理得 W = ( X T Y ) − 1 X T X W= {(X^{T}Y)^{-1}}{X^TX} W=(XTY)−1XTX其中 ( X T X ) − 1 (X^{T}X)^{-1} (XTX)−1表示 ( X T X ) (X^{T}X) (XTX)的逆矩阵。
1.最小二乘法简洁高效,比梯度下降这样的迭代简便很多,但是也有它的局限性。
2.因为需要计算 ( X T X ) (X^{T}X) (XTX)的逆矩阵,当逆矩阵不存在的时候,就没有办法使用最小二乘法了,梯度下降法仍然可以使用。
3.当样本特征n非常的大的时候,计算逆矩阵非常耗时,这时候就不能使用最小二乘法了,梯度下降仍然可以使用。
4.如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。
#可以调用sklearn中的linear_model模块进行线性回归。(最小二乘法回归)
from sklearn import linear_model
#最小二乘法回归
model_linear = linear_model.LinearRegression()
model_linear.fit(X_train, y_train)
print('最小二乘法回归预测分数:',model_linear.score(X_test, y_test))#预测模型分数(越大
print('最小二乘截距:',model_linear.intercept_,'最小二乘系数:',model_linear.coef_) #截距,系数
plt.scatter(X_train, y_train, marker='o',color='green',label='train')
plt.scatter(X_test, y_test, marker='*',color='blue',label='test')
plt.plot(X_test, model_linear.predict(X_test),c='r',label='LinearRegression')
plt.legend()
plt.show()