前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最优化思想下的最小二乘法

最优化思想下的最小二乘法

作者头像
老齐
发布2021-07-28 16:00:50
1.3K0
发布2021-07-28 16:00:50
举报
文章被收录于专栏:老齐教室老齐教室

本文是《机器学习数学基础》内容节选。


4.3.2 最小二乘法(2)

最小二乘法也是一种最优化方法,下面在第3章3.6节对最小二乘法初步了解的基础上,从最优化的角度对其进行理解。

从最优化的角度来说,最小二乘法就是目标函数由若干个函数的平方和构成,即:

F(\mathbf{x}) = \sum_{i=1}^m f^2_i(\mathbf{x})\tag{4.3.3}

其中

\pmb{x}=\begin{bmatrix}x_1&x_2&\cdots&x_n\end{bmatrix}^{\rm{T}}

,通常

m \ge n

。极小化此目标函数的问题,称为最小二乘问题(本小节内容主要参考资料是陈宝林著《最优化理论与算法》,这本书对最优化方法有系统化的介绍,有兴趣的读者可以阅读)。

  • 如果
f_i(\mathbf{x})

\mathbf{x}

的线性函数,称(4.3.3)式为线性最小二乘问题

  • 如果
f_i(\mathbf{x})

\mathbf{x}

的非线性函数,称(4.3.3)式为非线性最小二乘问题

在第3章3.6节运用正交方法,解决了线性最小二乘问题,除了该方法之外,还可以利用导数方法解决(第3章3.6节中的示例就使用了导数方法),下面使用向量的偏导数对

\mathbf{Ax}=\mathbf{b}

运用最小二乘法求解,这是最优化思想在最小二乘法中的运用。

继续使用第3章3.6节对

\pmb{Ax}=\pmb{b}

的假设,其中

\pmb{A}

m\times n

矩阵(

m \ge n

)。注意,下面以行向量表示

\pmb{A} = \begin{bmatrix}\pmb{r}_1\\\vdots\\\pmb{r}_m\end{bmatrix}

\mathbf{b}=\begin{bmatrix}b_1\\\vdots\\b_m\end{bmatrix}

,则:

\begin{cases}\pmb{r}_1\pmb{x}&=b_1\\&\vdots\\\pmb{r}_m\pmb{x}&=b_m\end{cases}

如果令(4.3.3)式的

f_i(\mathbf{x})=\mathbf{r}_i\mathbf{x}-b_i,(i=1,\cdots,m)

——这是一个线性函数。

\because\quad F(\mathbf{x}) = \sum_{i=1}^mf^2_i(\mathbf{x})=\begin{bmatrix}f_i(\mathbf{x})&\cdots&f_m(\mathbf{x})\end{bmatrix}\begin{bmatrix}f_i(\mathbf{x})\\\vdots\\f_m(\mathbf{x})\end{bmatrix}
\therefore \quad F(\mathbf{x})=\begin{Vmatrix}\pmb{Ax}-\pmb{b}\end{Vmatrix}^2=(\pmb{Ax}-\pmb{b})^{\rm{T}}(\pmb{Ax}-\pmb{b})=\pmb{x}^{\rm{T}}\pmb{A}^{\rm{T}}\pmb{Ax}-2\pmb{b}^{\rm{T}}\pmb{Ax}+\pmb{b}^{\rm{T}}\pmb{b}\tag{4.3.4}

现在要通过计算

\nabla_{\mathbf{x}}F(\mathbf{x})

解决最小二乘问题。由4.2.4节的“向量-向量”偏导数公式(

\frac{\partial{\pmb{x}^{\rm{T}}\pmb{A} \pmb{x}}}{\partial{\pmb{x}}} = (\pmb{A} + \pmb{A}^{\rm{T}}) \pmb{x}, \frac{\partial{\pmb{Ax}}}{\partial{\pmb{x}}}=\pmb{A}^{\rm{T}}

)可知:

\begin{split}\frac{\partial{\pmb{x}^{\rm{T}}\pmb{A}^{\rm{T}}\pmb{Ax}}}{\partial{\pmb{x}}} &= (\pmb{A}^{\rm{T}} \pmb{A} +(\pmb{A}^{\rm{T}} \pmb{A})^{\rm{T}}) \pmb{x}=2\pmb{A}^{\rm{T}}\pmb{Ax}\\ \frac{\partial{2\pmb{b}^{\rm{T}}\pmb{Ax}}}{\partial{\pmb{x}}}&=(2\pmb{b}^{\rm{T}}\pmb{A})^{\rm{T}}=2\pmb{A}^{\rm{T}}\pmb{b}\end{split}

所以:

\nabla_{\pmb{x}}F(\pmb{x})=2\pmb{A}^{\rm{T}}\pmb{Ax}-2\pmb{A}^{\rm{T}}\pmb{b}=0

由此解得第3章3.6.1节(3.6.3)式的正规方程:

\pmb{A}^{\rm{T}}\pmb{Ax} = \pmb{A}^{\rm{T}}\pmb{b}\tag{4.3.5}

\pmb{A}

列满秩,

\pmb{A}^{\rm{T}}\pmb{A}

n

阶对称正定矩阵,可得:

\hat{\pmb{x}} = (\pmb{A}^{\rm{T}}\pmb{A})^{-1}\pmb{A}^{\rm{T}}\pmb{b}\tag{4.3.6}

只要

\pmb{A}^{\rm{T}}\pmb{A}

非奇异,即可用(4.3.6)式得到最优解。

对于非线性最小二乘问题,就不能套用(4.3.5)式的正规方程求解了。但是,自从伟大的牛顿和莱布尼兹创立了微分学之后,我们已经有了一个重要的武器:化曲为直,通过解一系列的线性最小二乘为题求解非线性最小二乘问题。但是,由于在机器学习中,我们较少直接使用这类方法解决非线性问题,所以此处略去,而是将非线性最小二乘问题的理论推导放在了本书在线资料,供有兴趣的读者参考。

如果用程序解决非线性最小二乘问题,可以使用scipy提供的scipy.optimize.least_squares()函数实现。在第3章3.6.2节中已经了解到,用最小二乘法,可以根据数据拟合直线,下面的示例中也创造一些数据,但这些数据不符合直线型的函数,拟合之后是曲线(注意,创造这些函数的时候,就是根据logistic函数形式

y(t) = \frac{K}{1+e^{-r(t-t_0)}}

创建的,那么拟合的曲线也应该是此函数曲线形状,有关logistic函数,请参阅第4章4.4.1节的(4.4.4)式和图4-4-3)。

代码语言:javascript
复制
from scipy.optimize import least_squares
import numpy as np

def y(theta, t):    # logistic 函数
    return theta[0]/(1+np.exp(-theta[1]*(t-theta[2])))

# 训练数据
ts = np.linspace(0, 1)
K = 1
r = 10
t0 = 0.5
noise = 0.1
ys = y([K,r,t0], ts) + noise * np.random.rand(ts.shape[0])    

def fun(theta):
    return y(theta, ts) - ys

theta0 = [1,2,3]    # 设置初始值
res1 = least_squares(fun, theta0)
res1.x

# 输出
array([1.09603227, 8.23405779, 0.49645518])

least_squares()函数,从所设置的初始值theta0开始,以迭代的方式,逐步逼近函数fun的最小二乘解,res1.x返回结果是最优估计。如果将上述数据和依据最小二乘法拟合的曲线绘制成图像,则为:

代码语言:javascript
复制
import matplotlib.pyplot as plt

# 数据分布
plt.plot(ts, ys, 'o')

# 拟合直线
plt.plot(ts, y(res1.x, ts), linewidth=2)

plt.xlabel('t')
plt.ylabel('y')
plt.title('Logistic function')
plt.show()

输出图像:


★关于《机器学习数学基础》的更多信息,请参阅:www.itdiffer.com。 ”

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.3.2 最小二乘法(2)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档