自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

十分鐘掌握Python集成學(xué)習(xí)和隨機(jī)森林算法

人工智能 機(jī)器學(xué)習(xí)
集成學(xué)習(xí)和隨機(jī)森林是強(qiáng)大的機(jī)器學(xué)習(xí)模型,機(jī)器學(xué)習(xí)從業(yè)者和數(shù)據(jù)科學(xué)家經(jīng)常使用它們。在本文中,我們介紹了提升集成學(xué)習(xí)的基本原理、應(yīng)用場(chǎng)景,并介紹了其中最受歡迎的算法及其在Python中的使用方法。

簡(jiǎn)介

機(jī)器學(xué)習(xí)模型已經(jīng)成為多個(gè)行業(yè)決策過(guò)程中的重要組成部分,然而在處理嘈雜或多樣化的數(shù)據(jù)集時(shí),它們往往會(huì)遇到困難。這就是集成學(xué)習(xí)(Ensemble Learning)發(fā)揮作用的地方。

本文將揭示集成學(xué)習(xí)的奧秘,并介紹其強(qiáng)大的隨機(jī)森林算法。無(wú)論你是一名數(shù)據(jù)科學(xué)家想要磨煉自己的工具包,還是一名開發(fā)人員尋求實(shí)用見解以構(gòu)建穩(wěn)健的機(jī)器學(xué)習(xí)模型,本文都適合每個(gè)人!

通過(guò)本文,你將全面了解集成學(xué)習(xí)以及Python中隨機(jī)森林的工作原理。因此,無(wú)論是經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家,還是只是想擴(kuò)展機(jī)器學(xué)習(xí)能力,都可以提升你的機(jī)器學(xué)習(xí)專業(yè)知識(shí)!

1. 什么是集成學(xué)習(xí)?

集成學(xué)習(xí)是一種機(jī)器學(xué)習(xí)方法,它將多個(gè)弱模型的預(yù)測(cè)結(jié)果組合在一起,以獲得更強(qiáng)的預(yù)測(cè)結(jié)果。集成學(xué)習(xí)的概念是通過(guò)充分利用每個(gè)模型的預(yù)測(cè)能力來(lái)減少單個(gè)模型的偏差和錯(cuò)誤。

為了更好地理解,接下來(lái)本文舉一個(gè)生活中的例子,假設(shè)你看到了一種動(dòng)物,但不知道它屬于哪個(gè)物種。因此,你不需要詢問(wèn)一位專家,而是詢問(wèn)十位專家,然后由他們中的大多數(shù)人投票決定。這就是所謂的“硬投票”。

硬投票是指考慮到每個(gè)分類器的類別預(yù)測(cè),然后根據(jù)具有最大投票數(shù)的類別將輸入進(jìn)行分類。另一方面,軟投票是指考慮每個(gè)分類器對(duì)每個(gè)類別的概率預(yù)測(cè),然后根據(jù)該類別的平均概率(在分類器概率的平均值上取得)將輸入分類到具有最大概率的類別。

2. 何時(shí)使用集成學(xué)習(xí)?

集成學(xué)習(xí)總是用于提高模型性能,包括提高分類準(zhǔn)確度和降低回歸模型的平均絕對(duì)誤差。此外,集成學(xué)習(xí)總能產(chǎn)生更穩(wěn)定的模型。當(dāng)模型之間沒(méi)有相關(guān)性時(shí),集成學(xué)習(xí)的效果最好,因?yàn)檫@樣每個(gè)模型都可以學(xué)習(xí)到獨(dú)特的內(nèi)容,從而提高整體性能。

3. 集成學(xué)習(xí)策略

盡管集成學(xué)習(xí)可以以多種方式應(yīng)用在很多方面,但在實(shí)踐中,有三種策略因其易于實(shí)施和使用而廣受歡迎。這三種策略是:

  1. 裝袋法(Bagging):Bagging是bootstrap aggregation的縮寫,是一種集成學(xué)習(xí)策略,它使用數(shù)據(jù)集的隨機(jī)樣本來(lái)訓(xùn)練模型。
  2. 堆疊法(Stacking):Stacking是堆疊泛化(stacked generalization)的簡(jiǎn)稱,是一種集成學(xué)習(xí)策略。在這種策略中,我們訓(xùn)練一個(gè)模型,將在數(shù)據(jù)上訓(xùn)練的多個(gè)模型結(jié)合起來(lái)。
  3. 提升法(Boosting):提升法是一種集成學(xué)習(xí)技術(shù),重點(diǎn)在于選擇被錯(cuò)誤分類的數(shù)據(jù)來(lái)訓(xùn)練模型。

接下來(lái)本文深入探討每種策略,并看看如何使用Python在數(shù)據(jù)集上訓(xùn)練這些集成模型。

4. 裝袋法集成學(xué)習(xí)

裝袋法使用隨機(jī)樣本數(shù)據(jù),并使用學(xué)習(xí)算法和平均值來(lái)獲取裝袋概率,也稱為自助聚合。它將多個(gè)模型的結(jié)果聚合起來(lái)得到一個(gè)綜合的結(jié)果。

該方法涉及以下步驟:

  1. 將原始數(shù)據(jù)集分割成多個(gè)子集,并進(jìn)行替換。
  2. 為每個(gè)子集開發(fā)基礎(chǔ)模型。
  3. 在運(yùn)行所有預(yù)測(cè)之前,同時(shí)運(yùn)行所有模型,并將所有預(yù)測(cè)結(jié)果匯總以獲得最終預(yù)測(cè)結(jié)果。

Scikit-learn提供了實(shí)現(xiàn)BaggingClassifier和BaggingRegressor的能力。BaggingMetaEstimator可以識(shí)別原始數(shù)據(jù)集的隨機(jī)子集以適應(yīng)每個(gè)基礎(chǔ)模型,然后通過(guò)投票或平均的方式將各個(gè)基礎(chǔ)模型的預(yù)測(cè)結(jié)果聚合成最終預(yù)測(cè)結(jié)果。該方法通過(guò)隨機(jī)化構(gòu)建過(guò)程來(lái)減少差異。

【Scikit-learn】:https://scikit-learn.org/stable/

【BaggingClassifier】:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html

【BaggingRegressor】:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingRegressor.html

接下來(lái)本文以一個(gè)示例來(lái)說(shuō)明如何使用scikit-learn中的裝袋估計(jì)器:

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
bagging = BaggingClassifier(base_estimator=DecisionTreeClassifier(),n_estimators=10, max_samples=0.5, max_features=0.5)

裝袋分類器需要考慮幾個(gè)參數(shù):

  • base_estimator:裝袋方法中使用的基礎(chǔ)模型。這里我們使用決策樹分類器。
  • n_estimators:裝袋方法中將使用的估計(jì)器數(shù)量。
  • max_samples:每個(gè)基礎(chǔ)估計(jì)器將從訓(xùn)練集中抽取的樣本數(shù)。
  • max_features:用于訓(xùn)練每個(gè)基礎(chǔ)估計(jì)器的特征數(shù)量。

現(xiàn)在,本文將在訓(xùn)練集上擬合該分類器并進(jìn)行評(píng)分。

bagging.fit(X_train, y_train)
bagging.score(X_test,y_test)

對(duì)于回歸任務(wù),我們也可以做類似的操作,不同之處在于我們將使用回歸估計(jì)器。

from sklearn.ensemble import BaggingRegressor
bagging = BaggingRegressor(DecisionTreeRegressor())
bagging.fit(X_train, y_train)
model.score(X_test,y_test)

5. 堆疊集成學(xué)習(xí)

堆疊是一種將多個(gè)估計(jì)器組合在一起以減小它們的偏差并產(chǎn)生準(zhǔn)確預(yù)測(cè)的技術(shù)。然后將每個(gè)估計(jì)器的預(yù)測(cè)結(jié)果進(jìn)行組合,并輸入到通過(guò)交叉驗(yàn)證訓(xùn)練的最終預(yù)測(cè)元模型中;堆疊可以應(yīng)用于分類和回歸問(wèn)題。

圖片圖片

堆疊集成學(xué)習(xí)

堆疊的步驟如下:

  1. 將數(shù)據(jù)分為訓(xùn)練集和驗(yàn)證集。
  2. 將訓(xùn)練集分為K個(gè)折疊。
  3. 在K-1個(gè)折疊上訓(xùn)練基礎(chǔ)模型,并在第K個(gè)折疊上進(jìn)行預(yù)測(cè)。
  4. 重復(fù)步驟3,直到對(duì)每個(gè)折疊都有一個(gè)預(yù)測(cè)結(jié)果。
  5. 在整個(gè)訓(xùn)練集上擬合基礎(chǔ)模型。
  6. 使用該模型對(duì)測(cè)試集進(jìn)行預(yù)測(cè)。
  7. 對(duì)其他基礎(chǔ)模型重復(fù)步驟3-6。
  8. 使用測(cè)試集的預(yù)測(cè)結(jié)果作為新模型(元模型)的特征。
  9. 使用元模型對(duì)測(cè)試集進(jìn)行最終預(yù)測(cè)。

在下面的示例中,本文首先創(chuàng)建兩個(gè)基礎(chǔ)分類器(RandomForestClassifier和GradientBoostingClassifier)和一個(gè)元分類器(LogisticRegression),然后使用K折交叉驗(yàn)證從這些分類器的預(yù)測(cè)結(jié)果(iris數(shù)據(jù)集上的訓(xùn)練數(shù)據(jù))中提取特征用于元分類器(LogisticRegression)的訓(xùn)練。

在使用K折交叉驗(yàn)證將基礎(chǔ)分類器在測(cè)試數(shù)據(jù)集上進(jìn)行預(yù)測(cè),并將這些預(yù)測(cè)結(jié)果作為元分類器的輸入特征后,再使用這兩者的預(yù)測(cè)結(jié)果進(jìn)行測(cè)試集上的預(yù)測(cè),并將其準(zhǔn)確性與堆疊集成模型進(jìn)行比較。

# 加載數(shù)據(jù)集
data = load_iris()
X, y = data.data, data.target

# 將數(shù)據(jù)拆分為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定義基礎(chǔ)分類器
base_classifiers = [
   RandomForestClassifier(n_estimators=100, random_state=42),
   GradientBoostingClassifier(n_estimators=100, random_state=42)
]

# 定義元分類器
meta_classifier = LogisticRegression()

# 創(chuàng)建一個(gè)數(shù)組來(lái)保存基礎(chǔ)分類器的預(yù)測(cè)結(jié)果
base_classifier_predictions = np.zeros((len(X_train), len(base_classifiers)))

# 使用K折交叉驗(yàn)證進(jìn)行堆疊
kf = KFold(n_splits=5, shuffle=True, random_state=42)
for train_index, val_index in kf.split(X_train):
   train_fold, val_fold = X_train[train_index], X_train[val_index]
   train_target, val_target = y_train[train_index], y_train[val_index]

   for i, clf in enumerate(base_classifiers):
       cloned_clf = clone(clf)
       cloned_clf.fit(train_fold, train_target)
       base_classifier_predictions[val_index, i] = cloned_clf.predict(val_fold)

# 在基礎(chǔ)分類器預(yù)測(cè)的基礎(chǔ)上訓(xùn)練元分類器
meta_classifier.fit(base_classifier_predictions, y_train)

# 使用堆疊集成進(jìn)行預(yù)測(cè)
stacked_predictions = np.zeros((len(X_test), len(base_classifiers)))
for i, clf in enumerate(base_classifiers):
   stacked_predictions[:, i] = clf.predict(X_test)

# 使用元分類器進(jìn)行最終預(yù)測(cè)
final_predictions = meta_classifier.predict(stacked_predictions)

# 評(píng)估堆疊集成的性能
accuracy = accuracy_score(y_test, final_predictions)
print(f"Stacked Ensemble Accuracy: {accuracy:.2f}")

6. 提升集成學(xué)習(xí)

提升(Boosting)是一種機(jī)器學(xué)習(xí)的集成技術(shù),通過(guò)將弱學(xué)習(xí)器轉(zhuǎn)化為強(qiáng)學(xué)習(xí)器來(lái)減小偏差和方差。這些弱學(xué)習(xí)器按順序應(yīng)用于數(shù)據(jù)集,首先創(chuàng)建一個(gè)初始模型并將其擬合到訓(xùn)練集上。一旦第一個(gè)模型的錯(cuò)誤被識(shí)別出來(lái),就會(huì)設(shè)計(jì)另一個(gè)模型來(lái)進(jìn)行修正。

有一些流行的算法和實(shí)現(xiàn)方法用于提升集成學(xué)習(xí)技術(shù)。接下來(lái)將探討其中最著名的幾種。

6.1 AdaBoost

AdaBoost是一種有效的集成學(xué)習(xí)技術(shù),通過(guò)按順序使用弱學(xué)習(xí)器進(jìn)行訓(xùn)練。每次迭代都會(huì)優(yōu)先考慮錯(cuò)誤的預(yù)測(cè)結(jié)果,同時(shí)減小分配給正確預(yù)測(cè)實(shí)例的權(quán)重;這種策略性地強(qiáng)調(diào)具有挑戰(zhàn)性的觀察結(jié)果,使得AdaBoost隨著時(shí)間的推移變得越來(lái)越準(zhǔn)確,其最終的預(yù)測(cè)結(jié)果由弱學(xué)習(xí)器的多數(shù)投票或加權(quán)總和決定。

AdaBoost是一種通用的算法,適用于回歸和分類任務(wù),但在這里本文更關(guān)注它在分類問(wèn)題上的應(yīng)用,使用Scikit-learn進(jìn)行演示。接下來(lái)看看如何在下面的示例中將其應(yīng)用于分類任務(wù):

from sklearn.ensemble import AdaBoostClassifier
model = AdaBoostClassifier(n_estimators=100)
model.fit(X_train, y_train)
model.score(X_test,y_test)

在這個(gè)示例中,本文使用了Scikit-learn中的AdaBoostClassifier,并將n_estimators設(shè)置為100。默認(rèn)的學(xué)習(xí)器是決策樹,用戶可以進(jìn)行更改。此外,還可以調(diào)整決策樹的參數(shù)。

6.2 極限梯度提升(XGBoost)

極限梯度提升(eXtreme Gradient Boosting),更常被稱為XGBoost,是提升集成學(xué)習(xí)算法中最佳的實(shí)現(xiàn)之一,由于其并行計(jì)算能力,在單臺(tái)計(jì)算機(jī)上運(yùn)行非常高效。可以通過(guò)機(jī)器學(xué)習(xí)社區(qū)開發(fā)的xgboost軟件包來(lái)使用XGBoost。

import xgboost as xgb
params = {"objective":"binary:logistic",'colsample_bytree': 0.3,'learning_rate': 0.1,
               'max_depth': 5, 'alpha': 10}
model = xgb.XGBClassifier(**params)
model.fit(X_train, y_train)
model.fit(X_train, y_train)
model.score(X_test,y_test)

6.3 LightGBM

LightGBM是另一種基于樹學(xué)習(xí)的梯度提升算法,但與其他基于樹的算法不同的是,它使用基于葉子的樹生長(zhǎng)方式,這使其收斂更快。

圖片圖片

樹葉的生長(zhǎng)/圖片來(lái)源:LightGBM

在下面的示例中,本文將使用LightGBM解決一個(gè)二元分類問(wèn)題:

import lightgbm as lgb
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
params = {'boosting_type': 'gbdt',
             'objective': 'binary',
             'num_leaves': 40,
             'learning_rate': 0.1,
             'feature_fraction': 0.9
             }
gbm = lgb.train(params,
   lgb_train,
   num_boost_round=200,
   valid_sets=[lgb_train, lgb_eval],
   valid_names=['train','valid'],
  )

結(jié)語(yǔ)

集成學(xué)習(xí)和隨機(jī)森林是強(qiáng)大的機(jī)器學(xué)習(xí)模型,機(jī)器學(xué)習(xí)從業(yè)者和數(shù)據(jù)科學(xué)家經(jīng)常使用它們。在本文中,我們介紹了提升集成學(xué)習(xí)的基本原理、應(yīng)用場(chǎng)景,并介紹了其中最受歡迎的算法及其在Python中的使用方法。


責(zé)任編輯:武曉燕 來(lái)源: Python學(xué)研大本營(yíng)
相關(guān)推薦

2022-08-26 09:01:07

CSSFlex 布局

2023-09-26 22:12:13

數(shù)據(jù)倉(cāng)庫(kù)Doris

2024-08-30 10:51:51

2024-10-25 15:56:20

2012-07-10 01:22:32

PythonPython教程

2024-03-04 15:19:52

Python編程內(nèi)建函數(shù)

2020-12-17 06:48:21

SQLkafkaMySQL

2019-04-01 14:59:56

負(fù)載均衡服務(wù)器網(wǎng)絡(luò)

2019-09-16 09:14:51

2023-10-07 00:06:09

SQL數(shù)據(jù)庫(kù)

2023-10-12 09:31:27

SkyWalking微服務(wù)

2021-09-07 09:40:20

Spark大數(shù)據(jù)引擎

2022-06-16 07:31:41

Web組件封裝HTML 標(biāo)簽

2024-06-19 09:58:29

2023-04-12 11:18:51

甘特圖前端

2015-09-06 09:22:24

框架搭建快速高效app

2024-05-13 09:28:43

Flink SQL大數(shù)據(jù)

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫(kù)

2022-03-23 09:32:38

微服務(wù)容器Kubernetes

2021-01-29 11:25:57

Python爬山算法函數(shù)優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)