python_最小二乗法 least-squares analysis(その1)

各点からの距離の二乗が最小になる直線を引く

直線の式、y=ax+b

i 番目の点の座標を(xi,yi)とすると、

i番目の点と直線の距離は、

(yi-(axi+b))2とかける。これの∑をとって、それを最小にします。

ここでxは説明変数説明変数(explanatory variable)、yは目的変数(objective variable) といいます。

3つの解き方で試します。

その1 一般的な解き方。For loop を使ったもの

import matplotlib.pyplot as plt

xval=[2,4,6]
yval=[3,4,7]

s_min=1000
s_min_a=-5
s_min_b=-5

for b in [i/100 for i in range(11*100)]:
    for a in [i/100 for i in range(11*100)]:
        s=0
        for i in range(len(xval)):
            s=s+(yval[i]-(a*xval[i]+b))**2
            
        if s_min>s:
            #sが一番小さいならば
            s_min_a=a
            s_min_b=b
            s_min=s
print("y=",s_min_a,"x+",s_min_b)
#-------------------------------------
#ここからグラフ化
plt.figure(dpi=150)
plt.scatter(xval,yval)
y_line=[]
for xi in xval:
    y_line.append(s_min_a*xi+s_min_b)
plt.plot(xval,y_line)
plt.show()

次に別の方法での解放を示します。。。

コメント

タイトルとURLをコピーしました