1. 程式人生 > >機器學習之路: python線性回歸 過擬合 L1與L2正則化

機器學習之路: python線性回歸 過擬合 L1與L2正則化

擬合 python sco bsp orm AS score 未知數 spa

git:https://github.com/linyi0604/MachineLearning

正則化:
提高模型在未知數據上的泛化能力
避免參數過擬合
正則化常用的方法:
在目標函數上增加對參數的懲罰項
削減某一參數對結果的影響力度

L1正則化:lasso
在線性回歸的目標函數後面加上L1範數向量懲罰項。

f = w * x^n + b + k * ||w||1

x為輸入的樣本特征
w為學習到的每個特征的參數
n為次數
b為偏置、截距
||w||1 為 特征參數的L1範數,作為懲罰向量
k 為懲罰的力度

L2範數正則化:ridge
在線性回歸的目標函數後面加上L2範數向量懲罰項。

f = w * x^n + b + k * ||w||2

x為輸入的樣本特征
w為學習到的每個特征的參數
n為次數
b為偏置、截距
||w||2 為 特征參數的L2範數,作為懲罰向量
k 為懲罰的力度


下面模擬 根據蛋糕的直徑大小 預測蛋糕價格
采用了4次線性模型,是一個過擬合的模型
分別使用兩個正則化方法 進行學習和預測


 1 from sklearn.linear_model import LinearRegression, Lasso, Ridge
 2 # 導入多項式特征生成器
 3 from sklearn.preprocessing import PolynomialFeatures
 4 
 5 
 6 ‘‘‘
 7 正則化:
 8     提高模型在未知數據上的泛化能力
 9     避免參數過擬合
10 正則化常用的方法:
11     在目標函數上增加對參數的懲罰項
12     削減某一參數對結果的影響力度
13 
14 L1正則化:lasso
15     在線性回歸的目標函數後面加上L1範數向量懲罰項。
16 17 f = w * x^n + b + k * ||w||1 18 19 x為輸入的樣本特征 20 w為學習到的每個特征的參數 21 n為次數 22 b為偏置、截距 23 ||w||1 為 特征參數的L1範數,作為懲罰向量 24 k 為懲罰的力度 25 26 L2範數正則化:ridge 27 在線性回歸的目標函數後面加上L2範數向量懲罰項。 28 29 f = w * x^n + b + k * ||w||2 30 31 x為輸入的樣本特征 32 w為學習到的每個特征的參數
33 n為次數 34 b為偏置、截距 35 ||w||2 為 特征參數的L2範數,作為懲罰向量 36 k 為懲罰的力度 37 38 39 下面模擬 根據蛋糕的直徑大小 預測蛋糕價格 40 采用了4次線性模型,是一個過擬合的模型 41 分別使用兩個正則化方法 進行學習和預測 42 43 ‘‘‘ 44 45 # 樣本的訓練數據,特征和目標值 46 x_train = [[6], [8], [10], [14], [18]] 47 y_train = [[7], [9], [13], [17.5], [18]] 48 # 準備測試數據 49 x_test = [[6], [8], [11], [16]] 50 y_test = [[8], [12], [15], [18]] 51 # 進行四次線性回歸模型擬合 52 poly4 = PolynomialFeatures(degree=4) # 4次多項式特征生成器 53 x_train_poly4 = poly4.fit_transform(x_train) 54 # 建立模型預測 55 regressor_poly4 = LinearRegression() 56 regressor_poly4.fit(x_train_poly4, y_train) 57 x_test_poly4 = poly4.transform(x_test) 58 print("四次線性模型預測得分:", regressor_poly4.score(x_test_poly4, y_test)) # 0.8095880795746723 59 60 # 采用L1範數正則化線性模型進行學習和預測 61 lasso_poly4 = Lasso() 62 lasso_poly4.fit(x_train_poly4, y_train) 63 print("L1正則化的預測得分為:", lasso_poly4.score(x_test_poly4, y_test)) # 0.8388926873604382 64 65 # 采用L2範數正則化線性模型進行學習和預測 66 ridge_poly4 = Ridge() 67 ridge_poly4.fit(x_train_poly4, y_train) 68 print("L2正則化的預測得分為:", ridge_poly4.score(x_test_poly4, y_test)) # 0.8374201759366456

通過比較 經過正則化的模型 泛化能力明顯的更好啦

機器學習之路: python線性回歸 過擬合 L1與L2正則化