標籤:sso 比較 proc nsf 大小 rom print 迴歸 函數
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正則化:lasso15 線上性迴歸的目標函數後面加上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範數正則化:ridge27 線上性迴歸的目標函數後面加上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.809588079574672359 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.838892687360438264 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正則化