ランダムフォレストのOOBエラー推定

Machine LearningMachine LearningBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Pythonのscikit - learnライブラリを使ってランダムフォレストモデルのアウトオブバッグ(OOB)エラー率を測定する方法を示します。OOBエラー率は、それぞれのブートストラップサンプルにその観測値を含まない木の予測値を使って計算される各訓練観測値の平均エラーです。これにより、ランダムフォレストモデルを訓練中にフィットさせて検証することができます。

VMのヒント

VMの起動が完了したら、左上隅をクリックしてノートブックタブに切り替えて、Jupyter Notebookを使った練習にアクセスします。

時々、Jupyter Notebookが読み込み終了するまで数秒待つ必要があります。Jupyter Notebookの制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labbyにお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-49119{{"ランダムフォレストのOOBエラー推定"}} sklearn/datasets -.-> lab-49119{{"ランダムフォレストのOOBエラー推定"}} ml/sklearn -.-> lab-49119{{"ランダムフォレストのOOBエラー推定"}} end

必要なライブラリをインポートする

scikit - learn、NumPy、Matplotlibを含む必要なライブラリをインポートして始めます。再現性を保証するために、乱数シード値も設定します。

import matplotlib.pyplot as plt
from collections import OrderedDict
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier

RANDOM_STATE = 123

2値分類用のデータセットを生成する

次に、scikit - learnが提供するmake_classification関数を使って2値分類用のデータセットを生成します。この関数を使うと、サンプル数、特徴量数、クラスごとのクラスタ数、情報的な特徴量数を指定できます。再現性を保証するために、固定された乱数シード値を使います。

X, y = make_classification(
    n_samples=500,
    n_features=25,
    n_clusters_per_class=1,
    n_informative=15,
    random_state=RANDOM_STATE,
)

アンサンブル分類器を定義する

max_featuresパラメータに異なる値を持つ3つのランダムフォレスト分類器のリストを定義します。訓練中のOOBエラー率の追跡を可能にするために、warm_start構築パラメータをTrueに設定します。また、OOBエラー率の計算を可能にするために、oob_scoreパラメータをTrueに設定します。

ensemble_clfs = [
    (
        "RandomForestClassifier, max_features='sqrt'",
        RandomForestClassifier(
            warm_start=True,
            oob_score=True,
            max_features="sqrt",
            random_state=RANDOM_STATE,
        ),
    ),
    (
        "RandomForestClassifier, max_features='log2'",
        RandomForestClassifier(
            warm_start=True,
            max_features="log2",
            oob_score=True,
            random_state=RANDOM_STATE,
        ),
    ),
    (
        "RandomForestClassifier, max_features=None",
        RandomForestClassifier(
            warm_start=True,
            max_features=None,
            oob_score=True,
            random_state=RANDOM_STATE,
        ),
    ),
]

OOBエラー率を計算する

各分類器に対して、n_estimators値の範囲をループして分類器をデータセットにフィットさせます。各n_estimators値に対するOOBエラー率を記録し、OrderedDictオブジェクトに格納します。

error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)

min_estimators = 15
max_estimators = 150

for label, clf in ensemble_clfs:
    for i in range(min_estimators, max_estimators + 1, 5):
        clf.set_params(n_estimators=i)
        clf.fit(X, y)

        oob_error = 1 - clf.oob_score_
        error_rate[label].append((i, oob_error))

OOBエラー率を視覚化する

最後に、各分類器のOOBエラー率を推定器の数の関数としてプロットします。これにより、エラー率が安定する推定器の数を特定できます。Matplotlibを使ってグラフを生成します。

for label, clf_err in error_rate.items():
    xs, ys = zip(*clf_err)
    plt.plot(xs, ys, label=label)

plt.xlim(min_estimators, max_estimators)
plt.xlabel("n_estimators")
plt.ylabel("OOB error rate")
plt.legend(loc="upper right")
plt.show()

まとめ

この実験では、scikit - learnを使ってランダムフォレストモデルのアウトオブバッグ(OOB)エラー率を測定する方法を示しました。2値分類用のデータセットを生成し、アンサンブル分類器のリストを定義し、各分類器のOOBエラー率を計算し、結果を視覚化しました。この手法により、別個の検証セットが必要なくても、ランダムフォレストモデルのエラー率を推定することができます。