Menu
CoddyTech

ランダムフォレスト

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

1本の決定木は不安定です。訓練データの数行を変えるだけで、質問の内容も変わります。この章では、多くの決定木に質問することで、木の予測を安定させます。

ランダムフォレストは多くの木を学習させ、それらに投票させます。ここでは、間欠泉について7本の木が答えます:

横一列に並んだ7本の小さな木。それぞれの下に投票結果が表示されています:はい、はい、いいえ、はい、はい、いいえ、はい。すべての投票から1つのボックスへ矢印が伸びており、ボックスには「フォレスト:はい、5対2で投票」と書かれています

コードでは、学習させるモデルがもう1つ増えます:

from sklearn.ensemble import RandomForestClassifier

forest = RandomForestClassifier(n_estimators=100, random_state=0)
forest.fit(X_train, y_train)
print(forest.score(X_test, y_test))

間欠泉の300日分で、これは0.893を出力します。一方、1本の木では0.813でした。n_estimatorsは木の数です。

有権者が多ければ、ミスは減る。

challenge icon

チャレンジ

中級

盲導犬育成学校では、どの子犬が認定されるかを早い段階で知りたいと考えています。スターターコードではpuppies.csvを分割し、1本の決定木を評価して、木の本数を読み込みます。

  1. その本数の決定木からなるランダムフォレストを学習させ(random_state=0)、テスト精度を出力します。
  2. どちらのモデルがどれだけ優れているか、またはA tieを出力します。

別の学校で50を試す場合:

Single tree: 0.740
Forest: 0.860
The forest wins by 0.120

次に1を試してみましょう。木が1本だけのランダムフォレストは、驚くほど成績が悪くなります。次のレッスンではその理由を説明します。

自分で試してみよう

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

# 盲導犬訓練校の子犬:落ち着き、集中力、大きな音に驚く度合い(1から10)、
# 体重、育ててくれる家族と過ごした月数、盲導犬として適格(1)か不適格(0)か
puppies = pd.read_csv("puppies.csv")
X = puppies[["calmness", "focus", "noise_startle", "weight_kg", "months_with_family"]]
y = puppies["qualified"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
trees = int(input())

# 以下の行は変更しないでください:超えるべき単一の決定木
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
tree_acc = tree.score(X_test, y_test)
print(f"Single tree: {tree_acc:.3f}")

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

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

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

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