Python のアンサンブル学習とランダム フォレスト アルゴリズムを 10 分でマスターする

Python のアンサンブル学習とランダム フォレスト アルゴリズムを 10 分でマスターする

導入

機械学習モデルは、複数の業界にわたる意思決定プロセスの不可欠な要素となっていますが、ノイズの多いデータセットや多様なデータセットを扱う際には苦労することがよくあります。ここでアンサンブル学習が役立ちます。

この記事では、アンサンブル学習の秘密を明らかにし、その強力なランダム フォレスト アルゴリズムを紹介します。ツールキットを磨きたいデータ サイエンティストでも、堅牢な機械学習モデルを構築するための実用的な洞察を求めている開発者でも、この記事は誰にとっても役立つ内容になっています。

この記事を読み終える頃には、アンサンブル学習と Python でのランダムフォレストの仕組みについて包括的に理解できるようになります。したがって、経験豊富なデータ サイエンティストであっても、機械学習の能力を拡大したいだけの場合でも、機械学習の専門知識をレベルアップできます。

1. アンサンブル学習とは何ですか?

アンサンブル学習は、複数の弱いモデルの予測を組み合わせて、より強力な予測を得る機械学習手法です。アンサンブル学習の概念は、各モデルの予測力を最大限に活用することで、単一モデルのバイアスとエラーを減らすことです。

理解を深めるために、人生から例を挙げてみましょう。動物を見たが、それがどの種に属するかわからないとします。つまり、1 人の専門家に質問するのではなく、10 人の専門家に質問し、その過半数が投票することになります。これは「ハード投票」として知られています。

ハード投票では、各分類器のクラス予測を考慮し、最も多くの投票数を獲得したクラスに従って入力を分類します。一方、ソフト投票では、各クラスの各分類器の確率予測を考慮し、そのクラスの平均確率(分類器の確率の平均)に基づいて、最大確率で入力をクラスに分類します。

2. アンサンブル学習はいつ使用すればよいですか?

アンサンブル学習は、分類精度の向上や回帰モデルの平均絶対誤差の削減など、モデルのパフォーマンスを向上させるためによく使用されます。さらに、アンサンブル学習は常により安定したモデルを生成します。アンサンブル学習は、モデル間に相関関係がない場合に最も効果的に機能し、各モデルが全体的なパフォーマンスを向上させる独自の何かを学習できます。

3. アンサンブル学習戦略

アンサンブル学習はさまざまな方法や目的に適用できますが、実際には、実装と使用が容易なことから、3 つの戦略が人気を集めています。 3 つの戦略は次のとおりです。

  1. バギング: バギングはブートストラップ集約の略で、データセットのランダムなサンプルを使用してモデルをトレーニングする統合学習戦略です。
  2. スタッキング: スタッキングは、統合学習戦略であるスタックされた一般化の略語です。この戦略では、データでトレーニングされた複数のモデルを組み合わせた単一のモデルをトレーニングします。
  3. ブースティング: ブースティングは、モデルをトレーニングするために誤分類されたデータを選択することに重点を置いたアンサンブル学習手法です。

この記事では、それぞれの戦略についてさらに詳しく説明し、Python を使用してデータセットでこれらのアンサンブル モデルをトレーニングする方法を説明します。

4. バギングアンサンブル学習

バギングでは、ランダム サンプル データを使用し、学習アルゴリズムと平均を使用してバギング確率を取得します。これはブートストラップ集約とも呼ばれます。複数のモデルの結果を集約して包括的な結果を取得します。

この方法には次の手順が含まれます。

  1. 元のデータセットを置換して複数のサブセットに分割します。
  2. 各サブセットごとに基本モデルが開発されました。
  3. すべての予測を実行する前に、すべてのモデルが同時に実行され、すべての予測結果が集計されて最終的な予測結果が得られます。

Scikit-learn は、BaggingClassifier と BaggingRegressor を実装する機能を提供します。 BaggingMetaEstimator は、元のデータセットのランダムなサブセットを識別して各基本モデルに適合させ、投票または平均化によって各基本モデルの予測を最終予測に集約できます。このアプローチは、構築プロセスをランダム化することでばらつきを減らします。

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

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

【バギング回帰モデル】:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingRegressor.html

次に、この記事では例を使用して、scikit-learn で bagging 推定器を使用する方法を説明します。

 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)

バギング分類器には考慮すべきパラメータがいくつかあります。

  • base_estimator: バギング法で使用される基本モデル。ここでは決定木分類器を使用します。
  • n_estimators: バギング法で使用される推定器の数。
  • max_samples: 各基本推定器がトレーニング セットから抽出するサンプルの数。
  • max_features: 各基本推定器のトレーニングに使用される特徴の数。

ここで、分類器をトレーニング セットに適合させてスコアを付けます。

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

回帰タスクでも同様のことができますが、回帰推定器を使用する点が異なります。

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

5. スタックされたアンサンブル学習

スタッキングは、複数の推定値を組み合わせてバイアスを減らし、正確な予測を生成する手法です。次に、各推定器からの予測が結合され、クロス検証によってトレーニングされた最終的な予測メタモデルに入力されます。スタッキングは、分類問題と回帰問題の両方に適用できます。

写真

スタックアンサンブル学習

スタッキングの手順は次のとおりです。

  1. データをトレーニング セットと検証セットに分割します。
  2. トレーニング セットを K 個のフォールドに分割します。
  3. K-1 フォールドで基本モデルをトレーニングし、K 番目のフォールドで予測を行います。
  4. 各フォールドの予測が得られるまで、手順 3 を繰り返します。
  5. ベースモデルをトレーニング セット全体に適合させます。
  6. モデルを使用してテスト セットの予測を行います。
  7. 他のベースモデルについても手順 3 ~ 6 を繰り返します。
  8. テスト セットからの予測を新しいモデル (メタモデル) の機能として使用します。
  9. メタモデルを使用して、テスト セットの最終的な予測を行います。

以下の例では、まず 2 つの基本分類器 (RandomForestClassifier と GradientBoostingClassifier) とメタ分類器 (LogisticRegression) を作成し、次に K 分割交差検証を使用してこれらの分類器の予測結果 (iris データセットのトレーニング データ) から特徴を抽出し、メタ分類器 (LogisticRegression) をトレーニングします。

基本分類器が K 分割交差検証を使用してテスト データセットで予測を行い、これらの予測がメタ分類器の入力機能として使用された後、両方の予測を使用してテスト セットで予測を行い、その精度をスタックされたアンサンブル モデルの精度と比較します。

 # 加载数据集data = load_iris() X, y = data.data, data.target # 将数据拆分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 定义基础分类器base_classifiers = [ RandomForestClassifier(n_estimators=100, random_state=42), GradientBoostingClassifier(n_estimators=100, random_state=42) ] # 定义元分类器meta_classifier = LogisticRegression() # 创建一个数组来保存基础分类器的预测结果base_classifier_predictions = np.zeros((len(X_train), len(base_classifiers))) # 使用K折交叉验证进行堆叠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) # 在基础分类器预测的基础上训练元分类器meta_classifier.fit(base_classifier_predictions, y_train) # 使用堆叠集成进行预测stacked_predictions = np.zeros((len(X_test), len(base_classifiers))) for i, clf in enumerate(base_classifiers): stacked_predictions[:, i] = clf.predict(X_test) # 使用元分类器进行最终预测final_predictions = meta_classifier.predict(stacked_predictions) # 评估堆叠集成的性能accuracy = accuracy_score(y_test, final_predictions) print(f"Stacked Ensemble Accuracy: {accuracy:.2f}")

6. アンサンブル学習の改善

ブースティングは、弱い学習者を強い学習者に変換することでバイアスと分散を減らす機械学習のアンサンブル手法です。これらの弱学習器はデータセットに順番に適用され、最初に初期モデルが作成され、それがトレーニング セットに適合されます。最初のモデルのエラーが特定されると、それを修正するための別のモデルが設計されます。

アンサンブル学習技術を改善するために使用される一般的なアルゴリズムと実装がいくつかあります。これらの中で最も注目すべきものについては以下で説明します。

6.1 アダブースト

AdaBoost は、弱い学習器を順番に使用してトレーニングする効果的なアンサンブル学習手法です。各反復では、正しく予測されたインスタンスに割り当てられる重みを減らしながら、誤った予測を優先します。困難な観察に対するこの戦略的な重点により、AdaBoost は時間の経過とともに精度が高まり、最終的な予測は弱い学習者の多数決または加重合計によって決定されます。

AdaBoost は回帰タスクと分類タスクの両方に適した一般的なアルゴリズムですが、この記事では Scikit-learn を使用してデモンストレーションを行い、分類問題への応用に重点を置いています。次の例で、これを分類タスクに適用する方法を見てみましょう。

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

この例では、Scikit-learn の AdaBoostClassifier を使用し、n_estimators を 100 に設定します。デフォルトの学習者は決定木ですが、これはユーザーが変更できます。さらに、決定木のパラメータを調整することもできます。

6.2 エクストリーム勾配ブースティング(XGBoost)

eXtreme Gradient Boosting (通称 XGBoost) は、ブースティング アンサンブル学習アルゴリズムの最適な実装の 1 つであり、並列コンピューティング機能により単一のコンピューター上で非常に効率的に実行されます。 XGBoost は、機械学習コミュニティによって開発された 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 ライトGBM

LightGBM はツリー学習に基づく別の勾配ブースティング アルゴリズムですが、他のツリーベースのアルゴリズムとは異なり、葉ベースのツリー成長アプローチを使用するため、収束が速くなります。

写真

葉の成長/画像出典: LightGBM

次の例では、この記事では LightGBM を使用してバイナリ分類問題を解決します。

 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'], )

結論

アンサンブル学習とランダムフォレストは、機械学習の専門家やデータ サイエンティストによって頻繁に使用される強力な機械学習モデルです。この記事では、アンサンブル学習の基本原理と応用シナリオを紹介し、最も人気のあるアルゴリズムとそれらを Python で使用する方法を紹介しました。


<<:  GPT-4 が Nature の査読者になる?スタンフォード大学と清華大学の卒業生による約5,000の論文がテストされ、その結果の50%以上が人間の査読者と一致した。

>>:  人工知能は将来の建築をどのように変えるのでしょうか?

ブログ    
ブログ    

推薦する

顔認識情報セキュリティは大きな注目を集めており、専門家の代表者らは多くの提案を行っている。

近年、人工知能技術の成熟に伴い、顔認識の応用範囲はますます広がっています。 「顔スキャン」は、効率、...

私は普通のAIニューロンです

[[345868]]私はAIニューロンです私はこの世界に生まれたばかりの AI ニューロンです。私...

自動運転と軌道予測についてはこちらの記事をお読みください。

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

データ変換ツールにおけるAIの未来

人工知能はデータ変換ツールに革命をもたらし、効率、精度、リアルタイム処理を向上させます。シームレスな...

...

中国のAI臨床診断がネイチャー誌に初掲載:71人の専門家が人間の医師を上回る精度の報告書を寄稿

[[257228]] 【新知能紹介】中国内外の科学者71人が共同で、検査結果を検知し、医師と同じくら...

一般相対性理論の予測に沿って、M87ブラックホールの最新の研究結果がネイチャー誌に掲載されました。

9月27日、ネイチャー誌は45の機関からなる国際科学研究チームの最新の研究成果を発表した。 200...

日本は人間支援ロボットの世界標準を確立したいと考えている

日本は人間支援ロボットの規格策定に向け、国際標準化機構(ISO)と協議を行っている。ロボット工学に対...

機械学習の錬金術の理論的根拠はどれほど強固なのでしょうか?

機械学習の分野は近年急速に発展しています。しかし、機械学習理論に対する理解は依然として非常に限られて...

古典的なアルゴリズム: 順序付けられていない配列の K 番目に大きい値を見つける

[[409182]] 1. K番目に大きいものを見つけるタイトル順序付けられていない整数配列がありま...

...

...

百度の張亜琴社長:AIは現代の最も変革的な力である

[[205882]]北京時間10月10日朝のニュースによると、中国の検索大手、百度はシアトル地域にオ...

Google ドキュメントでテキスト要約を自動的に生成できるようになりました。

私たちの多くは、毎日たくさんのファイルを処理する必要があります。新しい文書を受け取ったとき、通常は、...