フォレストが機能する理由
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 42/58。
フォレストの木々は、意図的に異なるものになっています。それぞれがブートストラップサンプルで学習します。これは、復元抽出によってランダムに選ばれた行の集合で、一部の行は繰り返し選ばれ、一部の行は選ばれません。
各質問では、ランダムに選ばれた少数の特徴量も使います。木々はそれぞれ異なる間違いをし、投票によってそれらが相殺されます。2種類のホタル:
森は、ほとんどの木が一致する場所だけを帯状に残します。
木は forest.estimators_ に格納されています:
third = forest.estimators_[2]
print(round(third.score(X_test, y_test), 3))これは0.737を出力します。森全体のスコアは0.895です。
チャレンジ
中級フォレストは自分自身を構成する木々に勝つでしょうか?スターターコードでは、160 kmのライドを6時間未満で完走したかどうかを示すライダーのデータであるriders.csvを使ってforestを学習させ、グラフを準備しています。
- テスト行を使って、フォレスト内の各木を評価します。
- スコアのヒストグラムを作成し、
bins=10を指定して、赤い垂直線でforest_accを示します。 - フォレストが何本の木に勝つかを出力します。
別のライドではThe forest beats 88 of its 100 treesと出力され、次のグラフが描かれました。
続いてCoddyがあなたのグラフについて説明します。
自分で試してみよう
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 160 kmのチャリティーライドの参加者:6時間未満で完走した場合 (1)、しなかった場合 (0)
riders = pd.read_csv("riders.csv")
features = ["weekly_km", "long_ride_km", "age", "years_riding", "rest_days", "sleep_hours"]
X = riders[features].to_numpy() # 普通の配列。フォレストの各木が想定する形式
y = riders["under_6h"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
forest_acc = forest.score(X_test, y_test)
fig, ax = plt.subplots()
ax.set_title("The Forest and Its Trees")
ax.set_xlabel("Test accuracy")
ax.set_ylabel("Trees")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ