以下のサイトを参考に、ランダムフォレストを実装してみる。
やりたいこと
ランダムフォレストの実装
ロジスティクス回帰の目指すもの
複数の決定木から多数決で予測
実装する前の仮説
- 「フォレスト」「決定木」という単語から、樹形図を想起させる
- 「多数決で予測」という言葉から、なんかアナログな印象を受ける→予測精度にやや疑問(偏見)
- 得られるアウトプットとしては、●●点!という形を予想。
実装
どうやら回帰と分類2つのバージョンがあるらしい。
回帰版
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
# データの読み込み
boston = load_boston()
X = boston['data']
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
model = RandomForestRegressor(random_state=0)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print('score is', score)
分類版
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# データの読み込み
wine = load_wine()
X = wine['data']
y = wine['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
model = RandomForestClassifier(random_state=0)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
print('score is', score)
得られたアウトプット
回帰版
score is 0.8258927744705352
分類版
score is 0.9814814814814815
まとめ
分類版と回帰版、それぞれから得られたアウトプットに誤差が生じた。1より近い分類版の方が予測精度として優秀なのか、それとも逆なのか、いやそもそも0~1の間を取る値とは限らないのか、得られた値がなにを意味しているのかをわからずに、ただ実行してみただけに過ぎない。優秀なツールを手にしても、それがもたらす何かを、それを価値として受け手がいないと意味はない。まあ、とりあえず今のところは手を動かしてなんとなく全体の流れを理解するフェーズだと思い込んで、すすめる。