1. 程式人生 > >最小二乘法的原理與計算

最小二乘法的原理與計算

png end 復制代碼 線性 mean 選擇 += 最優 inf

https://www.cnblogs.com/xunziji/p/7366580.html

最小二乘法的應用例子
如果某個資產在買入後,第 2-100 天內的收益變化如下圖所示:

技術分享圖片

這時,我想要獲得第 2-100 天內的任意收益,都是可以方便清晰獲得的,但是如果我在第100天的時間,想要預估第107天時的收益呢?
從上圖中,原始數據是沒有第107天的收益的,這時間就必須根據2-100天的數據對第 107 天的收益進行預測。
進行預測有多種方法,但是對於上面的例子,最常見的是線性回歸方式,而線性回歸中最受歡迎的算法是最小二乘法。

進行線性回歸後如下圖所示:

技術分享圖片


紅色曲線就是2-100 天的原始數據,而綠色的斜線就是線性回歸線。

可以看出,綠色的線是斜率固定的,是符合函數:f(y) = b + kx,這時間就能輕松的獲得第107天的預測數據。


最小二乘法的原理
我們是如何求的線性回歸線呢,是又如何最小二乘法是最優的選擇呢。
先看下圖:

技術分享圖片

線性回歸線就是藍色的點到回歸線的垂直距離和最小的直線。上圖中紅色的線,即真實數據到回歸線的垂直距離,就是真實數據與回歸線(預測數據)的誤差,我們只需要使所有誤差的和最小,也就是最優的。

利用Python代碼計算最小二乘法來線性回歸

技術分享圖片
x = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
y = [-0.19, -0.51, -0.81, -0.29, -0.9, -0.46, -0.88, -0.71, -0.14, -0.11, -0.46, -0.45, -0.13, -0.06, 0.27, 0.05, 0.23, 0.98, 0.97, 1.3, 1.04, 0.4, 0.01, 0.45, 0.38, 0.84,
0.47, 0.8, 0.17, 0.03, 0.37, 0.91, 0.71, 0.87, 1.15, 2.02, 2.22, 2.59, 3.16, 2.72, 2.78, 2.15, 3.05, 3.34, 3.39, 3.73, 3.35, 2.61, 2.59, 3.12, 3.32, 3.67, 3.23, 3.42, 3.8,
4.32, 4.98, 4.23, 4.88, 4.87, 4.59, 3.82, 3.89, 4.7, 4.89, 5.28, 4.75, 5.26, 6.55, 6.49, 7.11, 6.96, 6.74, 6.97, 6.43, 6.38, 6.36, 5.56, 5.0, 4.31, 4.23, 4.83, 5.9, 5.95,
7.21, 7.92, 7.95, 7.55, 7.32, 7.69, 8.0, 8.49, 8.75, 8.76, 8.55, 8.77, 8.76, 9.43, 9.91]
mean_x = sum(x) / len(x)
mean_y = sum(y) / len(y)
sum_x = 0.0
sum_y = 0.0
for i in range(0, len(x)):
sum_x += (x[i] - mean_x) * (y[i] - mean_y)
sum_y += (x[i] - mean_x) ** 2

k = sum_x / sum_y
b = mean_y - k * mean_x

y2 = []
# y2 對真實數據的回歸
for i in range(0, len(x)):
y2.append(round(b + k*x[i], 2))

# y2 對 101 - 110 天內的預測
last_x = x[-1]
for i in range(1, 11):
x.append(last_x + i)
y2.append(round(b + k*(last_x + i), 2))
技術分享圖片

結果如圖所示,預測第107天的收益是9.23:

技術分享圖片

最小二乘法的原理與計算