最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Python用正則化Lasso、嶺回歸預(yù)測房價、隨機森林交叉驗證鳶尾花數(shù)據(jù)可視化2案例

2023-09-12 23:44 作者:拓端tecdat  | 我要投稿

全文鏈接:https://tecdat.cn/?p=33632

原文出處:拓端數(shù)據(jù)部落公眾號

機器學(xué)習(xí)模型的表現(xiàn)不佳通常是由于過度擬合或欠擬合引起的,我們將重點關(guān)注客戶經(jīng)常遇到的過擬合情況。過度擬合是指學(xué)習(xí)的假設(shè)在訓(xùn)練數(shù)據(jù)上擬合得非常好,以至于對未見數(shù)據(jù)的模型性能造成負(fù)面影響。該模型對于訓(xùn)練數(shù)據(jù)中沒有的新實例的泛化能力較差。

復(fù)雜模型,如隨機森林、神經(jīng)網(wǎng)絡(luò)和XGBoost,更容易出現(xiàn)過度擬合。簡單模型,如線性回歸,也可能出現(xiàn)過度擬合——這通常發(fā)生在訓(xùn)練數(shù)據(jù)中的特征數(shù)量多于實例數(shù)量時。

如何檢測過度擬合?

最基本的交叉驗證實現(xiàn)類型是基于保留數(shù)據(jù)集的交叉驗證。該實現(xiàn)將可用數(shù)據(jù)分為訓(xùn)練集和測試集。要使用基于保留數(shù)據(jù)集的交叉驗證評估我們的模型,我們首先需要在保留集的訓(xùn)練部分上構(gòu)建和訓(xùn)練模型,然后使用該模型對測試集進(jìn)行預(yù)測,以評估其性能。

我們了解了過度擬合是什么,以及如何使用基于保留數(shù)據(jù)集的交叉驗證技術(shù)來檢測模型是否過度擬合。讓我們獲取一些數(shù)據(jù),并在數(shù)據(jù)上實施這些技術(shù),以檢測我們的模型是否過度擬合。

python

# 導(dǎo)入庫import pandas as pdfrom sklearn.model_selection import train_test_split# 加載數(shù)據(jù)集df = pd.DataFrame(data= dataset.data)# 將目標(biāo)標(biāo)簽添加到數(shù)據(jù)框中df["target"] = dataset.target# 分離特征和目標(biāo)標(biāo)簽X = df.iloc[:, :-1]# 分割訓(xùn)練集和測試集(基于保留數(shù)據(jù)集的交叉驗證)X_train, X_test, y_train, y_test = train_test_split(X, y, ? ? ? ? ? ? ? ? ? ? ?# 實例化模型clf = RandomForestClassifier(random_state=24)# 繪制學(xué)習(xí)曲線plot_learning_curves(X_train=X_train, ? ? ? ? ? ? ? ? ? ? y_train=y_train, ? ? ? ?

在上面的圖片中,我們可以清楚地看到我們的隨機森林模型對訓(xùn)練數(shù)據(jù)過度擬合。我們的隨機森林模型在訓(xùn)練集上有完美的分類錯誤率,但在測試集上有0.05的分類錯誤率。這可以通過散點圖上兩條線之間的間隙來說明。

另外,我們可以通過改進(jìn)模型來對抗過度擬合。我們可以通過減少隨機森林或XGBoost中的估計器數(shù)量,或者減少神經(jīng)網(wǎng)絡(luò)中的參數(shù)數(shù)量來簡化模型。我們還可以引入一種稱為“提前停止”的技術(shù),即在達(dá)到設(shè)定的訓(xùn)練輪次之前提前停止訓(xùn)練過程。

另一種簡化模型的方法是通過正則化向模型中添加偏差。

正則化是什么,為什么我們需要它?

正則化技術(shù)在機器學(xué)習(xí)模型的開發(fā)中起著至關(guān)重要的作用。尤其是復(fù)雜模型,如神經(jīng)網(wǎng)絡(luò),容易過擬合訓(xùn)練數(shù)據(jù)。從數(shù)學(xué)或機器學(xué)習(xí)的角度來看,"regularize"一詞表示我們正在使某個東西規(guī)則化。在數(shù)學(xué)或機器學(xué)習(xí)的上下文中,我們通過添加信息來使某個東西規(guī)則化,以創(chuàng)建一個可以防止過擬合的解決方案。在我們的機器學(xué)習(xí)上下文中,我們要使某個東西規(guī)則化的是"目標(biāo)函數(shù)",即我們在優(yōu)化問題中嘗試最小化的東西。

優(yōu)化問題

為了獲得我們模型的"最佳"實現(xiàn),我們可以使用優(yōu)化算法來確定最大化或最小化目標(biāo)函數(shù)的一組輸入。通常,在機器學(xué)習(xí)中,我們希望最小化目標(biāo)函數(shù)以降低模型的誤差。這就是為什么目標(biāo)函數(shù)在從業(yè)者中被稱為損失函數(shù)的原因,但也可以稱為成本函數(shù)。

有大量流行的優(yōu)化算法,包括:

  • 斐波那契搜索

  • 二分法

  • 線性搜索

  • 梯度下降

  • ...等等

沒有正則化的梯度下降

梯度下降是一種一階優(yōu)化算法。它涉及采取與梯度相反方向的步驟,以找到目標(biāo)函數(shù)的全局最小值(或非凸函數(shù)的局部最小值)。

要用數(shù)學(xué)方式表達(dá)梯度下降的工作原理,假設(shè)N是觀測值的數(shù)量,Y_hat是實例的預(yù)測值,Y是實例的實際值。

為了確定要采取的步長(大小)以及方向,我們計算:

其中η是學(xué)習(xí)率 - 學(xué)習(xí)率是優(yōu)化算法中的一個調(diào)節(jié)參數(shù),它確定每次迭代時向最小損失函數(shù)的最小值移動的步長[來源: Wikipedia]。然后,在每次迭代之后,更新模型的權(quán)重,更新規(guī)則如下:

其中Δw是一個包含每個權(quán)重系數(shù)w的權(quán)重更新的向量。下面的函數(shù)演示了如何在Python中實現(xiàn)不帶任何正則化的梯度下降優(yōu)化算法。

為了更好地理解這一點,讓我們構(gòu)建一個人工數(shù)據(jù)集和一個沒有正則化的線性回歸模型來預(yù)測訓(xùn)練數(shù)據(jù)。

python

# 導(dǎo)入所需模塊import matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error# 加載數(shù)據(jù)df = pd.read_csv# 選擇一個特征# 為了簡單起見,只使用100個實例X = df.loc[:100, 5]y = df.loc[:100, 13] # 目標(biāo)標(biāo)簽# 重塑數(shù)據(jù)X_reshaped = X[:, np.newaxis]y_reshaped = y[:, np.newaxis]# 實例化線性回歸模型linear_regression = LinearRegression()# 訓(xùn)練模型linea# 進(jìn)行預(yù)測y_p# 評估模型mse = mea_squared_rrr(_esaped y_red)print(f"均方誤差:{mse}\n")# 繪制最佳擬合線sns.sca>>>> 均方誤差:9.7

在接下來的部分,我們將深入探討L1和L2正則化背后的直覺。

L1 正則化

L1 正則化,也被稱為 L1 范數(shù)或 Lasso(在回歸問題中),通過將參數(shù)收縮到0來防止過擬合。這使得某些特征變得不相關(guān)。

例如,假設(shè)我們想使用機器學(xué)習(xí)來預(yù)測房價??紤]以下特征:

  • Street?– 道路通行能力,

  • Neighborhood?– 物業(yè)位置,

  • Accessibility?– 交通便利程度,

  • Year Built?– 房屋建造年份,

  • Rooms?– 房間數(shù)量,

  • Kitchens?– 廚房數(shù)量,

  • Fireplaces?– 房屋中的壁爐數(shù)量。

當(dāng)預(yù)測房屋價值時,直覺告訴我們不同的輸入特征對價格的影響不同。例如,與火爐數(shù)量相比,社區(qū)或房間數(shù)量對房價的影響更大。

數(shù)學(xué)上,我們通過擴展損失函數(shù)來表達(dá) L1 正則化:

實質(zhì)上,當(dāng)我們使用L1正則化時,我們對權(quán)重的絕對值進(jìn)行懲罰。

盡管如此,在我們的示例回歸問題中,Lasso回歸(帶有L1正則化的線性回歸)將產(chǎn)生一個高度可解釋的模型,并且只使用了輸入特征的子集,從而降低了模型的復(fù)雜性。

以下是Python中使用Lasso回歸的示例代碼:

python

import warningswarnings.filterwarnings("ignore")import numpy as npfrom sklearn.metrics import mean_squared_error# 加載數(shù)據(jù)df = pd.read_csv(URL, header=None)# 選擇單個特征(為簡單起見,僅使用100個實例)y = df.loc[:100, 13] # 目標(biāo)標(biāo)簽 # 重塑數(shù)據(jù)y_reshaped = y[:, np.newaxis]# 實例化Lasso回歸模型lasso = Lasso# 訓(xùn)練模型lassped)# 進(jìn)行預(yù)測y_predict(X_eshed)# 評估模型print(f"均方誤差:{mse}")print(f"模型系數(shù):{lasso.coef_}\n")# 繪制最佳擬合線plt.show()

輸出結(jié)果為:

均方誤差:34.7模型系數(shù):[0.]

L2正則化

L2正則化,也被稱為L2范數(shù)或Ridge(在回歸問題中),通過將權(quán)重強制變小來防止過擬合,但不會使其完全為0。

在執(zhí)行L2正則化時,我們在損失函數(shù)中添加的正則化項是所有特征權(quán)重的平方和:

L2正則化返回的解決方案是非稀疏的,因為權(quán)重不會為零(盡管某些權(quán)重可能接近于0)。

L1正則化和L2正則化的區(qū)別:

  • L1正則化對權(quán)重的絕對值之和進(jìn)行懲罰,而L2正則化對權(quán)重的平方和進(jìn)行懲罰。

  • L1正則化的解是稀疏的,而L2正則化的解是非稀疏的。

  • L2正則化不進(jìn)行特征選擇,因為權(quán)重只會被減小到接近于0的值,而不是變?yōu)?。L1正則化內(nèi)置了特征選擇功能。

  • L1正則化對異常值具有魯棒性,而L2正則化沒有。

Python中Ridge回歸的示例代碼:

python

from sklearn.linear_model import LinearRegression, Lasso, Ridgefrom sklearn.metrics import mean_squared_error# 加載數(shù)據(jù)df = pd.read_csv(URL, header=None)# 為簡單起見,選擇一個特征和100個實例y = df.loc[:100, 13] # 目標(biāo)標(biāo)簽# 重塑數(shù)據(jù)X_reshaped = X[:, np.newaxis]# 實例化、訓(xùn)練和推斷ridge = Rdge(apha=100)print(f"均方誤差:{mse}")print(f"模型系數(shù):{ridge.coef_}\n")sns.scatterplot(X,y)plt.show()>>>> 均方誤差:25.96309109305436模型系數(shù):[[1.98542524]]

觀察Ridge回歸模型中的alpha值,它為100。超參數(shù)alpha值越大,權(quán)重值越接近于0,但不會變?yōu)?。

L1正則化和L2正則化哪個更好?

哪種正則化方法更好是一個供學(xué)者們爭論的問題。然而,作為實踐者,在選擇L1和L2正則化之間需要考慮一些重要因素。我將它們分為6個類別,并告訴你每個類別哪個解決方案更好。

哪個解決方案更魯棒? L1

L1正則化比L2正則化更具魯棒性,原因是L2正則化對權(quán)重進(jìn)行平方處理,因此數(shù)據(jù)中的異常值的代價呈指數(shù)增長。L1正則化對權(quán)重取絕對值,所以代價只會線性增長。

哪個解決方案具有更多可能性? L1

我指的是到達(dá)一個點的解決方案的數(shù)量。L1正則化使用曼哈頓距離到達(dá)一個點,所以有很多路線可以走到達(dá)一個點。L2正則化使用歐幾里得距離,這將告訴您最快到達(dá)某個點的方法。這意味著L2范數(shù)只有一個可能的解決方案。

如前所述,L2正則化僅將權(quán)重縮小到接近于0的值,而不是真正變?yōu)?。另一方面,L1正則化將值收縮到0。這實際上是一種特征選擇的形式,因為某些特征完全從模型中刪除了。

總結(jié)

在本文中,我們探討了過擬合是什么,如何檢測過擬合,損失函數(shù)是什么,正則化是什么,為什么需要正則化,L1和L2正則化的工作原理以及它們之間的區(qū)別。

最受歡迎的見解

1.R語言多元Logistic邏輯回歸 應(yīng)用案例

2.面板平滑轉(zhuǎn)移回歸(PSTR)分析案例實現(xiàn)

3.matlab中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)

4.R語言泊松Poisson回歸模型分析案例

5.R語言回歸中的Hosmer-Lemeshow擬合優(yōu)度檢驗

6.r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現(xiàn)

7.在R語言中實現(xiàn)Logistic邏輯回歸

8.python用線性回歸預(yù)測股票價格

9.R語言如何在生存分析與Cox回歸中計算IDI,NRI指標(biāo)


Python用正則化Lasso、嶺回歸預(yù)測房價、隨機森林交叉驗證鳶尾花數(shù)據(jù)可視化2案例的評論 (共 條)

分享到微博請遵守國家法律
株洲县| 凤翔县| 利川市| 峨边| 昆山市| 武义县| 岳西县| 巴中市| 兴业县| 凤阳县| 贵德县| 资溪县| 桃园县| 公安县| 安平县| 兴仁县| 邛崃市| 馆陶县| 吴川市| 大石桥市| 昭平县| 万荣县| 安吉县| 纳雍县| 韶山市| 田东县| 肥城市| 兰溪市| 四平市| 板桥市| 文化| 延边| 孟连| 汝城县| 平遥县| 崇礼县| 兴海县| 固镇县| 象州县| 东乡族自治县| 商水县|