LASSO回歸是對(duì)回歸算法正則化的一個(gè)例子。正則化是一種方法,它通過增加額外參數(shù)來解決過擬合問題,從而減少模型的參數(shù)、限制復(fù)雜度。正則化線性回歸最常用的三種方法是嶺回歸、最小絕對(duì)值收斂和選擇算子(LASSO)以及彈性網(wǎng)絡(luò)回歸。 在本文中,我將重點(diǎn)介紹LASSO,并且對(duì)嶺回歸和彈性網(wǎng)絡(luò)回歸做簡(jiǎn)單的擴(kuò)展。 假設(shè)我們想在一個(gè)數(shù)據(jù)集上建立一個(gè)正則化回歸模型,這個(gè)數(shù)據(jù)集包含n個(gè)觀察和m個(gè)特征。 LASSO回歸是一個(gè)L1懲罰模型,我們只需將L1范數(shù)添加到最小二乘的代價(jià)函數(shù)中: 看這里 通過增大超參數(shù)α的值,我們加強(qiáng)了模型的正則化強(qiáng)度,并降低了模型的權(quán)重。請(qǐng)注意,沒有把截距項(xiàng)w0正則化,還要注意α=0對(duì)應(yīng)于標(biāo)準(zhǔn)回歸。 通過調(diào)整正則化的強(qiáng)度,某些權(quán)重可以變?yōu)榱?,這使得LASSO方法成為一種非常強(qiáng)大的降維技巧。 LASSO算法
案例研究:使用游輪數(shù)據(jù)集預(yù)測(cè)船員人數(shù)我們將使用郵輪數(shù)據(jù)集cruise_ship_info.csv來演示LASSO技術(shù) 本案例已經(jīng)發(fā)布在實(shí)驗(yàn)平臺(tái),請(qǐng)關(guān)注微信公眾號(hào):老齊教室。并回復(fù): #姓名+手機(jī)號(hào)+案例# 獲取。 注意: # 必須要有 。 1.導(dǎo)入必要的庫(kù)import numpy as npimport pandas as pdimport matplotlib.pyplot as plt 2.讀取數(shù)據(jù)集并顯示列
3.選擇重要的變量從《數(shù)據(jù)準(zhǔn)備和特征工程》中的有關(guān)闡述可知,協(xié)方差矩陣圖可用于特征選擇和降維。從前述數(shù)據(jù)集中發(fā)現(xiàn),在6個(gè)預(yù)測(cè)特征( ['age’, 'tonnage’, 'passengers’, 'length’, 'cabins’, 'passenger_density’] )中,如果我們假設(shè)重要特征與目標(biāo)變量的相關(guān)系數(shù)為0.6或更大,那么目標(biāo)變量“crew”與4個(gè)預(yù)測(cè)變量“tonnage”, “passengers”, “l(fā)ength, and “cabins”的相關(guān)性很強(qiáng)。因此,我們能夠?qū)⑻卣骺臻g的維數(shù)從6減少到4。 cols_selected = ['Tonnage', 'passengers', 'length', 'cabins','crew']df[cols_selected].head()
4. 實(shí)現(xiàn)LASSO回歸a.將數(shù)據(jù)集分成訓(xùn)練集和測(cè)試集from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.4, random_state=0) b.特征數(shù)據(jù)區(qū)間化
c.實(shí)現(xiàn)LASSO回歸from sklearn.linear_model import Lassofrom sklearn.metrics import r2_scorealpha = np.linspace(0.01,0.4,10)r2_train =[]r2_test =[]norm = []alpha = np.linspace(0.01,0.4,10)for i in range(10): lasso = Lasso(alpha = alpha[i]) lasso.fit(X_train_std,y_train_std) y_train_std = lasso.predict(X_train_std) y_test_std = lasso.predict(X_test_std) r2_train = np.append(r2_train, r2_score(y_train,sc_y.inverse_transform(y_train_std))) r2_test = np.append(r2_test, r2_score(y_test,sc_y.inverse_transform(y_test_std))) norm = np.append(norm,np.linalg.norm(lasso.coef_)) d.可視化結(jié)果
我們觀察到,隨著正則化參數(shù)α的增加,回歸系數(shù)的范數(shù)變得越來越小。這意味著更多的回歸系數(shù)被強(qiáng)制為零,這會(huì)增加偏差(模型過度簡(jiǎn)化)。α保持較低值時(shí),比如α=0.1或更低時(shí),是偏差和方差的最佳平衡點(diǎn)。在決定使用哪種降維方法之前,應(yīng)將該方法與主成分分析法(PCA)進(jìn)行比較。 |
|