機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディング

PHPz
リリース: 2023-04-12 16:22:05
転載
926 人が閲覧しました

機械学習は、統計モデルを使用してデータを視覚化、分析、予測する自動学習および適応システムの構築に特化した人工知能のサブ分野です。一般的な機械学習モデルは、データセット (モデルのトレーニングに使用) とアルゴリズム (データから学習) で構成されます。しかし、一部のモデルの精度は多くの場合低く、生成される結果の精度も低くなります。この問題を克服する最も簡単な解決策の 1 つは、機械学習モデルでアンサンブル学習を使用することです。

機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディング


#アンサンブル学習は、複数の機械学習モデルを組み合わせて最適化されたモデルを生成し、それによってモデルのパフォーマンスを向上させるメタ手法です。 。 パフォーマンス。アンサンブル学習では、過剰学習を簡単に軽減でき、モデルがトレーニング中により優れたパフォーマンスを発揮しても、テスト中に良好な結果が得られないという事態を防ぎます。

要約すると、アンサンブル学習には次の利点があります。

    モデルのパフォーマンスの向上
  • 過学習の削減
  • 分散の削減
  • 単一モデルと比較して、より高い予測精度を提供します。
  • 線形データと非線形データの両方を処理できます。
  • アンサンブル テクノロジーは、回帰および分類の問題を解決するために使用できます。
以下では、さまざまなアンサンブル学習方法を紹介します。

投票

投票とは、複数の機械学習モデルからの予測を組み合わせて結果を生成するアンサンブル学習の一種。データセット全体で複数の基本モデルをトレーニングして予測を行います。各モデルの予測は「投票」とみなされます。投票数の過半数を獲得した予測が最終的な予測として選択されます。

機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディング

基本予測を集計するために使用される投票には、ハード投票とソフト投票の 2 種類があります。

ハード投票では、最も高い投票数を持つ予測が最終予測として選択されますが、ソフト投票では、各モデルの各クラスの確率を組み合わせて、最も高い確率を持つクラスが最終予測として選択されます。

回帰問題では、最も頻度の高いクラスを探す代わりに、各モデルの予測を取得し、それらを平均して最終的な予測に到達するため、動作が少し異なります。

from sklearn.ensemble import VotingClassifier

## Base Models
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC


ensemble_voting = VotingClassifier(
estimators = [('dtc',DecisionTreeClassifier(random_state=42)),
('lr', LogisticRegression()),
('gnb', GaussianNB()),
('knn',KNeighborsClassifier()),
('svc',SVC())],
voting='hard')
ensemble_voting.fit(X_train,y_train)
ログイン後にコピー
Bagging

Bagging では、いくつかの弱い機械学習モデルを使用し、それらの予測を集約して最良の予測を生成します。これは、置換を使用してセットからランダムなサンプルを抽出するサンプリング手法であるブートストラップ集計に基づいています。集計は、複数の予測を組み合わせて最終的な予測を生成するプロセスです。

機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディング

#ランダム フォレストは、バギングを利用する最も有名で一般的に使用されるモデルの 1 つです。これは、全体として機能する多数の決定木で構成されています。バギングの概念と特徴のランダム性を使用して、それぞれの独立したツリーを作成します。各決定木は、データからランダムなサンプルを取得することによってトレーニングされます。ランダム フォレストでは、さまざまなデータセットでトレーニングされただけでなく、結果を予測するためにさまざまな特徴を使用するツリーが作成されます。

機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディング

バギングには、通常、デシジョン ツリーのコレクション (ランダム フォレストと呼ばれる) とデシジョン ツリー以外のモデルのコレクションの 2 つのタイプがあります。どちらも同様に機能し、集計方法を使用して最終予測を生成します。唯一の違いは、ベースとなるモデルです。 sklearn には、デシジョン ツリー以外のモデルを作成するための BaggingClassifier クラスがあります。

## Bagging Ensemble of Same Classifiers (Decision Trees)
from sklearn.ensemble import RandomForestClassifier
classifier= RandomForestClassifier(n_estimators= 10, criterion="entropy")
classifier.fit(x_train, y_train)


## Bagging Ensemble of Different Classifiers
from sklearn.ensemble import BaggingClassifier
from sklearn.svm import SVC
clf = BaggingClassifier(base_estimator=SVC(),
n_estimators=10, random_state=0)
clf.fit(X_train,y_train)
ログイン後にコピー
Boosting

ブーストアンサンブル法は、以前のモデルの誤差に重みを与えることにより、弱い学習器を強い学習器に変換します。ブースティングでは、同型 ML アルゴリズムを逐次的に実装し、各モデルは前のモデルのエラーを減らすことでプロセス全体の安定性を向上させようとします。

機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディング

n 1 モデルをトレーニングする場合、データセット内の各データ ポイントに等しい重みが与えられるため、モデル n によって誤って分類されたサンプルにはより多くの重み (重要度) を与えることができます。 。誤差は n 人の学習者から n 1 人の学習者に渡され、各学習者は誤差を減らそうとします。

ADA Boost は、Boost を使用して予測を生成するための最も基本的なモデルの 1 つです。 ADA ブーストは、デシジョン ツリーのフォレスト全体を作成するランダム フォレストとは異なり、デシジョン スタンプのフォレストを作成します (スタンプとは、1 つのノードと 2 つの葉のみを持つデシジョン ツリーです)。誤分類されたサンプルにより高い重みを割り当て、エラー率が低くなるまでモデルのトレーニングを続けます。

from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier

dt = DecisionTreeClassifier(max_depth=2, random_state=0)
adc = AdaBoostClassifier(base_estimator=dt, n_estimators=7, learning_rate=0.1, random_state=0)

adc.fit(x_train, y_train)
ログイン後にコピー

Stacking

Stacking也被称为叠加泛化,是David H. Wolpert在1992年提出的集成技术的一种形式,目的是通过使用不同的泛化器来减少错误。

叠加模型利用来自多个基础模型的预测来构建元模型,用于生成最终的预测。堆叠模型由多层组成,其中每一层由几个机器学习模型组成,这些模型的预测用于训练下一层模型。

在叠加过程中,将数据分为训练集和测试集两部分。训练集会被进一步划分为k-fold。基础模型在k-1部分进行训练,在kᵗʰ部分进行预测。这个过程被反复迭代,直到每一折都被预测出来。然后将基本模型拟合到整个数据集,并计算性能。这个过程也适用于其他基本模型。

来自训练集的预测被用作构建第二层或元模型的特征。这个第二级模型用于预测测试集。

from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import StackingClassifier

base_learners = [
('l1', KNeighborsClassifier()),
('l2', DecisionTreeClassifier()),
('l3',SVC(gamma=2, C=1)))
]
model = StackingClassifier(estimators=base_learners, final_estimator=LogisticRegression(),cv=5)
model.fit(X_train, y_train)
ログイン後にコピー

Blending

Blending是从Stacking派生出来另一种形式的集成学习技术,两者之间的唯一区别是它使用来自一个训练集的保留(验证)集来进行预测。简单地说,预测只针对保留得数据集。保留得数据集和预测用于构建第二级模型。

機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディング

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

## Base Models
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC

## Meta Learner
from sklearn.linear_model import LogisticRegression

## Creating Sample Data
X,y = make_classification(n_samples=10000, n_features=20, n_informative=15, n_redundant=5, random_state=42)

## Training a Individual Logistic Regression Model
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
logrec = LogisticRegression()
logrec.fit(X_train,y_train)
pred = logrec.predict(X_test)
score = accuracy_score(y_test, pred)
print('Base Model Accuracy: %.3f' % (score*100))

## Defining Base Models
def base_models():
models = list()
models.append(('knn', KNeighborsClassifier()))
models.append(('dt', DecisionTreeClassifier()))
models.append(('svm', SVC(probability=True)))
return models

## Fitting Ensemble Blending Model
## Step 1:Splitting Data Into Train, Holdout(Validation) and Test Sets
X_train_full, X_test, y_train_full, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
X_train, X_val, y_train, y_val = train_test_split(X_train_full, y_train_full, test_size=0.33, random_state=1)

## Step 2: train base models on train set and make predictions on validation set
models = base_models()
meta_X = list()
for name, model in models:
# training base models on train set
model.fit(X_train, y_train)
# predict on hold out set
yhat = model.predict_proba(X_val)
# storing predictions
meta_X.append(yhat)
# horizontal stacking predictions
meta_X = np.hstack(meta_X)

## Step 3: Creating Blending Meta Learner
blender = LogisticRegression()
## training on base model predictions
blender.fit(meta_X, y_val)

## Step 4: Making predictions using blending meta learner
meta_X = list()
for name, model in models:
yhat = model.predict_proba(X_test)
meta_X.append(yhat)
meta_X = np.hstack(meta_X)
y_pred = blender.predict(meta_X)

# Evaluate predictions
score = accuracy_score(y_test, y_pred)
print('Blending Accuracy: %.3f' % (score*100))
---------------------------------
Base Model Accuracy: 82.367
Blending Accuracy: 96.733
ログイン後にコピー

总结

在阅读完本文之后,您可能想知道是否有选择一个更好的模型最好得方法或者如果需要的话,使用哪种集成技术呢?

在这个问题时,我们总是建议从一个简单的个体模型开始,然后使用不同的建模技术(如集成学习)对其进行测试。在某些情况下,单个模型可能比集成模型表现得更好,甚至好很多好。

需要说明并且需要注意的一点是:集成学习绝不应该是第一选择,而应该是最后一个选择。原因很简单:训练一个集成模型将花费很多时间,并且需要大量的处理能力。

回到我们的问题,集成模型旨在通过组合同一类别的几个基本模型来提高模型的可预测性。每种集成技术都是最好的,有助于提高模型性能。

如果你正在寻找一种简单且易于实现的集成方法,那么应该使用Voting。如果你的数据有很高的方差,那么你应该尝试Bagging。如果训练的基础模型在模型预测中有很高的偏差,那么可以尝试不同的Boosting技术来提高准确性。如果有多个基础模型在数据上表现都很好好,并且不知道选择哪一个作为最终模型,那么可以使用Stacking 或Blending的方法。当然具体那种方法表现得最好还是要取决于数据和特征分布。

最后集成学习技术是提高模型精度和性能的强大工具,它们很容易减少数据过拟合和欠拟合的机会,尤其在参加比赛时这是提分的关键。

以上が機械学習モデルの統合方法の概要: バギング、ブースティング、スタッキング、投票、ブレンディングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!