ブースティング:概念と数学的直感
メニューを表示するにはスワイプしてください
ブースティングは、複数の弱学習器を順番に組み合わせ、それぞれの学習器が前の学習器の誤りを修正することに重点を置く手法。個々にはランダムよりわずかに優れた単純なモデルから、強力な予測モデルを構築。対照的に、バギングはすべての学習器を独立かつ並列に構築し、その予測を平均化する。ブースティングは逐次学習によって難しいケースを強調し、バギングは並列平均化によって分散を低減する。
ブースティングは、複数の弱学習器を組み合わせて強力な予測モデルを構築する逐次型アンサンブル学習手法。シーケンス内の各新しい学習器は、前の学習器が犯した誤りを修正することに重点を置いて訓練され、全体のアンサンブルが難しいデータポイントに対して適応的に予測精度を向上させる。
数学的直感:重み付き誤差とモデルの組み合わせ
弱学習器 h1(x),h2(x),…,hM(x) の集合があり、それぞれが順番に訓練されると仮定する。ブースティングは各学習器の精度に基づいて重み αm を割り当てる。全体の予測 F(x) は、これらの学習器の重み付き和として表される:
F(x)=m=1∑Mαmhm(x)各ラウンド後、ブースティングは訓練データ上の重みを更新する。学習器 m の重み付き誤差 ϵm は次のように計算される:
ϵm=∑i=1Nwi∑i=1Nwi⋅I(yi=hm(xi))ここで:
- wi はサンプル i の重み;
- yi はサンプル i の正解ラベル;
- hm(xi) はサンプル i に対する m 番目の学習器の予測;
- I(...) はインジケータ関数で、条件が真なら1、偽なら0を返す。
誤差が小さい学習器ほど高い重み(αm)を受け取り、その予測が最終モデルにより大きく寄与する。このプロセスを繰り返すことで、各学習器は前の学習器が苦手としたサンプルにより重点を置くようになる。
ブースティングでは、各弱学習器の学習後、アルゴリズムは誤分類されたサンプルの重みを増やし、正しく予測されたサンプルの重みを減らします。この調整により、次の学習器が前の学習器が苦手とした難しいケースにより注目するようになります。予測が難しいデータポイントに学習を集中させることで、ブースティングは各イテレーションごとにモデル全体の精度を体系的に向上させます。
123456789101112131415161718192021222324252627282930from sklearn.ensemble import AdaBoostClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # Load dataset data = load_breast_cancer() X, y = data.data, data.target # Split into train and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Define a weak learner: decision stump (tree of depth 1) weak_learner = DecisionTreeClassifier(max_depth=1, random_state=42) # Initialize AdaBoost with 5 weak learners ada = AdaBoostClassifier(estimator=weak_learner, n_estimators=5, random_state=42) ada.fit(X_train, y_train) # Predict on the test set y_pred = ada.predict(X_test) # Print accuracy print("Test set accuracy:", accuracy_score(y_test, y_pred)) # Show how each stage improves accuracy staged_scores = list(ada.staged_score(X_test, y_test)) for i, score in enumerate(staged_scores, start=1): print(f"After {i} weak learners: accuracy = {score:.2f}")
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください