python模型評估 薦線性回歸及模型的評估

2021-10-13 10:49:15 字數 3255 閱讀 9440

線性回歸模型

以鳶尾花的花瓣長度與寬度為例,實現回歸

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資料集包含了波士頓地區的房屋 中位數。還有一些可能會影響房價的因素...