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