用最小二乘法求解多元一次方程模型的参数

从上一篇博文的讨论中,我们已经知道,用更为复杂的模型可以获得更好的拟合效果。多元一次方程比一元一次方程更为复杂,因为特征数据项更多。多元一次方程的通用表达形式如下:

y = θ 0 + θ 1 x 1 + ... + θ n x n y = \theta_{0} + {\theta_{1}x_{1} + \ldots + \theta}{n}x{n} y=θ0+θ1x1+...+θnxn

(方程1)

可以设 x 0 = 1 x_{0} = 1 x0=1,则方程1可以变成:

y = θ 0 x 0 + θ 1 x 1 + ... + θ n x n y = \theta_{0}x_{0} + {\theta_{1}x_{1} + \ldots + \theta}{n}x{n} y=θ0x0+θ1x1+...+θnxn

(方程2)

**提示:**再次提醒,求解模型是要求其中的 θ 0 ... θ n \theta_{0}\ldots\ \theta_{n} θ0... θn这些参数值,而不是 x 0 ... x n x_{0}\ldots\ x_{n} x0... xn。 x 0 ... x n x_{0}\ldots\ x_{n} x0... xn、y的值事先都是已知的值。

要想打好机器学习的数学基础,请参见清华大学出版社的人人可懂系列,包括《人人可懂的微积分》(已上市)、《人人可懂的线性代数》(即将上市)、《人人可懂的概率统计》(即将上市)。

如果换用矩阵中的向量方式来表达,可设:

x = [ 1 x 1 ⋮ x n ] \mathbf{x} = \begin{bmatrix} 1 \\ x_{1} \\ \begin{matrix} \vdots \\ x_{n} \\ \end{matrix} \\ \end{bmatrix} x= 1x1⋮xn θ = [ θ 0 θ 1 ⋮ θ n ] \mathbf{\theta} = \begin{bmatrix} \theta_{0} \\ \theta_{1} \\ \begin{matrix} \vdots \\ \theta_{n} \\ \end{matrix} \\ \end{bmatrix} θ= θ0θ1⋮θn

则方程2可简化表达为:

y = x T θ y = \mathbf{x}^{T}\mathbf{\theta} y=xTθ 或
y = θ T x y = \mathbf{\theta}^{T}\mathbf{x} y=θTx

(方程3)

仍采用误差函数:

J ( θ ) = 1 2 m ∑ i = 0 m − 1 ( y p i − y i ) 2 J\left( \mathbf{\theta} \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{(y_{pi} - y_{i})}^{2} J(θ)=2m1i=0∑m−1(ypi−yi)2

把方程3代入,可得成本函数为:

J ( θ ) = 1 2 m ∑ i = 0 m − 1 ( y pi − y i ) 2 = 1 2 m ∑ i = 0 m − 1 ( x i T θ − y i ) 2 J\left( \mathbf{\theta} \right) = \frac{1}{2m}\sum_{i = 0}^{m - 1}{(y_{\text{pi}} - y_{i})}^{2} = \frac{1}{2m}\sum_{i = 0}^{m - 1}{({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})}^{2} J(θ)=2m1i=0∑m−1(ypi−yi)2=2m1i=0∑m−1(xiTθ−yi)2

其中, x i T {\mathbf{x}{i}}^{T} xiT表示第i 个数据样本的所有特征数据项向量的值,也是 x i \mathbf{x}{i} xi作转置后的矩阵向量。

提示:
x i \mathbf{x}{i} xi是一个数据样本的所有特征数据项向量的纵向表达, x i T {\mathbf{x}{i}}^{T} xiT是一个数据样本的所有特征数据项向量的横向表达(即一个数据样本),即:

x i = [ 1 x i 1 ⋮ x in ] \mathbf{x}{i} = \begin{bmatrix} 1 \\ x{i1} \\ \begin{matrix} \vdots \\ x_{\text{in}} \\ \end{matrix} \\ \end{bmatrix} xi= 1xi1⋮xin

x i T = [ 1 x i 1 ... x in ] {\mathbf{x}{i}}^{T}\mathbf{=}\begin{bmatrix} 1 & x{i1} & \begin{matrix} \mathbf{\ldots} & x_{\text{in}} \\ \end{matrix} \\ \end{bmatrix} xiT=[1xi1...xin]

请注意,粗体的 x \mathbf{x} x表示的是向量,不是粗体的 x x x表示的是数值。

要使 J ( θ ) J\left( \mathbf{\theta} \right) J(θ)得到最小值,则其在各个方向上的导数值必为0,以对 θ 0 \theta_{0} θ0、 θ 1 \theta_{1} θ1的偏导数作计算示例如下。

∂ J ( θ ) ∂ θ 0 = ∂ ∂ θ 0 ( 1 2 m ∑ i = 0 m − 1 ( x i T θ − y i ) 2 ) = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) ∂ ∂ θ 0 ( x i T θ − y i ) ) = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) ∂ ∂ θ 0 ( x i T θ ) ) = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) x i 0 ) = 1 m ∑ i = 0 m − 1 ( x i T θ − y i ) \frac{\partial J(\mathbf{\theta})}{\partial\theta_{0}} = \frac{\partial}{\partial\theta_{0}}\left( \frac{1}{2m}\sum_{i = 0}^{m - 1}{({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})}^{2} \right) = \frac{1}{m}\sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})\frac{\partial}{\partial\theta_{0}}\left( {\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i} \right) \right) = \frac{1}{m}\sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})\frac{\partial}{\partial\theta_{0}}\left( {\mathbf{x}{i}}^{T}\mathbf{\theta} \right) \right) = \frac{1}{m}\sum{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})x_{i0} \right) = \frac{1}{m}\sum_{i = 0}^{m - 1}{({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})} ∂θ0∂J(θ)=∂θ0∂(2m1i=0∑m−1(xiTθ−yi)2)=m1i=0∑m−1((xiTθ−yi)∂θ0∂(xiTθ−yi))=m1i=0∑m−1((xiTθ−yi)∂θ0∂(xiTθ))=m1i=0∑m−1((xiTθ−yi)xi0)=m1i=0∑m−1(xiTθ−yi)

这里,由于 x i 0 x_{i0} xi0恒为1,则使得 ∂ J ( θ ) ∂ θ 0 \frac{\partial J(\mathbf{\theta})}{\partial\theta_{0}} ∂θ0∂J(θ)的最终表达式较为简单。但对 θ 1 \theta_{1} θ1的偏导数的求导过程会稍显复杂一点:

∂ J ( θ ) ∂ θ 1 = ∂ ∂ θ 1 ( 1 2 m ∑ i = 0 m − 1 ( x i T θ − y i ) 2 ) = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) ∂ ∂ θ 1 ( x i T θ − y i ) ) = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) ∂ ∂ θ 1 ( x i T θ ) ) = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) x i 1 ) \frac{\partial J(\mathbf{\theta})}{\partial\theta_{1}} = \frac{\partial}{\partial\theta_{1}}\left( \frac{1}{2m}\sum_{i = 0}^{m - 1}{({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})}^{2} \right) = \frac{1}{m}\sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})\frac{\partial}{\partial\theta_{1}}\left( {\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i} \right) \right) = \frac{1}{m}\sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})\frac{\partial}{\partial\theta_{1}}\left( {\mathbf{x}{i}}^{T}\mathbf{\theta} \right) \right) = \frac{1}{m}\sum{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})x_{i1} \right) ∂θ1∂J(θ)=∂θ1∂(2m1i=0∑m−1(xiTθ−yi)2)=m1i=0∑m−1((xiTθ−yi)∂θ1∂(xiTθ−yi))=m1i=0∑m−1((xiTθ−yi)∂θ1∂(xiTθ))=m1i=0∑m−1((xiTθ−yi)xi1)

由于对于每个数据样本, x i 1 x_{i1} xi1的值有所不同,所以不能把 x i 1 x_{i1} xi1作为公共项提取到∑之外。同理,可得:

∂ J ( θ ) ∂ θ 2 = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) x i 2 ) \frac{\partial J(\mathbf{\theta})}{\partial\theta_{2}} = \frac{1}{m}\sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})x_{i2} \right) ∂θ2∂J(θ)=m1i=0∑m−1((xiTθ−yi)xi2)

... ... \ldots\ldots ......

∂ J ( θ ) ∂ θ n = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) x in ) \frac{\partial J(\mathbf{\theta})}{\partial\theta_{n}} = \frac{1}{m}\sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i})x_{\text{in}} \right) ∂θn∂J(θ)=m1i=0∑m−1((xiTθ−yi)xin)

综上,可得:

∂ J ( θ ) ∂ θ k = 1 m ∑ i = 0 m − 1 ( ( x i T θ − y i ) x ik ) = 0 ⟹ ∑ i = 0 m − 1 ( ( x i T θ − y i ) x ik ) = 0 \frac{\partial J\left( \mathbf{\theta} \right)}{\partial\theta_{k}} = \frac{1}{m}\sum_{i = 0}^{m - 1}\left( \left( {\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i} \right)x_{\text{ik}} \right) = 0 \Longrightarrow \sum_{i = 0}^{m - 1}\left( \left( {\mathbf{x}{i}}^{T}\mathbf{\theta} - y{i} \right)x_{\text{ik}} \right) = 0 ∂θk∂J(θ)=m1i=0∑m−1((xiTθ−yi)xik)=0⟹i=0∑m−1((xiTθ−yi)xik)=0

⟹ ∑ i = 0 m − 1 ( y i x ik ) = ∑ i = 0 m − 1 ( ( x i T θ ) x ik ) \Longrightarrow \sum_{i = 0}^{m - 1}\left( y_{i}x_{\text{ik}} \right) = \sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta})x{\text{ik}} \right) ⟹i=0∑m−1(yixik)=i=0∑m−1((xiTθ)xik)

**提示:**上述等式两边∑符号里的 x ik x_{\text{ik}} xik不能约掉,因为对于每个数据样本, x i k x_{ik} xik的值有所不同。

这样可以组成一个联立方程组:

{ ∑ i = 0 m − 1 ( y i x i 0 ) = ∑ i = 0 m − 1 ( ( x i T θ ) x i 0 ) ⋮ ∑ i = 0 m − 1 ( y i x in ) = ∑ i = 0 m − 1 ( ( x i T θ ) x in ) \left\{ \begin{matrix} \sum_{i = 0}^{m - 1}\left( y_{i}x_{i0} \right) = \sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta})x{i0} \right) \\ \vdots \\ \sum_{i = 0}^{m - 1}\left( y_{i}x_{\text{in}} \right) = \sum_{i = 0}^{m - 1}\left( ({\mathbf{x}{i}}^{T}\mathbf{\theta})x{\text{in}} \right) \\ \end{matrix} \right.\ ⎩ ⎨ ⎧∑i=0m−1(yixi0)=∑i=0m−1((xiTθ)xi0)⋮∑i=0m−1(yixin)=∑i=0m−1((xiTθ)xin)

(方程组4)

由于实际上:

x i T θ = ∑ j = 0 n ( x ij θ j ) {\mathbf{x}{i}}^{T}\mathbf{\theta =}\sum{j = 0}^{n}\left( x_{\text{ij}}\theta_{j} \right) xiTθ=j=0∑n(xijθj)

因此,可得:

{ ∑ i = 0 m − 1 ( y i x i 0 ) = ∑ i = 0 m − 1 ( ( ∑ j = 0 n ( x ij θ j ) ) x i 0 ) ⋮ ∑ i = 0 m − 1 ( y i x in ) = ∑ i = 0 m − 1 ( ( ∑ j = 0 n ( x ij θ j ) ) x in ) \left\{ \begin{matrix} \sum_{i = 0}^{m - 1}\left( y_{i}x_{i0} \right) = \sum_{i = 0}^{m - 1}\left( \left( \sum_{j = 0}^{n}\left( x_{\text{ij}}\theta_{j} \right) \right)x_{i0} \right) \\ \vdots \\ \sum_{i = 0}^{m - 1}\left( y_{i}x_{\text{in}} \right) = \sum_{i = 0}^{m - 1}\left( \left( \sum_{j = 0}^{n}\left(x_{\text{ij}}\theta_{j} \right) \right)x_{\text{in}} \right) \\ \end{matrix} \right.\ ⎩ ⎨ ⎧∑i=0m−1(yixi0)=∑i=0m−1((∑j=0n(xijθj))xi0)⋮∑i=0m−1(yixin)=∑i=0m−1((∑j=0n(xijθj))xin)

(方程组5)

令:

Y = [ y 0 ⋮ y m − 1 ] \mathbf{Y} = \begin{bmatrix} y_{0} \\ \vdots \\ y_{m - 1} \\ \end{bmatrix} Y= y0⋮ym−1

X = [ x 0 T ⋮ x m − 1 T ] = [ x 00 ... x 0 n ⋮ ⋱ ⋮ x ( m − 1 ) 0 ... x ( m − 1 ) n ] = [ 1 x 01 ... x 0 n ⋮ ⋮ ⋱ ⋮ 1 x ( m − 1 ) 1 ... x ( m − 1 ) n ] \mathbf{X} = \begin{bmatrix} {\mathbf{x}{0}}^{T} \\ \vdots \\ {\mathbf{x}{m - 1}}^{T} \\ \end{bmatrix} = \begin{bmatrix} x_{00} & \ldots & x_{0n} \\ \vdots & \ddots & \vdots \\ x_{(m - 1)0} & \ldots & x_{(m - 1)n} \\ \end{bmatrix} = \begin{bmatrix} \begin{matrix} 1 & \text{\ \ \ \ \ \ \ \ x}{01} \\ \end{matrix} & \ldots & x{0n} \\ \begin{matrix} \vdots & \ \ \ \ \ \ \ \ \ \ \ \ \ \vdots \\ \end{matrix} & \ddots & \vdots \\ \begin{matrix} 1 & x_{(m - 1)1} \\ \end{matrix} & \ldots & x_{(m - 1)n} \\ \end{bmatrix} X= x0T⋮xm−1T = x00⋮x(m−1)0...⋱...x0n⋮x(m−1)n = 1 x01⋮ ⋮1x(m−1)1...⋱...x0n⋮x(m−1)n

由于:

X θ = [ x 00 ... x 0 n ⋮ ⋱ ⋮ x ( m − 1 ) 0 ... x ( m − 1 ) n ] [ θ 0 ⋮ θ n ] = [ ∑ j = 0 n ( x 0 j θ j ) ⋮ ∑ j = 0 n ( x ( m − 1 ) j θ j ) ] \mathbf{X}\mathbf{\theta =}\begin{bmatrix} x_{00} & \ldots & x_{0n} \\ \vdots & \ddots & \vdots \\ x_{(m - 1)0} & \ldots & x_{(m - 1)n} \\ \end{bmatrix}\begin{bmatrix} \theta_{0} \\ \vdots \\ \theta_{n} \\ \end{bmatrix} = \begin{bmatrix} \sum_{j = 0}^{n}\left( x_{0j}\theta_{j} \right) \\ \vdots \\ \sum_{j = 0}^{n}\left( x_{(m - 1)j}\theta_{j} \right) \\ \end{bmatrix} Xθ= x00⋮x(m−1)0...⋱...x0n⋮x(m−1)n θ0⋮θn = ∑j=0n(x0jθj)⋮∑j=0n(x(m−1)jθj)

X T X θ = [ x 00 ... x ( m − 1 ) 0 ⋮ ⋱ ⋮ x 0 n ... x n ( m − 1 ) n ] [ ∑ j = 0 n ( x 0 j θ j ) ⋮ ∑ j = 0 n ( x ( m − 1 ) j θ j ) ] = [ ∑ i = 0 m − 1 ( ( ∑ j = 0 n ( x ij θ j ) ) x i 0 ) ⋮ ∑ i = 0 m − 1 ( ( ∑ j = 0 n ( x ij θ j ) ) x in ) ] \mathbf{X}^{T}\mathbf{X}\mathbf{\theta} = \begin{bmatrix} x_{00} & \ldots & x_{(m - 1)0} \\ \vdots & \ddots & \vdots \\ x_{0n} & \ldots & x_{n(m - 1)n} \\ \end{bmatrix}\begin{bmatrix} \sum_{j = 0}^{n}\left( x_{0j}\theta_{j} \right) \\ \vdots \\ \sum_{j = 0}^{n}\left( x_{(m - 1)j}\theta_{j} \right) \\ \end{bmatrix} = \begin{bmatrix} \sum_{i = 0}^{m - 1}\left( \left( \sum_{j = 0}^{n}\left( \mathbf{x}{\text{ij}}\theta{j} \right) \right)x_{i0} \right) \\ \vdots \\ \sum_{i = 0}^{m - 1}\left( \left( \sum_{j = 0}^{n}\left( \mathbf{x}{\text{ij}}\theta{j} \right) \right)x_{\text{in}} \right) \\ \end{bmatrix} XTXθ= x00⋮x0n...⋱...x(m−1)0⋮xn(m−1)n ∑j=0n(x0jθj)⋮∑j=0n(x(m−1)jθj) = ∑i=0m−1((∑j=0n(xijθj))xi0)⋮∑i=0m−1((∑j=0n(xijθj))xin)

X T Y = [ x 00 ... x ( m − 1 ) 0 ⋮ ⋱ ⋮ x 0 n ... x n ( m − 1 ) n ] [ y 0 ⋮ y m − 1 ] = [ ∑ i = 0 m − 1 ( y i x i 0 ) ⋮ ∑ i = 0 m − 1 ( y i x in ) ] \mathbf{X}^{T}\mathbf{Y} = \begin{bmatrix} x_{00} & \ldots & x_{(m - 1)0} \\ \vdots & \ddots & \vdots \\ x_{0n} & \ldots & x_{n(m - 1)n} \\ \end{bmatrix}\begin{bmatrix} y_{0} \\ \vdots \\ y_{m - 1} \\ \end{bmatrix} = \begin{bmatrix} \sum_{i = 0}^{m - 1}\left( y_{i}x_{i0} \right) \\ \vdots \\ \sum_{i = 0}^{m - 1}\left( y_{i}x_{\text{in}} \right) \\ \end{bmatrix} XTY= x00⋮x0n...⋱...x(m−1)0⋮xn(m−1)n y0⋮ym−1 = ∑i=0m−1(yixi0)⋮∑i=0m−1(yixin)

采用矩阵表达方式,则方程组5可简化表达为:

X T X θ = X T Y \mathbf{X}^{T}\mathbf{X}\mathbf{\theta} = \mathbf{X}^{T}\mathbf{Y} XTXθ=XTY

由此,可解线性方程组,求得:

θ = ( X T X ) − 1 X T Y \mathbf{\theta} = \left( \mathbf{X}^{T}\mathbf{X} \right)^{- 1}\mathbf{X}^{T}\mathbf{Y} θ=(XTX)−1XTY

(方程组5的解)

要想打好机器学习的数学基础,请参见清华大学出版社的人人可懂系列,包括《人人可懂的微积分》(已上市)、《人人可懂的线性代数》(即将上市)、《人人可懂的概率统计》(即将上市)。

实际应用中,矩阵X 不太可能是方阵,因此很小概率能有逆矩阵,但 X T X \mathbf{X}^{T}\mathbf{X} XTX一定是方阵,行数、列数为 n + 1 n + 1 n+1(多了一个恒为1的特征数据项)。但 X T X \mathbf{X}^{T}\mathbf{X} XTX就一定有逆矩阵吗?也不一定,只是不存在逆矩阵这件事是小概率事件,因为绝大多数情况下,现实采集的数据不太可能在向量上正好呈比例关系。为了防止 X T X \mathbf{X}^{T}\mathbf{X} XTX不存在逆矩阵这种情况发生,可以采用一些方法解决,本博客后续还会讲解。

相关推荐
AI营销实验室1 小时前
原圈科技AI CRM系统深度解析:告别单点智能,构建AI协同作战体系
大数据·人工智能
武子康1 小时前
大数据-214 K-Means 聚类实战:自写算法验证 + sklearn KMeans 参数/labels_/fit_predict 速通
大数据·后端·机器学习
njsgcs1 小时前
gru 记忆是记当前episode的内容吗
人工智能
竹君子1 小时前
AI知识库(2)豆包AI手机介绍
人工智能
飞哥数智坊1 小时前
一起看看开发一个活动平台,国产和国际模型各自表现如何?
人工智能·ai编程·trae
LDG_AGI2 小时前
【机器学习】深度学习推荐系统(二十六):X 推荐算法多模型融合机制详解
人工智能·分布式·深度学习·算法·机器学习·推荐算法
huazi-J2 小时前
Datawhale Happy-LLM 课程 task 1和2:NLP基础概念
人工智能·自然语言处理·大模型·llm·datawhale
WuChao_JMUer2 小时前
YOLO26 on RDK S100P 端侧部署技术报告
人工智能·算法·yolo·rdk
Ro Jace2 小时前
传统雷达信号分选方法之SDIF:Improved algorithm for the deinterleaving of radar pulses
网络·人工智能·算法