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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

监督学习 | 线性回归 之正则线性模型原理及Sklearn实现

發(fā)布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 监督学习 | 线性回归 之正则线性模型原理及Sklearn实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1. 正則線性模型
    • 1.1 Ridge Regression(L2)
      • 1.1.1 Sklearn 實(shí)現(xiàn)
      • 1.1.2 Ridge + SDG
        • 1.1.2.1 Sklearn 實(shí)現(xiàn)
    • 1.2 Lasso Regression(L1)
      • 1.2.1 Sklearn 實(shí)現(xiàn)
      • 1.2.2 Lasso + SGD
        • 1.2.2.1 Sklearn 實(shí)現(xiàn)
    • 1.3 Elastic Net(L1&L2)
      • 1.3.1 Sklearn 實(shí)現(xiàn)
    • 1.4 正則線性模型選擇
  • 參考資料

相關(guān)文章:

機(jī)器學(xué)習(xí) | 目錄

機(jī)器學(xué)習(xí) | 回歸評估指標(biāo)

機(jī)器學(xué)習(xí) | 梯度下降原理及Python實(shí)現(xiàn)

監(jiān)督學(xué)習(xí) | 線性回歸 之多元線性回歸原理及Sklearn實(shí)現(xiàn)

監(jiān)督學(xué)習(xí) | 非線性回歸 之多項(xiàng)式回歸原理及Sklearn實(shí)現(xiàn)

監(jiān)督學(xué)習(xí) | 線性分類 之Logistic回歸原理及Sklearn實(shí)現(xiàn)

1. 正則線性模型

在介紹正則線性模型(Regularized Linear Models)前,我們先來看一下一個例子,假設(shè)對于以下數(shù)據(jù),我們分別使用多元線性回歸和多項(xiàng)式回歸進(jìn)行擬合分類如下:

圖1 不同模型對數(shù)據(jù)的擬合

可以看到此時線性模型的錯誤分類點(diǎn)數(shù)為2,而多項(xiàng)式回歸模型的誤差為0,因此此時計(jì)算機(jī)將會選擇第二個模型。但是這個模型有一個缺點(diǎn),那就是過擬合了,但如何讓計(jì)算機(jī)避免過擬合呢,一個常見的方法就是對模型正則化,它擁有的自由度越低,就越不容易過度擬合。比如,將多項(xiàng)式模型正則化的簡單方法就是降低多項(xiàng)式的階數(shù)。

對線性模型來說,正則化通常通過約束模型的權(quán)重來實(shí)現(xiàn)。如剛才的例子,如果我們?yōu)槟P偷某杀竞瘮?shù)添加一個模型復(fù)雜度的話,就可以在挑選模型的時候考慮到模型的復(fù)雜度。

按照對模型復(fù)雜度的懲罰不同,我們有三種方法:嶺回歸、套索回歸和彈性網(wǎng)絡(luò),分別對應(yīng)三種正則化策略:L2 正則化、L1 正則化和 L1&L2 正則化。

p-范數(shù):如果 X=[x1,x2,..,xn]X=[x_1,x_2,..,x_n]X=[x1?,x2?,..,xn?] 那么向量 x 的 p-范數(shù)就是:∣∣x∣∣p=(∣x1∣p+∣x2∣p+?+∣xn∣p)1p||x||_p=(|x_1|^p+|x_2|^p+\cdots+|x_n|^p)^{\frac{1}{p}}xp?=(x1?p+x2?p+?+xn?p)p1? ,用得最多的還是 L1,L2L_1,L_2L1?,L2? 范數(shù):

L1L_1L1? 范數(shù):∣∣x∣∣1=(∣x1∣+∣x2∣+?+∣xn∣)||x||_1=(|x_1|+|x_2|+\cdots+|x_n|)x1?=(x1?+x2?+?+xn?) ,即絕對值之和

L2L_2L2? 范數(shù):∣∣x∣∣2=(∣x1∣2+∣x2∣2+?+∣xn∣2)12||x||_2=(|x_1|^2+|x_2|^2+\cdots+|x_n|^2)^{\frac{1}{2}}x2?=(x1?2+x2?2+?+xn?2)21? ,即通常意義上的模

1.1 Ridge Regression(L2)

嶺回歸(Ridge Regression,也叫作吉洪諾夫正則化)是線性回歸的正則化版:在成本函數(shù)中添加一個等于 α∑i=1nθi2\alpha\sum_{i=1}^n\theta_i^2αi=1n?θi2? 的正則項(xiàng)。這使得學(xué)習(xí)中的算法不僅需要擬合數(shù)據(jù),同時還要讓模型權(quán)重保持最小。

嶺回歸模型成本函數(shù):

(1)J(θ)=MSE(θ)+α12∑i=1nθi2J(\theta)=MSE(\theta)+\alpha\frac{1}{2}\sum_{i=1}^n\theta_i^2 \tag{1}J(θ)=MSE(θ)+α21?i=1n?θi2?(1)

注意,正則項(xiàng)只能在訓(xùn)練的時候添加到成本函數(shù)中,一旦訓(xùn)練完成,就需要使用未經(jīng)正則化的性能指標(biāo)來評估模型性能。

超參數(shù) α\alphaα 控制的是對模型進(jìn)行正則化的程度,如果 α=0\alpha=0α=0 ,則嶺回歸就是線性模型。如果 α\alphaα 非常大,那么所有的權(quán)重都非常接近于零,結(jié)果是一條穿過數(shù)據(jù)平均值的水平線。

注意,這里偏置項(xiàng) θ0\theta_0θ0? 沒有正則化。如果我們將 www 定義為特征權(quán)重的向量(θ1\theta_1θ1?θn\theta_nθn?),那么正則項(xiàng)即正與 12(∣∣w∣∣2)2\frac{1}{2}(||w||_2)^221?(w2?)2,其中 ∣∣w∣∣2||w||_2w2? 為權(quán)重向量的 L2L_2L2? 范數(shù)。而對于梯度下降,只需要在 MSEMSEMSE 梯度向量上添加 αw\alpha wαw 即可。

在執(zhí)行嶺回歸之前,必須對數(shù)據(jù)進(jìn)行縮放(例如使用 StandardScaler),因?yàn)樗鼘斎胩卣鞯拇笮》浅C舾小4蠖鄶?shù)正則化模型都是如此。

與線性回歸一樣,我們也可以在計(jì)算閉式方程或者執(zhí)行梯度下降時,執(zhí)行嶺回歸。

閉式解的嶺回歸:

(2)θ^=(XT?X+αA)?1?XT?y\hat{\theta}=(X^T\cdot X+\alpha A)^{-1}\cdot X^T \cdot y \tag{2}θ^=(XT?X+αA)?1?XT?y(2)

其中 AAA 是一個 n×nn \times nn×n 的單位矩陣,除了左上單元格為0,其他與偏置項(xiàng)對應(yīng)。

下面是使用不同 α\alphaα 值對某個線性數(shù)據(jù)進(jìn)行訓(xùn)練的幾種嶺回歸模型,左邊直接對線性模型使用嶺回歸(即對多元線性模型的成本函數(shù)添加模型復(fù)雜度),導(dǎo)致預(yù)測是線性的。而右邊,首先使用 PolynomialFeatures(degree=10) 對數(shù)據(jù)進(jìn)行擴(kuò)展(多項(xiàng)式回歸),然后用 StandardScaler() 進(jìn)行縮放,最后將嶺回歸模型用于結(jié)果特征:

圖2 不同 alpha 下的 嶺回歸 與 多項(xiàng)式嶺回歸

α\alphaα 使得預(yù)測更加平坦,這降低了模型的方差,但是也提升了偏差。

代碼如下:

from sklearn.linear_model import Ridge, LinearRegression from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures, StandardScaler import matplotlib.pyplot as pltnp.random.seed(42) m = 20 X = 3 * np.random.rand(m, 1) y = 1 + 0.5 * X + np.random.randn(m, 1) / 1.5 X_new = np.linspace(0, 3, 100).reshape(100, 1)def plot_model(model_class, polynomial, alphas, **model_kargs):for alpha, style in zip(alphas, ("b-", "g--", "r:")):# 嶺回歸如果alpha為0,就變成了線性回歸model = model_class(alpha, **model_kargs) if alpha > 0 else LinearRegression() # 多項(xiàng)式嶺回歸if polynomial:model = Pipeline([("poly_features", PolynomialFeatures(degree=10, include_bias=False)),("std_scaler", StandardScaler()),("regul_reg", model),])model.fit(X, y)y_new_regul = model.predict(X_new)lw = 2 if alpha > 0 else 1plt.plot(X_new, y_new_regul, style, linewidth=lw, label=r"$\alpha = {}$".format(alpha))plt.plot(X, y, "b.", linewidth=3)plt.legend(loc="upper left", fontsize=15)plt.xlabel("$x_1$", fontsize=18)plt.axis([0, 3, 0, 4])plt.figure(figsize=(8,4)) plt.subplot(121) plot_model(Ridge, polynomial=False, alphas=(0, 10, 100), random_state=42) plt.ylabel("$y$", rotation=0, fontsize=18) plt.subplot(122) plot_model(Ridge, polynomial=True, alphas=(0, 10**-5, 1), random_state=42)plt.show()

1.1.1 Sklearn 實(shí)現(xiàn)

sklearn.linear_model.Ridge:

from sklearn.linear_model import Ridgeridge_reg = Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)ridge_reg.fit(X, y) ridge_reg.predict([[X_pred]]) from sklearn.linear_model import Ridgenp.random.seed(42) m = 20 X = 3 * np.random.rand(m, 1) y = 1 + 0.5 * X + np.random.randn(m, 1) / 1.5ridge_reg = Ridge(alpha=1, solver="cholesky", random_state=42) ridge_reg.fit(X, y) ridge_reg.predict([[1.5]]) array([[1.55071465]]) ridge_reg.intercept_, ridge_reg.coef_ (array([1.00650911]), array([[0.36280369]]))

與原回歸模型 y=1+0.5×X+εy = 1 + 0.5 \times X + \varepsilony=1+0.5×X+ε 很接近。


1.1.2 Ridge + SDG

利用隨機(jī)梯度下降來求解嶺回歸。

1.1.2.1 Sklearn 實(shí)現(xiàn)

from sklearn.linear_model import SGDRegressorridge_sgd_reg = SGDRegressor(max_iter=50, tol=-np.infty, penalty="l2", random_state=42) ridge_sgd_reg.fit(X, y.ravel()) ridge_sgd_reg.predict([[1.5]]) array([1.49905184]) ridge_sgd_reg.intercept_, ridge_sgd_reg.coef_ (array([0.63725132]), array([0.57453367]))

1.2 Lasso Regression(L1)

線性回歸的另一種正則化,叫作最小絕對收縮和選擇算子回歸(Least Absolute Shrinkage and Selection Operator Regression,簡稱Lasso 回歸,或套索回歸)。與嶺回歸一樣,它也是像成本函數(shù)添加一個正則項(xiàng),但是它增加的是權(quán)重向量的 L1L_1L1? 范數(shù),而不是 L2L_2L2? 范數(shù)的平方的一半。

Lasso 回歸成本函數(shù):

(3)J(θ)=MSE(θ)+α∑i=1n∣θi∣J(\theta)=MSE(\theta)+\alpha\sum_{i=1}^n|\theta_i| \tag{3}J(θ)=MSE(θ)+αi=1n?θi?(3)

圖 3 顯示內(nèi)容與圖 2 相同,但是嶺回歸模型換成了 Lasso 回歸模型,同時 α\alphaα 值較小。

Lasso 回歸的一個重要特點(diǎn)是它傾向于完全消除掉最不重要特征的權(quán)重(也就是將它們設(shè)置為零)。例如,在圖 3 中右圖中的虛線(α=10?7\alpha=10^{-7}α=10?7)看起來像是二次的,快要接近于線性;因?yàn)樗懈唠A多項(xiàng)式的特征權(quán)重的等于零。換句話說,Lasso 會回會自動執(zhí)行特征選擇并輸出一個系數(shù)模型(即只有很少的特征有非零權(quán)重)。

圖3 不同 alpha 下的 Lasso 回歸 與 多項(xiàng)式 Lasso 回歸

代碼如下:

from sklearn.linear_model import Lassoplt.figure(figsize=(8,4)) plt.subplot(121) plot_model(Lasso, polynomial=False, alphas=(0, 0.1, 1), random_state=42) plt.ylabel("$y$", rotation=0, fontsize=18) plt.subplot(122) plot_model(Lasso, polynomial=True, alphas=(0, 10**-7, 1), tol=1, random_state=42)plt.show()

[外鏈圖片轉(zhuǎn)存失敗(img-rtHntb2V-1566830619833)(output_18_0.png)]

1.2.1 Sklearn 實(shí)現(xiàn)

sklearn.linear_model.Lasso:

from sklearn.linear_model import Lassolasso_reg = 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') lasso_reg.fit(X, y) lasso_reg.predict([[X_pred]]) from sklearn.linear_model import Lasso lasso_reg = Lasso(alpha=0.1) lasso_reg.fit(X, y) lasso_reg.predict([[1.5]]) array([1.53788174]) lasso_reg.intercept_, lasso_reg.coef_ (array([1.14537356]), array([0.26167212]))

1.2.2 Lasso + SGD

利用隨機(jī)梯度下降來求解 Lasso 回歸,當(dāng) θi=0(i=1,2,? ,n)\theta_i=0(i=1,2,\cdots,n)θi?=0(i=1,2,?,n) ,Lasso 成本函數(shù)是不可微的。但是,當(dāng)任意 θi=0\theta_i=0θi?=0 時,可以使用次梯度向量 ggg 作為替代,依舊可以讓梯度下降正常運(yùn)轉(zhuǎn)。

LassoLassoLasso 回歸次梯度向量:

(4)g(θ,J)=?θMSE?(θ)+α(sign?(θ1)sign?(θ2)?sign?(θn))當(dāng)sign(θ1)={?1(θi&lt;0)0(θi=0)+1(θi&gt;0)g(\theta, J)=\nabla_{\theta} \operatorname{MSE}(\theta)+\alpha\left(\begin{array}{c}{\operatorname{sign}\left(\theta_{1}\right)} \\ {\operatorname{sign}\left(\theta_{2}\right)} \\ {\vdots} \\ {\operatorname{sign}\left(\theta_{n}\right)}\end{array}\right) 當(dāng)sign(\theta_1)=\left\{ \begin{aligned} -1 \quad (\theta_i&lt;0) \\ 0 \quad (\theta_i=0) \\ +1 \quad (\theta_i&gt;0) \\ \end{aligned} \right.\tag{4} g(θ,J)=?θ?MSE(θ)+α??????sign(θ1?)sign(θ2?)?sign(θn?)???????當(dāng)sign(θ1?)=???????1(θi?<0)0(θi?=0)+1(θi?>0)?(4)

1.2.2.1 Sklearn 實(shí)現(xiàn)

from sklearn.linear_model import SGDRegressorlasso_sgd_reg = SGDRegressor(max_iter=50, tol=-np.infty, penalty="l1", random_state=42) lasso_sgd_reg.fit(X, y.ravel()) lasso_sgd_reg.predict([[1.5]]) array([1.49903849]) lasso_sgd_reg.intercept_, lasso_sgd_reg.coef_ (array([0.63727982]), array([0.57450578]))

1.3 Elastic Net(L1&L2)

彈性網(wǎng)絡(luò)是嶺回歸與 Lasso 回歸之間的中間地帶。其正則項(xiàng)就是嶺回歸和 Lasso 回歸的正則項(xiàng)的混合混合比例通過 rrr (L1_ratio)來控制。當(dāng) r=0r=0r=0 時,彈性網(wǎng)絡(luò)即等同于嶺回歸,而當(dāng) r=1r=1r=1 時,即相當(dāng)于 Lasso 回歸。

彈性網(wǎng)絡(luò)成本函數(shù):

(5)J(θ)=MSE(θ)+rα∑i=1n∣θi∣+1?r2α∑i=1nθinJ(\theta)=MSE(\theta)+r\alpha \sum_{i=1}^n|\theta_i|+\frac{1-r}{2}\alpha\sum_{i=1}^n \theta_i^n \tag{5}J(θ)=MSE(θ)+rαi=1n?θi?+21?r?αi=1n?θin?(5)

1.3.1 Sklearn 實(shí)現(xiàn)

sklearn.linear_model.ElasticNet:

from sklearn.linear_model import ElasticNetelastic_net = 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')[source]elastic_net.fit(X, y) elastic_net.predict([[X_pred]]) from sklearn.linear_model import ElasticNet elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5, random_state=42) elastic_net.fit(X, y) elastic_net.predict([[1.5]]) array([1.54333232]) elastic_net.intercept_, elastic_net.coef_ (array([1.08639303]), array([0.30462619]))

1.4 正則線性模型選擇

應(yīng)該如何選擇線性、嶺回歸、Lasso 回歸和彈性網(wǎng)絡(luò)呢?通常來說,有正則化——哪怕是很小,總是比沒有更可取一些。所以大多數(shù)情況下,應(yīng)該避免使用純線性回歸。

嶺回歸是個不錯的默認(rèn)選擇,但是如果覺得實(shí)際用到的特征只有少數(shù)幾個,那就應(yīng)該更傾向于 Lasso 回歸或是彈性網(wǎng)絡(luò),因?yàn)樗鼈儠o用特征的權(quán)重降為零。

一般而言,彈性網(wǎng)絡(luò)優(yōu)于 Lasso 回歸,因?yàn)楫?dāng)特征數(shù)量超過訓(xùn)練實(shí)例數(shù)量,又或者是幾個特征強(qiáng)相關(guān)時,Lasso 回歸的表現(xiàn)可能非常不穩(wěn)定。[1]

參考資料

[1] Aurelien Geron, 王靜源, 賈瑋, 邊蕤, 邱俊濤. 機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于 Scikit-Learn 和 TensorFlow[M]. 北京: 機(jī)械工業(yè)出版社, 2018: 121-127.

總結(jié)

以上是生活随笔為你收集整理的监督学习 | 线性回归 之正则线性模型原理及Sklearn实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 免费看av网 | 精品综合久久久 | 欧洲av无码放荡人妇网站 | 男女超碰 | 精品熟妇一区二区三区 | 亚洲精品乱码久久久久久蜜桃不卡 | 91精品播放 | 超碰人人澡 | 久久亚洲AV无码专区成人国产 | 色啪综合| 成人在线网站 | 午夜福利视频合集1000 | 欧美 日韩 国产 一区二区三区 | 免费在线观看av | www.黄色免费| 亚洲精品影院 | 一本一道久久a久久精品综合 | 午夜伊人网 | 人妻丰满熟妇无码区免费 | 欧美激情偷拍 | 午夜丰满寂寞少妇精品 | 成人欧美一级特黄 | 97干干| 让男按摩师摸好爽 | 风间由美一二三区av片 | 日韩在线专区 | 国产99在线 | 亚洲 | 手机看黄色 | 欧美老熟妇又粗又大 | 在线观看成年人网站 | 国产天堂久久 | 老司机午夜免费视频 | 国产精品日韩欧美一区二区三区 | 久久国产麻豆 | 美女100%露胸无遮挡 | 天堂av手机版 | 国产18在线观看 | 91福利视频免费观看 | 人人射人人| 亚洲av无码一区二区三区在线 | 极品91| 日批免费观看 | 香蕉亚洲 | 蜜桃臀aⅴ精品一区二区三区 | 日本一本在线 | www.国产精品视频 | 泷泽萝拉在线播放 | 国产福利久久 | 国产午夜无码视频在线观看 | 久久午夜av | 亚洲黄色一区二区三区 | 欧美第一精品 | 99国产精品久久久久久久 | 99久久人妻精品免费二区 | 天堂无乱码 | 精品美女在线观看 | 国产精品网站视频 | 精品资源成人 | aa成人 | 色香蕉在线视频 | 伊人快播 | 懂色av一区二区三区蜜臀 | 国产精品色在线网站 | 国产一区二区三区网站 | 极品国产一区 | 欧美综合亚洲图片综合区 | 在线中文字幕av | 外国电影免费观看高清完整版 | 亚欧在线视频 | 国产第一色| 亲切的金子餐桌片段的金子 | 欧美日韩中日 | 国产又爽又黄视频 | 91日韩欧美| 中文在线а√天堂官网 | 精品麻豆 | 日本网站黄色 | 免费观看日韩毛片 | 五级黄高潮片90分钟视频 | 99热这里只有精品首页 | 久久爱99 | 人人干在线视频 | 大黑人交交护士xxxxhd | 在线日韩av| 亚洲午夜伦理 | 亚洲狠狠婷婷综合久久久久图片 | 大乳巨大乳j奶hd | 青草青在线视频 | 全黄一级播放 | 欧美男人天堂 | 亚洲人一区二区三区 | 九九黄色片 | 91视频最新入口 | 亚洲视频在线观看免费视频 | 亚洲专区区免费 | 久久人人视频 | 全部免费毛片在线播放 | 精品人妻一区二区三区含羞草 | 天天综合干 |