Menu
CoddyTech

フォレストが機能する理由

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 42/58。

フォレストの木々は、意図的に異なるものになっています。それぞれがブートストラップサンプルで学習します。これは、復元抽出によってランダムに選ばれた行の集合で、一部の行は繰り返し選ばれ、一部の行は選ばれません。

各質問では、ランダムに選ばれた少数の特徴量も使います。木々はそれぞれ異なる間違いをし、投票によってそれらが相殺されます。2種類のホタル:

150匹のホタルを示す2つのグラフ。横軸は発光時間、縦軸は休止時間で、1種は青い円、もう1種は赤い三角形で示されている。左は1本の木で、その境界から細い帯状の領域が伸び、個々のホタルに達している。右は100本の木からなる森で、グループ間に滑らかな境界が1つある

森は、ほとんどの木が一致する場所だけを帯状に残します。

木は forest.estimators_ に格納されています:

third = forest.estimators_[2]
print(round(third.score(X_test, y_test), 3))

これは0.737を出力します。森全体のスコアは0.895です。

challenge icon

チャレンジ

中級

フォレストは自分自身を構成する木々に勝つでしょうか?スターターコードでは、160 kmのライドを6時間未満で完走したかどうかを示すライダーのデータであるriders.csvを使ってforestを学習させ、グラフを準備しています。

  1. テスト行を使って、フォレスト内の各木を評価します。
  2. スコアのヒストグラムを作成し、bins=10を指定して、赤い垂直線でforest_accを示します。
  3. フォレストが何本の木に勝つかを出力します。

別のライドではThe forest beats 88 of its 100 treesと出力され、次のグラフが描かれました。

「The Forest and Its Trees」というタイトルのヒストグラム。木のテスト精度は約0.53から0.85で、ほとんどが0.70付近にあり、赤い垂直線は約0.77で、ほとんどの棒より右にある

続いて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")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ