ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

機械学習のアルゴリズム実装(ランダムフォレスト)

以下のサイトを参考に、ランダムフォレストを実装してみる。

機械学習アルゴリズムの分類と実装まとめ - Qiita

 

やりたいこと

ランダムフォレストの実装

ロジスティクス回帰の目指すもの

複数の決定木から多数決で予測

実装する前の仮説

  • 「フォレスト」「決定木」という単語から、樹形図を想起させる
  • 「多数決で予測」という言葉から、なんかアナログな印象を受ける→予測精度にやや疑問(偏見)
  • 得られるアウトプットとしては、●●点!という形を予想。

実装

どうやら回帰と分類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の間を取る値とは限らないのか、得られた値がなにを意味しているのかをわからずに、ただ実行してみただけに過ぎない。優秀なツールを手にしても、それがもたらす何かを、それを価値として受け手がいないと意味はない。まあ、とりあえず今のところは手を動かしてなんとなく全体の流れを理解するフェーズだと思い込んで、すすめる。