当前位置: 代码迷 >> 综合 >> 机器学习中的数学知识——最小二乘法
  详细解决方案

机器学习中的数学知识——最小二乘法

热度:82   发布时间:2023-11-25 06:33:55.0

1.线性回归
2.非线性回归
3.聚类
4.分类
5.降维
6.优化算法(启发式优化算法)

定义

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。也是机器学习中常用的优化器。

(x,y)(x,y)(x,y)是一对观测量,且x=[x1,x2,...,xn]T∈RN,y∈Rx=[x_1,x_2,...,x_n]^T\in \mathbb R^N,y\in\mathbb Rx=[x1?,x2?,...,xn?]TRNyR满足以下公式:y=f(x,w)=∑n=0nxiwiy=f(x,w)=\sum_{n=0}^{n}x_iw_iy=f(x,w)=n=0n?xi?wi?其中w=[w1,w2,...,wn]Tw=[w_1,w_2,...,w_n]^Tw=[w1?,w2?,...,wn?]T为待定的参数。
为了寻找函数y=f(x,w)y=f(x,w)y=f(x,w)的参数 的最优估计值,对于给定mmm组观测数据(xi,yi)(x_i,y_i)(xi?,yi?),求解目标函数(均方误差)L(y,f(x,w))=∑m=0m[yi?f(xi,w)]2L(y,f(x,w))=\sqrt{\sum_{m=0}^{m}[y_i-f(x_i,w)]^2}L(y,f(x,w))=m=0m?[yi??f(xi?,w)]2 ?当目标函数取值最小所对应的参数www,即为最小二乘的求解参数,即argminwL(y,f(x,w))\underset{w}{argmin} \ L(y,f(x,w))wargmin? L(y,f(x,w))

最小二乘法的矩阵求解

假设mmm个数据,Y∈Rm,X∈Rm×nY\in \mathbb R^m,X\in \mathbb R^{m\times n}YRmXRm×n,W∈R1×n,W \in\mathbb R^{1\times n},WR1×n,则损失函数有L(W)=[(XW?Y)T(XW?Y)]1/2L(W)=[(XW-Y)^T(XW-Y)]^{1/2}L(W)=[(XW?Y)T(XW?Y)]1/2根据最小二乘法原理要对L(W)L(W)L(W)求最小值,则对WWW求导得到?L?W=XT(XW?Y)\frac {\partial L} {\partial W}=X^T(XW-Y)?W?L?=XT(XW?Y)然后令导数等于0,得XTXW=XTYX^TXW=X^TYXTXW=XTY整理得W=(XTY)?1XTXW= {(X^{T}Y)^{-1}}{X^TX}W=(XTY)?1XTX其中(XTX)?1(X^{T}X)^{-1}(XTX)?1表示(XTX)(X^{T}X)(XTX)的逆矩阵。

最小二乘法与梯度下降

1.最小二乘法简洁高效,比梯度下降这样的迭代简便很多,但是也有它的局限性。
2.因为需要计算(XTX)(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()

在这里插入图片描述

  相关解决方案