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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习接口代码之 Ridge、Lasso、Elasitc Net

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习接口代码之 Ridge、Lasso、Elasitc Net 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

Ridge Regression (嶺回歸)

Lasso Regression

Elasitc Net(彈性網絡)

案例:葡萄酒質量預測


官網地址https://scikit-learn.org/stable/modules/linear_model.html

Ridge Regression (嶺回歸)

API

class?sklearn.linear_model.Ridge(alpha=1.0,?fit_intercept=True,?normalize=False,?copy_X=True,?max_iter=None,?tol=0.001,?solver=’auto’,?random_state=None) 嶺回歸是一種正則化方法,通過在損失函數中加入L2范數懲罰系項,來控制線性模型的復雜程度,從而使模型更加穩健。參數alpha:{float,array-like},shape(n_targets)正則化參數α項,其值越大正則化項越大。其必須是正浮點數。 正則化改善了問題的條件并減少了估計的方差。Alpha對應于其他線性模型(如Logistic回歸或LinearSVC)中的C^-1。 如果傳遞數組,則假定懲罰被特定于目標。 因此,它們必須在數量上對應。fit_intercept:boolean是否計算此模型的截距,即b值。如果為False,則不計算b值(模型會假設你的數據已經中心化)copy_X:boolean,可選,默認為True如果為True,將復制X; 否則,它可能被覆蓋。max_iter:int,可選共軛梯度求解器的最大迭代次數。如果為None,則為默認值(不同silver的默認值不同) 對于'sparse_cg'和'lsqr'求解器,默認值由scipy.sparse.linalg確定。 對于'sag'求解器,默認值為1000。normalize:boolean,可選,默認為False如果為真,則回歸X將在回歸之前被歸一化。 當fit_intercept設置為False時,將忽略此參數。 當回歸量歸一化時,注意到這使得超參數學習更加魯棒,并且幾乎不依賴于樣本的數量。 相同的屬性對標準化數據無效。 然而,如果你想標準化,請在調用normalize = False訓練估計器之前,使用preprocessing.StandardScaler處理數據。solver:{'auto','svd','cholesky','lsqr','sparse_cg','sag'}指定求解最優化問題的算法:'auto':根據數據類型自動選擇求解器。'svd':使用X的奇異值分解來計算Ridge系數。對于奇異矩陣比'cholesky'更穩定。'cholesky':使用標準的scipy.linalg.solve函數來獲得閉合形式的解。'sparse_cg':使用在scipy.sparse.linalg.cg中找到的共軛梯度求解器。作為迭代算法,這個求解器比大規模數據(設置tol和max_iter的可能性)的“cholesky”更合適。'lsqr':使用專用的正則化最小二乘常數scipy.sparse.linalg.lsqr。它是最快的,但可能不是在舊的scipy版本可用。它還使用迭代過程。'sag':使用隨機平均梯度下降。它也使用迭代過程,并且當n_samples和n_feature都很大時,通常比其他求解器更快。注意,“sag”快速收斂僅在具有近似相同尺度的特征上被保證。您可以使用sklearn.preprocessing的縮放器預處理數據。所有最后四個求解器支持密集和稀疏數據。但是,當fit_intercept為True時,只有'sag'支持稀疏輸入。新版本0.17支持:隨機平均梯度下降解算器。tol:float。解的精度,制定判斷迭代收斂與否的閾值。random_state:int seed,RandomState實例或None(默認)僅用于'sag'求解器。如果為整數,則它指定了隨機數生成器的種子。如果為RandomState實例,則指定了隨機數生成器。如果為None,則使用默認的隨機數生成器。?新版本0.17:random_state支持隨機平均漸變。屬性coef_:array,shape(n_features,)或(n_targets,n_features)權重向量。intercept_:float | array,shape =(n_targets,)決策函數的獨立項,即截距b值。 如果fit_intercept = False,則設置為0.0。n_iter_:array或None,shape(n_targets,)每個目標的實際迭代次數。 僅適用于sag和lsqr求解器。 其他求解器將返回None。在版本0.17中出現。

方法

fit(X,y [,sample_weight]):訓練模型。

get_params([deep]):獲取此估計器的參數。

predict(X):使用線性模型進行預測,返回預測值。

score(X,y [,sample_weight]):返回預測性能的得分,不大于1,越大效果越好。

set_params(** params)設置此估計器的參數。

Lasso Regression

API

class sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic'屬性:alpha:float, optional。正則項參數。常數。默認值1.0。alpha=0時轉化為最小二乘估計,由線性回歸模型求解。使用Lasso模型時,通常令alpha≠0。fit_intercept:boolean, optional, default True。是否計算截距。如果為False,對數據進行去中心化處理。normalize:boolean, optional, default False。當fit_intercept=False時,該參數忽略。如果為normalize=True,使用回歸模型之前先對回歸數據X進行去均值和除以l2范數的處理。如果要對數據X進行標準化,令normalize=False,并在調用fit方法之前,使用sklearn.preprocessing.StandardScaler進行標準化。precompute:True | False | array-like, default=False是否使用事先計算好的Gram矩陣來加速模型計算。如果precompute='auto',讓程序自動決定。Gram矩陣可以作為參數被傳遞。對于稀疏數據,通常令precompute=True,保留稀疏性。copy_X:boolean, optional, default True如果copy_X=True,復制X;如果copy_X=False,覆蓋上次運行的X。max_iter:int, optional最大迭代次數。tol:float, optional優化容忍度:如果更新大于tol,繼續優化,直到小于tol。warm_start:bool, optional如果warm_start=True,使用上次的解作為初始化;如果warm_start=False,清除之前的解。positive:bool, optional如果positive=True,強制將系數設為正數。random_state:int, RandomState instance or None, optional, default None偽隨機數發生器種子,隨機選擇特征來更新模型。如果為int,random_state即為隨機數發生器使用的種子;如果為RandomState實例,random_state即為隨機數發生器;如果為None,隨機數發生器為np.random使用的隨機數發生器實例。該參數僅當selection=‘random’時使用。selection:str, default ‘cyclic’如果為‘random’,每次迭代都會更新隨機系數,而不是按順序遍歷每個特征。該參數值可以使得算法更快收斂,尤其當tol>1e-4時。坐標軸下降法的下降形式屬性(Attributes)coef_:array, shape (n_features,) | (n_targets, n_features)系數向量。目標函數中的w。sparse_coef_:scipy.sparse matrix, shape (n_features, 1) | (n_targets, n_features)求解的coef_的稀疏表示。intercept_:float | array, shape (n_targets,)決策函數的依賴項。n_iter_:int | array-like, shape (n_targets,)坐標下降法求解達到容忍度時的迭代次數。

方法

fit(X,y,sample_weight=None):X:numpy array或稀疏矩陣,shape(n_samples,n_features)。訓練數據y:numpy array,shape(n_samples,n_targets),對應的目標值sample_weight:numpy array,shape(n_samples),每個樣本單獨的權值。返回一個訓練好的線性模型。get_params(deep=True):獲取模型的參數,返回一個string到任意可能值的映射predict(X):對給定的數據X進行預測X:arrat-like對象或稀疏矩陣。shape(n_samples,n_features)。待測樣本返回:array,shape(n_samples,),對輸入的預測結果score(X,y,sample_weight=None):計算對于X,y的R^2值。R^2=1-u/v. u= ((y_true - y_pred) ** 2).sum() ,v=((y_true - y_true.mean()) ** 2).sum()X:測試樣例,array-like對象,shape(n_samples,n_features)y:X的真實目標值,array-like對象,shape(n_samples,)或者(n_samples, n_outputs)sample_weight:array-like對象,shape(n_samples,),樣本的獨立權值。返回對應的R^2值,floatset_params(**params):設置參數。

Elasitc Net(彈性網絡)

class sklearn.linear_model.ElasticNet(alpha=1.0, l1_ratio=0.5, fit_intercept=True, normalize=False, precompute=False, max_iter=1000, copy_X=True, tol=0.0001, warm_start=False, positive=False, random_state=None, selection=’cyclic’)參數:alpha :?alpha:正則化項中alpha值。l1_ratio:ρ值,ElasticNet混合參數,其中0 <= l1_ratio <= 1。對于l1_ratio = 0,懲罰為L2范數。 對于l1_ratio = 1,為L1范數。 對于0?<l1_ratio<1,懲罰是L1和L2的組合。fit_intercept:一個布爾值,制定是否需要b值。max_iter:一個整數,指定最大迭代數。normalize:一個布爾值。如果為True,那么訓練樣本會在回歸之前會被歸一化。copy_X:一個布爾值。如果為True,會復制X,否則會覆蓋X。precompute:一個布爾值或者一個序列。它決定是否提前計算Gram矩陣來加速計算。Gram也可以傳遞參數,?對于稀疏輸入,此選項始終為“True”以保留稀疏性。tol:一個浮點數,指定判斷迭代收斂與否的一個閾值。warm_start:一個布爾值。如果為True,那么使用前一次訓練結果繼續訓練,否則從頭開始訓練。positive:一個布爾值。如果為True,那么強制要求權重向量的分量都為整數。selection:一個字符串,可以選擇‘cyclic’或者‘random’。它指定了當每輪迭代的時候,選擇權重向量的哪個分量來更新。‘ramdom’:更新的時候,隨機選擇權重向量的一個分量來更新。‘cyclic’:更新的時候,從前向后一次選擇權重向量的一個分量來更新。random_state:一個整數或者一個RandomState實例,或者None。 如果為整數,則它指定了隨機數生成器的種子。如果為RandomState實例,則指定了隨機數生成器。如果為None,則使用默認的隨機數生成器。?屬性:coef_:權重向量。intercept:b值。n_iter_:實際迭代次數。

方法

fix(X,y[,sample_weight]):訓練模型。 predict(X):用模型進行預測,返回預測值。 score(X,y[,sample_weight]):返回預測性能的得分,不大于1,越大效果越好。 get_params([deep]):獲取此估計器的參數。 set_params(** params):設置此估計器的參數。

案例:葡萄酒質量預測

import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import pandas as pd import warnings import sklearn from sklearn.linear_model import LinearRegression, LassoCV, RidgeCV, ElasticNetCV from sklearn.preprocessing import PolynomialFeatures # 數據預處理,標準化 from sklearn.pipeline import Pipeline from sklearn.linear_model.coordinate_descent import ConvergenceWarning# 設置字符集,防止中文亂碼 mpl.rcParams['font.sans-serif'] = [u'simHei'] mpl.rcParams['axes.unicode_minus'] = False # 攔截異常,不顯示異常 warnings.filterwarnings(action='ignore', category=ConvergenceWarning)# 創建模擬數據 np.random.seed(100) np.set_printoptions(linewidth=1000, suppress=True) # 顯示方式設置,每行的字符數用于插入換行符,是否使用科學計數法 N = 10 x = np.linspace(0, 6, N) + np.random.randn(N) y = 1.8 * x ** 3 + x ** 2 - 14 * x - 7 + np.random.randn(N) # 將其設置為矩陣 x.shape = -1, 1 y.shape = -1, 1# RidgeCV和Ridge的區別是:前者可以進行交叉驗證 models = [Pipeline([('Poly', PolynomialFeatures(include_bias=False)),('Linear', LinearRegression(fit_intercept=False))]),Pipeline([('Poly', PolynomialFeatures(include_bias=False)),# alpha給定的是Ridge算法中,L2正則項的權重值,也就是ppt中的蘭姆達# alphas是給定CV交叉驗證過程中,Ridge算法的alpha參數值的取值的范圍('Linear', RidgeCV(alphas=np.logspace(-3, 2, 50), fit_intercept=False))]),Pipeline([('Poly', PolynomialFeatures(include_bias=False)),('Linear', LassoCV(alphas=np.logspace(0, 1, 10), fit_intercept=False))]),Pipeline([('Poly', PolynomialFeatures(include_bias=False)),# la_ratio:給定EN算法中L1正則項在整個懲罰項中的比例,這里給定的是一個列表;# 表示的是在CV交叉驗證的過程中,EN算法L1正則項的權重比例的可選值的范圍('Linear', ElasticNetCV(alphas=np.logspace(0, 1, 10), l1_ratio=[.1, .5, .7, .9, .95, 1], fit_intercept=False))]) ]# 線性模型過擬合圖形識別 plt.figure(facecolor='w') degree = np.arange(1, N, 4) # 階 dm = degree.size colors = [] # 顏色 for c in np.linspace(16711680, 255, dm):colors.append('#%06x' % int(c))model = models[0] for i, d in enumerate(degree):plt.subplot(int(np.ceil(dm / 2.0)), 2, i + 1)plt.plot(x, y, 'ro', ms=10, zorder=N)# 設置階數model.set_params(Poly__degree=d)# 模型訓練model.fit(x, y.ravel())lin = model.get_params('Linear')['Linear']output = u'%d階,系數為:' % (d)# 判斷lin對象中是否有對應的屬性if hasattr(lin, 'alpha_'):idx = output.find(u'系數')output = output[:idx] + (u'alpha=%.6f, ' % lin.alpha_) + output[idx:]if hasattr(lin, 'l1_ratio_'):idx = output.find(u'系數')output = output[:idx] + (u'l1_ratio=%.6f, ' % lin.l1_ratio_) + output[idx:]print(output, lin.coef_.ravel())x_hat = np.linspace(x.min(), x.max(), num=100) ## 產生模擬數據x_hat.shape = -1, 1y_hat = model.predict(x_hat)s = model.score(x, y)z = N - 1 if (d == 2) else 0label = u'%d階, 正確率=%.3f' % (d, s)plt.plot(x_hat, y_hat, color=colors[i], lw=2, alpha=0.75, label=label, zorder=z)plt.legend(loc='upper left')plt.grid(True)plt.xlabel('X', fontsize=16)plt.ylabel('Y', fontsize=16)plt.tight_layout(1, rect=(0, 0, 1, 0.95)) plt.suptitle(u'線性回歸過擬合顯示', fontsize=22) plt.show()## 線性回歸、Lasso回歸、Ridge回歸、ElasticNet比較 plt.figure(facecolor='w') degree = np.arange(1, N, 2) # 階, 多項式擴展允許給定的階數 dm = degree.size colors = [] # 顏色 for c in np.linspace(16711680, 255, dm):colors.append('#%06x' % int(c)) titles = [u'線性回歸', u'Ridge回歸', u'Lasso回歸', u'ElasticNet']for t in range(4):model = models[t] # 選擇了模型--具體的pipeline(線性、Lasso、Ridge、EN)plt.subplot(2, 2, t + 1) # 選擇具體的子圖plt.plot(x, y, 'ro', ms=10, zorder=N) # 在子圖中畫原始數據點; zorder:圖像顯示在第幾層# 遍歷不同的多項式的階,看不同階的情況下,模型的效果for i, d in enumerate(degree):# 設置階數(多項式)model.set_params(Poly__degree=d)# 模型訓練model.fit(x, y.ravel())# 獲取得到具體的算法模型# model.get_params()方法返回的其實是一個dict對象,后面的Linear其實是dict對應的key# 也是我們在定義Pipeline的時候給定的一個名稱值lin = model.get_params()['Linear']# 打印數據output = u'%s:%d階,系數為:' % (titles[t], d)# 判斷lin對象中是否有對應的屬性if hasattr(lin, 'alpha_'): # 判斷lin這個模型中是否有alpha_這個屬性idx = output.find(u'系數')output = output[:idx] + (u'alpha=%.6f, ' % lin.alpha_) + output[idx:]if hasattr(lin, 'l1_ratio_'): # 判斷lin這個模型中是否有l1_ratio_這個屬性idx = output.find(u'系數')output = output[:idx] + (u'l1_ratio=%.6f, ' % lin.l1_ratio_) + output[idx:]# line.coef_:獲取線性模型的參數列表,也就是我們ppt中的theta值,ravel()將結果轉換為1維數據print(output, lin.coef_.ravel())# 產生模擬數據x_hat = np.linspace(x.min(), x.max(), num=100) ## 產生模擬數據x_hat.shape = -1, 1# 數據預測y_hat = model.predict(x_hat)# 計算準確率s = model.score(x, y)# 當d等于5的時候,設置為N-1層,其它設置0層;將d=5的這條線凸顯出來z = N + 1 if (d == 5) else 0label = u'%d階, 正確率=%.3f' % (d, s)plt.plot(x_hat, y_hat, color=colors[i], lw=2, alpha=0.75, label=label, zorder=z)plt.legend(loc='upper left')plt.grid(True)plt.title(titles[t])plt.xlabel('X', fontsize=16)plt.ylabel('Y', fontsize=16) plt.tight_layout(1, rect=(0, 0, 1, 0.95)) plt.suptitle(u'各種不同線性回歸過擬合顯示', fontsize=22) plt.show()

?

總結

以上是生活随笔為你收集整理的机器学习接口代码之 Ridge、Lasso、Elasitc Net的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: jizz色| 最新的黄色网址 | 亚洲福利天堂 | 欧美| 久久av一区二区三 | 国产91精品久久久久久久 | 农村激情伦hxvideos | 国产草草影院 | 就爱啪啪网 | 美日韩成人av | 国产偷人妻精品一区二区在线 | 亚洲一卡二卡在线观看 | 美女被草网站 | 狠狠摸狠狠操 | 国产69久久| 国产99免费视频 | 精品人妻一区二区三区麻豆91 | 国产亚洲精品一区二区三区 | 日本成人小视频 | 午夜视频免费看 | 美女黄色免费网站 | 伊人春色在线 | 中文字幕免费视频 | 99久久婷婷国产综合精品电影 | 精品欧美一区二区三区免费观看 | 亚洲国产精品视频 | 葵司免费一区二区三区四区五区 | 玉米地疯狂的吸允她的奶视频 | 操穴影院 | 韩国美女一区二区 | 精品国产乱码久久久久久牛牛 | 精品久久久久久久久久岛国gif | 精品久久伊人 | 成人免费毛片入口 | 天天色天天色 | 男生草女生视频 | 午夜视频色| 天堂网av手机版 | 欧美天天搞 | 国产欧美在线看 | 激情五月激情综合网 | 国产成人无码久久久精品天美传媒 | 日韩在线欧美 | 国产黄色特级片 | 黄色片网站国产 | 在线免费观看一区 | 在线观看av国产一区二区 | 性欧美在线视频观看 | 美女让男生桶 | 成人第四色 | 人妻无码一区二区三区四区 | 欧美精品91| 日韩激情小视频 | 天天爽天天爽 | 中文字字幕一区二区三区四区五区 | 超碰网站在线观看 | 看毛片视频 | 国产精品1| 大肉大捧一进一出好爽 | 黄色在线观看网站 | 四虎影院永久 | av大全在线观看 | 性开放视频 | 波多野结衣a级片 | 写真福利片hd在线播放 | 美女搞黄视频网站 | ww欧美| 性开放的欧美大片 | 夜间福利在线 | 伊人情人综合 | av在线www| 精品国产黄 | 国产成人在线一区 | 欧美a在线视频 | 黑人巨大av| 爱爱视频在线看 | 黄色片免费的 | 中文字幕成人在线 | 午夜黄网 | 少妇色欲网 | 久久综合久久久 | 1000部啪啪 | 日本在线观看视频网站 | 少妇看片 | 桃谷绘里香在线播放 | 国产网站黄色 | 精品一区二区三区在线视频 | 国产福利在线看 | 亚洲福利电影 | 青青视频免费看 | 91精品国产综合久久久密臀九色 | 自拍99 | 午夜精品一区二区三 | 亚洲欧美日韩在线一区二区 | 草莓视频一区二区三区 | 国产曰肥老太婆无遮挡 | 岛国毛片在线观看 | 亚洲插插插| 欧美成人a |