一、算法原理
1.1 算法簡述
最小二乘法是一種數學優化算法。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以通過樣本求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。如下圖中,紅色實線即為實際值與擬合函數之間的差距,在算法實現過程中,盡量使它的平方和最小,達到最佳擬合效果的目的。
1.2 算法詳解
假設給定一系列散列值(數據集)記為D={(x1,y1),(x2,y2),(x3,y3),,,(xn,yn)},設函數f(x)=ax+b使得f(x)函數盡可能擬合D。求解函數f(x)的方法很多種。最小二乘法尋找擬合函數f(x)的原理和思想關鍵:平方差之和最小,即使得Q值最小。
即求解Q最小值如下:
因為(x1,y1),(x2,y2),,,(xn,yn)均是已知變量,問題轉化為求解Q=f(a,b)的最小值,即求解(a,b)點,使得f(a,b)值極小。
使用偏導數解f(a,b)極小值:
最終整理簡化得a值、b值公式如下:
其中,為xi,yi的算術平均值。
二、程序示例及解釋
環境為python3,樣本數據為x與y兩個數據列表
x = [2, 3, 4, 5, 6, 7] y = [5.5,7,6.8,9.5,11,14] 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
計算獲得擬合公式為y=1.634 x + 1.612