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


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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM