嶺回歸
解決線性回歸參數β可能出現的不合理的情況,當出現自變量的數量多余樣本數的數量或自變量之間存在多重共線性的情況時回歸系數無法按照模型公式來計算估計值實現思路就是在原來線性回歸的基礎之上加一個l2懲罰項(正則項)
交叉驗證
讓所有的數據都參與模型的構建和模型的測試(10重交叉驗證)100樣本量拆封成10組,選取一組數據,剩下的九組數據建立模型可得該組合的模型及其檢驗值,如此可循環十次,便可以獲得十個模型及其檢驗值,選取最優模型及檢驗值,稱之為十重交叉驗證。
嶺回歸交叉驗證法
RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, normalize=False,
scoring=None, cv=None)
alphas:⽤於指定多個lambda值的元組或數組對象,默認該參數包含0.1、1和10三種值。
fit_intercept:bool類型參數,是否需要擬合截距項,默認為True。
normalize:bool類型參數,建模時是否需要對數據集做標准化處理,默認為False。
scoring:指定⽤於評估模型的度量⽅法。
cv:指定交叉驗證的重數。
嶺回歸模型運用
# 構造不同的Lambda值
Lambdas=np.logspace(-5,2,200) # 從-5到2之間生存200個等差數列
# 設置交叉驗證的參數,對於每⼀個Lambda值,都執⾏10重交叉驗證
ridge_cv=RidgeCV(alphas=Lambdas,normalize=True,
scoring=‘neg_mean_squared_error',
cv=10)
# 模型擬合
ridge_cv.fit(X_train,y_train)
# 返回最佳的lambda值
ridge_best_Lambda=ridge_cv.alpha_
ridge_best_Lambda
# 基於最佳的Lambda值建模
ridge = Ridge(alpha = ridge_best_alpha, normalize=True)
ridge.fit(X_train, y_train)
# 返回嶺回歸系數
pd.Series(index = ['Intercept'] + X_train.columns.tolist(),
data = [ridge.intercept_] + ridge.coef_.tolist())
Lasso回歸
相對於嶺回歸,雖然嶺回歸確保了線性回歸的估計值但是無法減低模型的復雜程度,所以出現了Lasso回歸,l1懲罰項
Lasso回歸交叉驗證法
LassoCV(alphas=None, fit_intercept=True,
normalize=False,max_iter=1000, tol=0.0001)
alphas:指定具體的Lambda值列表⽤於模型的運算
fit_intercept:bool類型參數,是否需要擬合截距項,默認為True
normalize:bool類型參數,建模時是否需要對數據集做標准化處理,默認為False
max_iter:指定模型最⼤的迭代次數,默認為1000次
LASSO回歸模型的交叉驗證
lasso_cv=LassoCV(alphas=Lambdas,normalize=True,cv=10,max_iter=10000)
lasso_cv.fit(X_train,y_train)
# 輸出最佳的lambda值
lasso_best_alpha=lasso_cv.alpha_
lasso_best_alpha
# 基於最佳的lambda值建模
lasso = Lasso(alpha = lasso_best_alpha, normalize=True, max_iter=10000)
# 對“類”加以數據實體,執⾏回歸系數的運算
lasso.fit(X_train, y_train)
# 返回LASSO回歸的系數
pd.Series(index = ['Intercept'] + X_train.columns.tolist(),
data = [lasso.intercept_] + lasso.coef_.tolist())