Python實現基於最小二乘法的線性回歸


下面展示利用Python實現基於最小二乘法的線性回歸模型,同時不需要引入其他科學計算以及機器學習的庫。

利用Python代碼表示如下:
 
#首先引入數據集x,和y的值的大小利用Python的數據結構:列表,來實現。
 
y=[4,8,13,35,34,67,78,89,100,101]
 
x=[0,1,2,3,4,5,6,7,8,9]
 
#然后再引入Python當中的繪圖庫,用於檢測我們利用線性回歸得到的結果是否正確
 
from matplotlib.font_manager import FontProperties
 
font = FontProperties(fname=r"c:\windows\fonts\msyh.ttc", size=15)
 
import matplotlib.pyplot as plt
 
k = 0
 
for i in range(10):
 
    j = k
 
    k = j+i**2
 
    print(k)
 
    print(i)#實現計算x的平方
 
a11 = k
 
k=0
 
print("\n")#換行,使我們的結果更加清晰
 
for i in range(10):
 
    #實現計算X的求和
 
    j = k
 
    k = j+i
 
    print(k)
 
a12 = k
 
#下面開始計算y*x的求和
 
k=0
 
for i in range(10):
 
    j = k
 
    k = j+y[i]*i
 
    print("我們k的大小是{}".format(k))
 
yixi = k
 
b1 = yixi
 
#現在再來計算我們yi求和后的大小
 
 
 
k=0
 
for i in range(10):
 
   j = k
 
   k = j+y[i]
 
   print(k)
 
yi = k
 
b2 = yi
 
#計算完畢,現在根據求出偏導數后的值計算我們斜率和截距的大小
 
#根據題意可得到:
 
a22 = 10
 
a21 = a12
 
#因此根據線性代數的克拉默法則,我們可以將其寫成一個二階行列式的形式:
 
print("現在開始打印行列式的各個值:")
 
print(a11)
 
print(a12)
 
print(a21)
 
print(a22)#檢查無誤后開始用克拉默法則進行計算
 
 
 
k = (b1*a22-a12*b2)/(a11*a22-a12*a21)
 
b = (a11*b2-a21*b1)/(a11*a22-a12*a21)
 
print("\n")
 
print("K的大小是:{}".format(k))
 
print("b的大小是:{}".format(b))
 
plt.scatter(x,y)
 
plt.title("利用最小二乘法實現線性單元回歸\n制作人:Geeksongs",fontproperties=font)
 
plt.plot([0,12],[(a11*b2-a21*b1)/(a11*a22-a12*a21),((b1*a22-a12*b2)/(a11*a22-a12*a21))*12+b],linewidth=3,color="black")
 
plt.show()
 

得解。 

 


免責聲明!

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



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