日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例

發(fā)布時(shí)間:2023/12/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn 中的线性回归、岭回归、Lasso回归参数配置及示例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 線性回歸
    • 引入
    • 重要參數(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)參方法:

  • 給定alpha較小的值,例如0.1。
  • 根據(jù)驗(yàn)證集準(zhǔn)確率以10倍為單位增大或者減小參數(shù)值。
  • 在找到合適的數(shù)量級(jí)后,在此數(shù)量級(jí)上微調(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的算法有:

  • ‘svd’,采?用奇異值分解的?方法來(lái)計(jì)算
  • ‘cholesky’,采?用scipy.linalg.solve函數(shù)求得閉式解。
  • ‘sparse_cg’,采?用scipy.sparse.linalg.cg函數(shù)來(lái)求取最優(yōu)解。
  • ‘lsqr’,使用scipy.sparse.linalg.lsqr 求解,它是最快的。
  • ‘sag’,使用隨機(jī)平均梯度下降,當(dāng)n_samples和n_features都較大時(shí),通常比其他求解器更快。
  • 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)參方法:

  • 給定alpha較小的值,例如0.1。
  • 根據(jù)驗(yàn)證集準(zhǔn)確率以10倍為單位增大或者減小參數(shù)值。
  • 在找到合適的數(shù)量級(jí)后,在此數(shù)量級(jí)上微調(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。