機器學習「傻瓜式」理解(11)模型泛化

2021-10-03 17:32:21 字數 3944 閱讀 4466

上一節我們了解到,我們在機器學習領域要解決的主要問題便是高方差的問題,主要的解決的辦法便是模型泛化,其功能的概括來說便是通過限制超引數的大小,來解決過擬合或者模型含有巨大的方差誤差這樣的問題。

嶺回歸也是模型正則化一種方式,通過加入模型正則化的方式來更好的解決模型過擬合的線性的產生。

根數數學的常識,我們擬合住的模型的上下抖動的幅度主要受引數的影響,因此以多項式回歸為例,我們加入的模型正則化正好可以平衡這一部分。

加入的模型正則化為:

解釋:上面的阿爾法其實便是我們引入的超引數,主要的作用就是用來平衡新的目標損失函式的大小。如果阿爾法等於0,那麼就相當於我們沒有引入模型正則化,但是如果阿爾法等於無窮,相應地,為了平衡損失函式的大小,我們需要進行使得我們的theta的平方盡可能的小才可以。

例項檢視

模擬資料集進行檢視:

import numpy as np

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

np.random.seed(

666)

x = np.random.uniform(-3

,3,size =

100)

x = x.reshape(-1

,1)y =

0.5* x +3.

+ np.random.normal(0,

1, size=

100)

x_train,x_test,y_train,y_test = train_test_split(x,y)

plt.scatter(x,y)

plt.show(

)

散點圖顯示:

使用嶺回歸以及多項式管道進行調參,來檢視模型的泛化能力。

首先封裝乙個擬合住的模型曲線:

# 繪製模型曲線

defplot_curve

(model)

: x_plot = np.linspace(-3

,3,100

).reshape(-1

,1) y_plot = model.predict(x_plot)

plt.scatter(x,y)

plt.plot(x_plot[:,

0],y_plot,color=

'r')

plt.axis([-

3,3,

0,6]

) plt.show(

)

使用管道的方式

from sklearn.pipeline import pipeline

from sklearn.preprocessing import polynomialfeatures

from sklearn.preprocessing import standardscaler

from sklearn.linear_model import ridge

defridgeregression

(degree,alpha)

:return pipeline([(

'poly'

,polynomialfeatures(degree=degree)),

('std'

,standardscaler())

,('ridge'

,ridge(alpha=alpha))]

)

分情況討論:degree=20,a = 0.0001

ridge1_reg = ridgeregression(20,

0.0001

)ridge1_reg.fit(x_train, y_train)

y1_predict = ridge1_reg.predict(x_test)

mean_squared_error(y_test, y1_predict)

# 輸出:1.323349275406402(均方誤差)

# 輸出:1.1888759304218448(均方誤差)

分情況討論:degree=20、alpha=1000000(相當於無窮大)

ridge4_reg = ridgeregression(20,

1000000

)ridge4_reg.fit(x_train, y_train)

y4_predict = ridge4_reg.predict(x_test)

mean_squared_error(y_test, y4_predict)

# 輸出:1.8404103153255003

通過上圖可以看出,當阿爾法無限大的時候,只有後面的模型正則化在起著作用,因為為了平衡,theta必須無限接近於0lasso回歸與嶺回歸相同,其主要的目的是主要是解決模型的過擬合問題或者模型含有巨大的方差的問題。

對於lasso回歸的實現原理,與嶺回歸實現的原理相同,只不過特殊點在於新增的代數式不同。

後續的實驗與前面的嶺回歸實現的步驟相同,只需要將ridge處修改為lasso.並且超引數還是degree和alpha。

lasso的特點:趨向於使得一部分theta的值變為0,也就是說lasso認為theta等於0的特徵是完全沒有用的,因此我們可以使用lasso做特徵選擇用,但是有些時候也會導致不準確,如果我們想要追求準確程度,ridge回歸更合適。

由上面所講的,兩種回歸的方式都用於解決模型的過擬合或者模型過度複雜的問題,但是通過下面的,我們可以知道很多東西背後的數學原理都是想通的。

因此,我們變引出了兩種正則:

但是兩種正則項互有利弊,於是彈性網路提出,它綜合了兩種正則項。

r是新新增的乙個超引數,用來平衡兩個正則項之間的比例。

機器學習「傻瓜式」理解(15)SVM(2)

實際的生產活動中我們遇到的資料大多數不能進行嚴格的區分的,為了解決這種問題,目前為止我們可以通過兩種方式來解決 直接利用多項式項進行解決。利用核心函式 scikit已經封裝好的 下面我們將通過 的方式進行驗證。1.新增多項式項 import numpy as np import matplotlib...

機器學習 模型泛化(LASSO 回歸)

一 基礎理解 二 lasso 回歸 1 對於嶺回歸 2 對於 lasso 回歸1 模擬資料集 2 使用多項式回歸擬合資料 3 使用 lasso regression 改進演算法模型 4 分析 正則化的程度 擬合曲線的上下抖動幅度 1 使用 ridge 改進的多項式回歸演算法,隨著 的改變,擬合曲線始...

機器學習「傻瓜式」理解(7)梯度下降法(第二部分)

事實上,我們在實際的生產活動中,最經常使用的便是小批量梯度下降法,這種方法綜合了隨機梯度下降法和批量梯度下降法兩種演算法,一定程度上避免了他們的缺點,這種演算法實現的思路便是每次計算優化的方向既不是檢視所有的樣本也不是檢視單一的樣本,而是每次抽取k個樣本,把這k個樣本的梯度作為優化方向。這樣有兩個優...