python 嶺回歸 線性模型

2021-10-01 20:45:10 字數 3387 閱讀 6521

嶺回歸也是一種用於回歸的線性模型,因此它的**公式與普通最小二乘法相同。

但在嶺 # 回歸中,對係數(w)的選擇不僅要在訓練資料上得到好的**結果,而且還要擬合附加 # 約束。我們還希望係數盡量小。

換句話說,w 的所有元素都應接近於 0。直觀上來看,這 # 意味著每個特徵對輸出的影響應盡可能小(即斜率很小),同時仍給出很好的**結果。

# 3. 嶺回歸

# 嶺回歸也是一種用於回歸的線性模型,因此它的**公式與普通最小二乘法相同。但在嶺

# 回歸中,對係數(w)的選擇不僅要在訓練資料上得到好的**結果,而且還要擬合附加

# 約束。我們還希望係數盡量小。換句話說,w 的所有元素都應接近於 0。直觀上來看,這

# 意味著每個特徵對輸出的影響應盡可能小(即斜率很小),同時仍給出很好的**結果。

# 這種約束是所謂正則化(regularization)的乙個例子。正則化是指對模型做顯式約束,以

# 38 | 第 2 章

# 避免過擬合。嶺回歸用到的這種被稱為 l2 正則化。7

​# 看一下它對擴充套件的波士頓房價資料集的效果如何:

from sklearn.linear_model import ridge

​ridge = ridge(

).fit(x_train, y_train)

print

("training set score: "

.format

(ridge.score(x_train, y_train)))

print

("test set score: "

.format

(ridge.score(x_test, y_test)))

training set score:

0.89

test set score:

0.75

# 可以看出,ridge 在訓練集上的分數要低於 linearregression,但在測試集上的分數更高。

# 這和我們的預期一致。線性回歸對資料存在過擬合。ridge 是一種約束更強的模型,所以

# 更不容易過擬合。複雜度更小的模型意味著在訓練集上的效能更差,但泛化效能更好。由

# 於我們只對泛化效能感興趣,所以應該選擇 ridge 模型而不是 linearregression 模型。​​

ridge10 = ridge(alpha=10)

.fit(x_train, y_train)

print

("training set score: "

.format

(ridge10.score(x_train, y_train)))

print

("test set score: "

.format

(ridge10.score(x_test, y_test)))

training set score:

0.79

test set score:

0.64

# ridge 模型在模型的簡單性(係數都接近於 0)與訓練集效能之間做出權衡。簡單性和訓練

# 集效能二者對於模型的重要程度可以由使用者通過設定 alpha 引數來指定。在前面的例子中,

# 我們用的是預設引數 alpha=1.0。但沒有理由認為這會給出最佳權衡。alpha 的最佳設定

# 值取決於用到的具體資料集。增大 alpha 會使得係數更加趨向於 0,從而降低訓練集效能,

# 但可能會提高泛化效能。

# 預設引數 alpha=1.0

#增大 alpha 會使得係數更加趨向於 0

ridge01 = ridge(alpha=

0.1)

.fit(x_train, y_train)

print

("training set score: "

.format

(ridge01.score(x_train, y_train)))

print

("test set score: "

.format

(ridge01.score(x_test, y_test)))

​​​# 減小 alpha 可以讓係數受到的限制更小,即在圖 2-1 中向右移動。對於非常小的 alpha 值,

# 係數幾乎沒有受到限制,我們得到乙個與 linearregression 類似的模型:

training set score:

0.93

test set score:

0.77

​# 這裡 alpha=0.1 似乎效果不錯。我們可以嘗試進一步減小 alpha 以提高泛化效能。

# 我們還可以檢視 alpha 取不同值時模型的 coef_ 屬性,從而更加定性地理解 alpha 引數是

# 如何改變模型的。更大的 alpha 表示約束更強的模型,所以我們預計大 alpha 對應的 coef_

# 元素比小 alpha 對應的 coef_ 元素要小。這一點可以在圖 2-12 中得到證實:

# coef_ 檢視斜率

plt.plot(ridge.coef_,

's', label=

"ridge alpha=1"

)plt.plot(ridge10.coef_,

'^', label=

"ridge alpha=10"

)plt.plot(ridge01.coef_,

'v', label=

"ridge alpha=0.1")​

plt.plot(lr.coef_,

'o', label=

"linearregression"

)plt.xlabel(

"coefficient index"

)plt.ylabel(

"coefficient magnitude"

)xlims = plt.xlim(

)plt.hlines(

0, xlims[0]

, xlims[1]

)plt.xlim(xlims)

plt.ylim(-25

,25)plt.legend()​

​​# 這裡 x 軸對應 coef_ 的元素:x=0 對應第乙個特徵的係數,x=1 對應第二個特徵的係數,以

# 此類推,一直到 x=100。y 軸表示該係數的具體數值。這裡需要記住的是,對於 alpha=10,

# 係數大多在 -3 和 3 之間。對於 alpha=1 的 ridge 模型,係數要稍大一點。對於 alpha=0.1,

# 點的範圍更大。對於沒有做正則化的線性回歸(即 alpha=0),點的範圍很大,許多點都超

# 出了影象的範圍。

線性回歸的改進 嶺回歸

嶺回歸,其實也是一種線性回歸。只不過在演算法建立回歸方程時候,加上正則化的限制,從而達到解決過擬合的效果。normalize 資料是否進行標準化 ridge.coef 回歸權重 ridge.intercept 回歸偏置 ridge方法相當於sgdregressor penalty l2 loss s...

線性回歸的改進 嶺回歸

嶺回歸,其實也是一種線性回歸。只不過在演算法建立回歸方程時候,加上正則化的限制,從而達到解決過擬合的效果 solver 會根據資料自動選擇優化方法 normalize 資料是否進行標準化 ridge.coef 回歸權重 ridge.intercept 回歸偏置 all last four solve...

Python 線性回歸模型

從線性回歸 linear regression 開始學習回歸分析,線性回歸是最早的也是最基本的模型 把資料擬合成一條直線。資料集使用scikit learn裡的資料集boston,boston資料集很適合用來演示線性回歸。boston資料集包含了波士頓地區的房屋 中位數。還有一些可能會影響房價的因素...