最小二乘法公式推導及Python實現


機器學習使用線性回歸方法建模時,求損失函數最優解需要用到最小二乘法。相信很多朋友跟我一樣,想先知道公式是什么,然后再研究它是怎么來的。所以不多說,先上公式。

對於線性回歸方程\(f(x) = ax + b\),由最小二乘法得:
$$a = \frac{\sum (x_{i}-\overline{x})(y_{i}-\overline{y})}{\sum (x_{i}-\overline{x})^{2}}$$
$$b = \overline{y}-a\overline{x}$$
式中,\((x_{i}, y_{i})\)為實驗所得的一組數據的真實值,\(\overline{x}為x_{i}\)的平均數,\(\overline{y}為y_{i}\)的平均數。
接下來推導一下公式是怎么得來的:

設損失函數:

\[M = \sum[y_{i}-f(x_{i})]^{2} \]

由於是線性回歸,式中f(x)是線性函數,令\(f(x) = ax + b\)

現在損失函數M表示為:

\[M = \sum[y_{i}-(ax_{i}+b)]^{2}\; (1) \]

最小二乘法是求f(x)的參數a,b,使得損失函數M取得最小值。

即求M = M(a, b)在哪些點取得最小值。由多元函數極值求法,上述問題可以分別對a,b求偏導數,通過解方程組
$$\left{\begin{matrix}M_{a}(a, b) = 0
\
M_{b}(a, b) = 0
\end{matrix}\right.$$
來解決,即令
$$\left{\begin{matrix}\frac{\partial M}{\partial a} = 0; (2)
\
\
\frac{\partial M}{\partial b} = -2\sum [y_{i}-(ax_{i}+b)] = 0; (3)
\end{matrix}\right.$$

由平均數性質,\(\sum x_{i} = n\overline{x}\)\(\sum y_{i} = n\overline{y}\),其中n為實驗數據組數。將其帶入(3)式,可得:

\[b = \overline{y} - a\overline{x}\; (4) \]

此式表明,線性回歸函數必過點\((\overline{x}, \overline{y})\)

將(4)式帶入(1)式,得:

\[M = \sum[y_{i}-(ax_{i}+\overline{y} - a\overline{x})]^{2} = \sum[(y_{i}-\overline{y})-a(x_{i} - \overline{x})]^{2}\; (5) \]

現對(5)式求偏導數,應用多元復合函數求導法則,推導(2)式:

\[\frac{\partial M}{\partial a} = -2\sum[(y_{i}-\overline{y})-a(x_{i} - \overline{x})](x_{i}-\overline{x}) = 0\; (6) \]

整理(6)式:

\[\sum(y_{i}-\overline{y})(x_{i}-\overline{x})-a\sum (x_{i} - \overline{x})^{2} = 0\; (7) \]

最后可得:

\[a = \frac{\sum(x_{i}-\overline{x})(y_{i}-\overline{y})}{\sum (x_{i} - \overline{x})^{2}}\; (8) \]

最后附上python代碼實現最小二乘法:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1., 2., 3., 4., 5.])
y = np.array([1., 3., 2., 3., 5.])

x_mean = np.mean(x)
y_mean = np.mean(y)

num = 0.0
d = 0.0
for x_i, y_i in zip(x, y):
    num += (x_i - x_mean) * (y_i - y_mean)
    d += (x_i - x_mean) ** 2

a = num/d
b = y_mean - a * x_mean

print('a is %f' % a)
print('b is %f' % b)

y_hat = a * x + b

plt.scatter(x, y)
plt.plot(x, y_hat, color='g')
plt.axis([0, 6, 0, 6])
plt.show()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM