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

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

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 周刊【2026.04.27-05.03】:Anthropic 9000亿美元估值、英伟达死磕智能体、中央重磅定调AI
人工智能
码点滴3 分钟前
什么时候用 DeepSeek V4,而不是 GPT-5/Claude/Gemini?
人工智能·gpt·架构·大模型·deepseek
狐狐生风15 分钟前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
波动几何17 分钟前
CDA架构代码工坊技能cda-code-lab
人工智能
舟遥遥娓飘飘22 分钟前
DeepSeek V4技术变革对社会结构与职业体系的重构
人工智能
狐狐生风23 分钟前
LangChain RAG 基础
人工智能·python·学习·langchain·rag·agentai
哥布林学者37 分钟前
深度学习进阶(十五)通道注意力 SE
机器学习·ai
墨北小七1 小时前
使用InspireFace进行智慧楼宇门禁人脸识别的训练微调
人工智能·深度学习·神经网络
HackTorjan1 小时前
深度神经网络的反向传播与梯度优化原理
人工智能·spring boot·神经网络·机器学习·dnn
PersistJiao1 小时前
Codex、Claude Code、gstack三者的关系
人工智能