ランダムフォレスト
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 41/58。
1本の決定木は不安定です。訓練データの数行を変えるだけで、質問の内容も変わります。この章では、多くの決定木に質問することで、木の予測を安定させます。
ランダムフォレストは多くの木を学習させ、それらに投票させます。ここでは、間欠泉について7本の木が答えます:
コードでは、学習させるモデルがもう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は木の数です。
有権者が多ければ、ミスは減る。
チャレンジ
中級盲導犬育成学校では、どの子犬が認定されるかを早い段階で知りたいと考えています。スターターコードではpuppies.csvを分割し、1本の決定木を評価して、木の本数を読み込みます。
- その本数の決定木からなるランダムフォレストを学習させ(
random_state=0)、テスト精度を出力します。 - どちらのモデルがどれだけ優れているか、または
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}")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ