sklearn LinearReggression

sklearn linear_model:線性模塊

一、LinearReggression

1、調用方法

class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
參數 含義
fit_intercept (bool, default=True)是否計算此模型的截距。
normalize (bool, default=False)當fit_intercept 爲False時將忽略此參數。如果爲True,則將特徵矩陣X在進入迴歸之前將會被減去均值(中心化)併除以L2範式(縮放)。
copy_X (bool, default=True)是否在原特徵矩陣上進行操作
n_jobs (int or None, default = None)作業數
屬性 含義
coef_ 數組,形狀爲 (n_features, )或者(n_targets, n_features) — 線性迴歸方程中估計出的係數。如果在fit中傳遞多個標籤(當y爲二維或以上的時候),則返回的係數是形狀爲(n_targets,n_features)的二維數組,而如果僅傳遞一個標籤,則返回的係數是長度爲n_features的一維數組
intercept 數組,線性迴歸中的截距項

2、評價

(1)均方誤差 MSE
在這裏插入圖片描述

在sklearn 中,有兩種方式調用:

  • sklearn專用的模型評估模塊metrics裏的類mean_squared_error
  • 另一種是調用交叉驗證的類cross_val_score並使用裏面的scoring參數來設置使用均方誤差

調用一:

sklearn.metrics.mean_squared_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average', squared=True)

調用二:

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
cross_va_score(LinearRegression(), x, y, cv=10, scoring="mean_squared_error")

運行會發現報錯:
在這裏插入圖片描述
意思是參數scoring裏沒有這個值,讓我們運行sorted(sklearn.metrics.SCORERS.keys())查看可用值。

import sklearn
sorted(sklearn.metrics.SCORERS.keys())

(運行結果有點多,在此只截取一部分)
截圖
會發現參數scoring 裏沒有"mean_squared_error",但是有"neg_mean_squared_error "。
雖然均方誤差永遠爲正,但是sklearn中的參數scoring下,均方誤差作爲評判標準時,卻是計算”負均方誤差“(neg_mean_squared_error)。這是因爲sklearn在計算模型評估指標的時候,
會考慮指標本身的性質,均方誤差本身是一種誤差,所以被sklearn劃分爲模型的一種損失(loss)。在sklearn當中,所有的損失都使用負數表示。

其中,MSE只能衡量是否預測到了正確的數值,但是除此之外, 我們還希望我們的模型能夠捕捉數據的“規律”,比如數據的分佈規律,單調性等,而是否捕捉到了這些信息是無法使用MSE來衡量的。

(2) r2_score & explained_variance_score (EVS)
兩者可以理解爲是衡量 :1- 模型沒有捕捉到的信息量佔真實標籤所帶信息量的比例
因此兩者越接近1越好
在這裏插入圖片描述
上圖中 \hat{y} : 預測值,\bar{y}:均值, var:平方差

其中,LinearRegression().score()默認使用的就是R^2
在這裏插入圖片描述
除此之外,還可以通過以下兩種方式調用。

sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
cross_va_score(LinearRegression(), x, y, cv=10, scoring="r2")

explained_variance_score 有兩種調用方式:

sklearn.metrics.explained_variance_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
cross_va_score(LinearRegression(), x, y, cv=10, scoring="explained_variance")

然而我們運行下面的代碼會發現R^2<0,這是爲什麼呢?
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
所以當R^2爲負數時,首先檢查你的數據處理以及建模是否正確,如果排除此原因,則說明該模型不適用,需要更換模型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章