sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例
文章目錄
- 線性回歸
- 引入
- 重要參數
- 重要屬性
- 重要方法
- 例子
- 嶺回歸
- 引入
- 重要參數
- 重要屬性
- 重要方法
- 示例
- Lasso 回歸
- 引入
- 重要參數
- 重要屬性
- 重要方法
- 示例
本文主要講一些sklearn中回歸模型的使用,如果需要了解相關理論,請查閱: 【線性回歸】面向新手的基礎知識
線性回歸
引入
from sklearn.linear_model import LinearRegression # 默認參數如下: LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1)重要參數
1,fit_intercept
bool類型,默認為True,表示是否計算截距(即 y = wx + b 中的 b ),推薦設置為True。
2,normalize
bool類型,默認為False,表示是否對各個特征進行標準化(默認方法是:減去均值并除以 l2l_2l2? 范數),推薦設置為True。如果設置為False,則建議在輸入模型之前,手動進行標準化。
標準化的好處:
加速收斂
提升精度
注意:fit_intercept 設置為 False 時,將忽略此參數。
3,n_jobs
數值型,默認值為None。表示使用多少個處理器進行運算,當模型有多個回歸目標( _targets > 1 )時,加速效果比較明顯。推薦設置為 -1 ,此時會調用所有處理器。
重要屬性
1,coef_
對應 X 各個特征的系數,絕對值越接近1,表示相關性越強。
2,intercept_
intercept_ 表示模型學習到的截距值。
注意:屬性后面有下劃線 _
重要方法
1,fit(X, y) ,訓練模型
2,predict(X),使用模型進行預測
3,score(X, y),返回 R2R^2R2 值 (確定系數) ,越接近1說明擬合的效果越好。
例子
import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model from sklearn.metrics import mean_squared_error, r2_score# 載入糖尿病數據集 diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# 只從中抽取一個特征 diabetes_X = diabetes_X[:, np.newaxis, 2]# 劃分訓練集與測試集 diabetes_X_train = diabetes_X[:-20] diabetes_y_train = diabetes_y[:-20] diabetes_X_test = diabetes_X[-20:] diabetes_y_test = diabetes_y[-20:]# 線性回歸模型 regr = linear_model.LinearRegression(fit_intercept=True, normalize=True, n_jobs=-1) regr.fit(diabetes_X_train, diabetes_y_train) diabetes_y_pred = regr.predict(diabetes_X_test) print('系數: \n', regr.coef_)# 結果評估 print('均方誤差: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred)) print('確定系數(R^2): %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))# 繪圖 plt.scatter(diabetes_X_test, diabetes_y_test, color='black') plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3) plt.show()輸出結果:
系數:
[938.23786125]
均方誤差: 2548.07
確定系數(R^2): 0.47
嶺回歸
引入
# 加?L2正則化的線性回歸 from sklearn.linear_model import Ridge # 默認參數如下: Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, \tol=0.001, solver='auto', random_state=None)重要參數
1,alpha
正則項系數,初始值為1,數值越大,則對復雜模型的懲罰力度越大。
調參方法:
合適的候選值:[0.001, 0.01, 0.1, 1, 10, 100]
2,fit_intercept
bool類型,默認為True,表示是否計算截距(即 y = wx + b 中的 b ),推薦設置為True。
3,normalize
bool類型,默認為False,表示是否對各個特征進行標準化(默認方法是:減去均值并除以 l2l_2l2? 范數),推薦設置為True。如果設置為False,則建議在輸入模型之前,手動進行標準化。
標準化的好處:
加速收斂
提升精度
注意:fit_intercept 設置為 False 時,將忽略此參數。
4,solver
求解優化問題的算法,推薦保持默認值’auto’,可以根據數據類型選擇最合適的算法。可選的算法有:
5,max_iter
數值型,部分求解器需要通過迭代實現,這個參數指定了模型優化的最大迭代次數,推薦保持默認值None。
6,random_state
隨機數種子,推薦設置一個任意整數,例如0,2020等,好處是模型可以復現。
7,n_jobs
數值型,默認值為None。表示使用多少個處理器進行運算,當模型有多個回歸目標( _targets > 1 )時,加速效果比較明顯。推薦設置為 -1 ,此時會調用所有處理器。
重要屬性
1,coef_
對應 X 各個特征的系數,絕對值越接近1,表示相關性越強。
2,intercept_
intercept_ 表示模型學習到的截距值。
注意:屬性后面有下劃線 _
重要方法
1,fit(X, y) ,訓練模型
2,predict(X),使用模型進行預測
3,score(X, y),返回 R2R^2R2 值 (確定系數) ,越接近1說明擬合的效果越好。
示例
import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model from sklearn.metrics import mean_squared_error, r2_score# 載入糖尿病數據集 diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# 劃分訓練集與測試集 diabetes_X_train = diabetes_X[:-20] diabetes_y_train = diabetes_y[:-20] diabetes_X_test = diabetes_X[-20:] diabetes_y_test = diabetes_y[-20:]# 嶺回歸模型 regr = linear_model.Ridge(alpha=0.001, fit_intercept=True, normalize=True, random_state=0) regr.fit(diabetes_X_train, diabetes_y_train) diabetes_y_pred = regr.predict(diabetes_X_test) print('系數: \n', regr.coef_)# 結果評估 print('均方誤差: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred)) print('確定系數(R^2): %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))輸出:
系數:
[ 0.79171416 -236.95051097 511.18477367 327.22355517 -734.56024578
429.87194777 67.40320158 174.60152289 713.22832241 76.6722493 ]
均方誤差: 2003.26
確定系數(R^2): 0.59
Lasso 回歸
引入
from sklearn.linear_model import Lasso Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000,tol=1e-4, warm_start=False, positive=False,random_state=None,selection='cyclic')重要參數
1,alpha
正則項系數,初始值為1,數值越大,則對復雜模型的懲罰力度越大。
調參方法:
合適的候選值:[0.001, 0.01, 0.1, 1, 10, 100]
2,fit_intercept
bool類型,默認為True,表示是否計算截距(即 y = wx + b 中的 b ),推薦設置為True。
3,normalize
bool類型,默認為False,表示是否對各個特征進行標準化(默認方法是:減去均值并除以 l2l_2l2? 范數),推薦設置為True。如果設置為False,則建議在輸入模型之前,手動進行標準化。
標準化的好處:
加速收斂
提升精度
注意:fit_intercept 設置為 False 時,將忽略此參數。
4,precompute
bool 類型,默認值為False,決定是否提前計算Gram矩陣來加速計算。
5,max_iter
數值型,部分求解器需要通過迭代實現,這個參數指定了模型優化的最大迭代次數,推薦保持默認值None。
6,warm_start
bool類型,默認值為False。如果為True,那么使?用前?次訓練結果繼續訓練。否則從頭開始訓練。
7,positive
bool類型,默認值為False。如果為True,那么強制要求權重向量的分量都為正數。
9,selection
字符串,默認值為"cyclic"。它指定了了當每輪迭代的時候,選擇權重向量的哪個分量來更新:
(1) “random”: 更新的時候,隨機選擇權重向量的?個分量來更更新。
(2) “cyclic”: 更新的時候,從前向后依次選擇權重向量的?個分量來更新。
10,random_state
隨機數種子,推薦設置一個任意整數,例如0,2020等,好處是模型可以復現。
11,n_jobs
數值型,默認值為None。表示使用多少個處理器進行運算,當模型有多個回歸目標( _targets > 1 )時,加速效果比較明顯。推薦設置為 -1 ,此時會調用所有處理器。
重要屬性
1,coef_
對應 X 各個特征的系數,絕對值越接近1,表示相關性越強。
2,intercept_
intercept_ 表示模型學習到的截距值。
注意:屬性后面有下劃線 _
重要方法
1,fit(X, y) ,訓練模型
2,predict(X),使用模型進行預測
3,score(X, y),返回 R2R^2R2 值 (確定系數) ,越接近1說明擬合的效果越好。
示例
import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model from sklearn.metrics import mean_squared_error, r2_score# 載入糖尿病數據集 diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)# 劃分訓練集與測試集 diabetes_X_train = diabetes_X[:-20] diabetes_y_train = diabetes_y[:-20] diabetes_X_test = diabetes_X[-20:] diabetes_y_test = diabetes_y[-20:]# LASSO回歸模型 regr = linear_model.Lasso(alpha=0.08, fit_intercept=True, normalize=True, \precompute=False, copy_X=True, max_iter=1000,tol=1e-4, \warm_start=False, positive=False, random_state=None,\selection='cyclic') regr.fit(diabetes_X_train, diabetes_y_train) diabetes_y_pred = regr.predict(diabetes_X_test) print('系數: \n', regr.coef_)# 結果評估 print('均方誤差: %.2f'% mean_squared_error(diabetes_y_test, diabetes_y_pred)) print('確定系數(R^2): %.2f'% r2_score(diabetes_y_test, diabetes_y_pred))輸出:
系數:
[ 0. -170.70972431 510.82478065 290.22047462 -71.2270991
-0. -226.56455408 0. 480.30488212 54.40099876]
均方誤差: 2004.60
確定系數(R^2): 0.59
可以看到有些系數為0,這也說明Lasso回歸具有特征選擇的作用。
參考文章:
sklearn.linear_model.LinearRegression
sklearn.linear_model.Ridge
sklearn.linear_model.Lasso
sklearn常用機器學習算法參數詳解
總結
以上是生活随笔為你收集整理的sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔兽世界怀旧服WLK卡拉赞黯血王子在哪里
- 下一篇: sklearn 决策树(分类树、回归树)