一元線性回歸模型


1.一元線性回歸模型

 

 

 2.如何求里面的參數a,b

我們默認誤差符合正態分布,那么利用最小二乘法,即可求參數a,b

 

 

 求最小值,也就是對a,b求偏導數

 

 

 

3.如何使用Python求這個值

第一種方法:

直接根據上面的公式去計算

import numpy as np
#生成數據
x = np.arange(0,20)
v = np.random.uniform(-10,+10,x.shape)#干擾,讓數據有誤差
y = 2 * x + v
plt.scatter(x,y)
# 簡單線性回歸模型的參數求解
# 樣本量
n = x.shape
# 計算自變量、因變量、自變量平方、自變量與因變量乘積的和
sum_x = x.sum()
sum_y = y.sum()
sum_x2 = (x*x).sum()
xy = x * y
sum_xy = xy.sum()
# 根據公式計算回歸模型的參數
b = (sum_xy-sum_x*sum_y/n)/(sum_x2-sum_x**2/n)
a = sum_y/n-b*sum_x/n
# 打印出計算結果
print('回歸參數a的值:',a)  #[-0.31848548]
print('回歸參數b的值:',b)  #[1.97134719]

y1=a+b*x
plt.scatter(x,y)
plt.plot(x,y1)

 

 

第二種方法:

statsmodel所示專門用於統計建模的第三方模塊,如需實現線性回歸模型的參數求解,可以調用子模塊中的ols函數

該函數語法:

ols(formula,data,subset=None,drop_cols=None)

  • fromula:以字符串形式指定線性回歸的模型,y~x就表示簡單線性回歸模型
  • data:指定建模的數據集
  • subset:通過布爾類型的數組對象,獲取data的子集用於建模
  • drop_cols:指定需要從data中刪除的變量
import statsmodels.api as sm
import pandas as pd 
data = pd.DataFrame()
data['x'] = x
data['y'] = y

#構建回歸模型
fit = sm.formula.ols('y ~ x',data = data).fit()
fit.params

y2= 1.971347*x-0.318485
plt.scatter(x,y)
plt.plot(x,y1)
plt.plot(x,y2)

 

 

第三種方法:

使用sklearn庫的算法

# 導入線性回歸模塊
from sklearn.linear_model import LinearRegression
model = LinearRegression() #創建線性回歸模型
model.fit(x.reshape(-1,1),data.y) #進行擬合,將dataframe轉換為ndarray形式,將xtrain轉換為列維度
model.coef_  #查看斜率,即y=ax+b中的a
model.intercept_ #查看截距,即y=ax+b中的b
print('計算出來的值,a=%f,,,,b=%f'%(model.coef_,model.intercept_))  #計算出來的值,a=1.971347,,,,b=-0.318485
print('擬合函數為,y = %f * x  + %f'%(model.coef_,model.intercept_))  #擬合函數為,y = 1.971347 * x  + -0.318485

我們可以看出,其實這三種方法都可以計算出來,且值都非常接近(小數點問題而已),下面再畫一下誤差圖

# 將相關結果進行繪圖顯示出來
fig = plt.figure()
ax = plt.subplot(111)
ax.scatter(x,y,marker='.',color='k',label='實際值')
plt.plot(x,y2,color='b',label='擬合線')
#這步是畫誤差值
plt.scatter(x,y,marker='.',color='k',label='原值')
plt.scatter(x,y2,marker='x',color='k',label='原值擬合值')
plt.plot([x,x],[y,y2],color='g')  #誤差線
plt.title('誤差線圖')
plt.show() 

 文章參考這兩位同學:

https://zhuanlan.zhihu.com/p/73494604?utm_source=qq

https://zhuanlan.zhihu.com/p/277698407


免責聲明!

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



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