線性回歸模型
以鳶尾花的花瓣長度與寬度為例,實現回歸
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import linearregression
from sklearn.metrics import mean_absolute_error,mean_squared_error,r2_score
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
#資料的匯入與處理
iris = load_iris()
x = iris.data[:,2].reshape(-1,1)
y = iris.data[:,3].reshape(-1,1)
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=np.random.seed(0))
#模型的擬合
lr = linearregression()
lr.fit(x_train,y_train)
#**y_hat = lr.predict(x_test)
檢查模型的特徵的權重與截距
print("權重:",lr.coef_)
print("截距:",lr.intercept_)
權重: [[0.41871246]]
截距: [-0.37545151]
繪製擬合的直線
%matplotlib inline
plt.rcparams["font.family"]="simhei"
plt.rcparams["axes.unicode_minus"]=false
plt.rcparams["font.size"] = 16
fig,ax = plt.subplots(1,2)
fig.set_size_inches(16,7)
ax[0].scatter(x_train,y_train,s=15,c="b",label="訓練集")
ax[0].plot(x_train,lr.predict(x_train),c="g",label="訓練集")
ax[1].scatter(x_test,y_test,s=15,c="r",label="測試集")
ax[1].plot(x_test,lr.predict(x_test),c="g",label="訓練集")
for axn in ax:
axn.legend()
axn.set_xlabel("花瓣長度")
axn.set_ylabel("花瓣寬度")
plt.show()
下面來看一下**值和真實值的差異
plt.figure(figsize=(17,6))
plt.plot(y_test,c="g",marker="o",label="**值")
plt.plot(y_hat,c="r",marker="*",ls="--",label="**值")
plt.legend()
plt.ylabel("資料值")
plt.show()
線性模型的評估
建立好了線性模型之後,最重要的是評估模型的好壞,主要採用一下幾個方法來評估模型:
mse(mean_squared_error)
rmse(root_mean_squared_error)
mae(mean_absolute_error)
r2r2r^2r2
msemse: mean_squared_error ,平均平方誤差,即所有樣本資料的真實值與**值之差的平方和的平均值。
rmse
rmse:root_mean_squared_error,即mse的平方根。
maemae:mean_absolute_error,平均絕對值誤差,即所有樣本資料的誤差的絕對值之和。
r2r2r^2r2
r2r2r^2r2為決定係數,用來表示模型擬合性的分值,值越高表示模型擬合性越好,在訓練集中,r2r2r^2r2的取值範圍是[ 0 , 1 ],在測試集中(未知資料),r2r2r^2r2的取值範圍是[ −∞−∞-\infty−∞ , 1 ]。其中公式為
其中tss(total sum of squares)為所有樣本資料與均值的差異,是方差的m倍數 (tss/m 為方差),rss(residual sum of squares)為所有樣本資料誤差平方和,是mse的m倍(rss / m 為mse)。
又公式可以看出,當**值與真實值相同的時候,rss = 0 ,r2r2r^2r2=1,模型最理想。
python的實現方式:
"""回歸模型評價 """
print("均方誤差mse(mean_squared_error):",mean_squared_error(y_test,y_hat))
print("跟均方誤差rmse(root mean_squared_error):",np.sqrt(mean_squared_error(y_test,y_hat)))
print("平均絕對值誤差mae(mean_absolute_error):",mean_absolute_error(y_test,y_hat))
print("訓練集r^2:",r2_score(y_train,lr.predict(x_train)))
print("測試集r^2:",r2_score(y_test,y_hat))
print("訓練集r^2:",lr.score(x_train,y_train))
print("測試集r^2:",lr.score(x_test,y_test))
特別注意:r2_score 與 lr.score,兩種方法均為r2r2r^2r2的值,但是兩個傳入的引數不一樣
均方誤差mse(mean_squared_error): 0.05335352448031869
跟均方誤差rmse(root mean_squared_error): 0.23098381865472456
平均絕對值誤差mae(mean_absolute_error): 0.1677835275546856
訓練集r^2: 0.9381656942757268
測試集r^2: 0.8956126694950287
訓練集r^2: 0.9381656942757268
測試集r^2: 0.8956126694950287
線性回歸(模型的評估
前面兩篇文章筆者介紹了如何建模線性回歸 包括多變數與多項式回歸 如何通過sklearn搭建模型並求解。但是對於乙個求解出來的模型我們應該怎樣來對其進行評估呢?換句話說,你這個模型到底怎麼樣?以最開始的房價 為例,現在假設你求解得到了圖中所示的兩個模型h1 x h 1 x h1 x 與h 2 x h ...
評估回歸模型
與優化均方誤差相比,優化平均絕對誤差可能會導致不同的 最優模型 然而,與優化 r2 值相同,優化均方誤差將總是導致相同的 最優 模型。同樣,如果你選擇具有最佳 r2 分數 最高 的模型,它也將是具有最低均方誤差 mse 的模型。1 平均絕對誤差 mae 不利於使用梯度下降 當你要 的資料遵循偏斜分布...
Python 線性回歸模型
從線性回歸 linear regression 開始學習回歸分析,線性回歸是最早的也是最基本的模型 把資料擬合成一條直線。資料集使用scikit learn裡的資料集boston,boston資料集很適合用來演示線性回歸。boston資料集包含了波士頓地區的房屋 中位數。還有一些可能會影響房價的因素...