嶺回歸也是一種用於回歸的線性模型,因此它的**公式與普通最小二乘法相同。
但在嶺 # 回歸中,對係數(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資料集包含了波士頓地區的房屋 中位數。還有一些可能會影響房價的因素...