ランダムフォレストを試してみた

はじめに

業務の中で分類問題を解決したい!という局面があり、

G検定の勉強もしている中で分類モデルについて何かあるかなと思って調べてみる中で

何か試してみようと思ったのでなんとなくランダムフォレストを試してみることにしました。

正直今の解決したい課題に対してどのモデルが適切か分かってはいないので本当になんとなくです。

ロジスティック回帰とか簡単そうなやつから試してみようかなと思いましたが、

2値分析をしたいわけではないのでとりあえずのとっかかりでランダムフォレストを実装してみます。

ランダムフォレストとは

ランダムフォレストは分類問題の解決に使える機械学習のアルゴリズムの一つです。

どうやら回帰問題についても使えるようですが、今回は分類問題の解決のために使います。

ランダムフォレストは決定木を用いて出力を予測する手法です。

決定木とは分類するための判定を行う分岐路のことです。

例えば雲量が9割以上かどうか、1割以下かどうか、雨が降っているかどうかと言った判定をしていくような分岐路が決定木と呼ばれるものになります。

これらの決定木を複数作成し、分岐させて出力を予測するものをランダムフォレストと言います。

すんごいざっくりですが。

ランダムフォレストでは複数の特徴量についてランダムに選定し、決定木をランダムに複数組み合わせて作成していきます。

特徴としてはデータの全データを使わずに一部のデータを取り出して学習すること(ブートストラップサンプリングというらしい)、

複数の決定木を作成し予測した結果から多数決を用いて最終的な出力を決定することが挙げられます。

複数のモデルを用いて学習させることをアンサンブル学習

全データから一部のデータを用いて学習させることをバギングというらしいです。

実際に試してみる

Pythonで機械学習を実装する際にはscikit-learnというライブラリがあります。

データマイニングやデータ解析を行うことができるライブラリでディープラーニングを試す以外は

デファクトスタンダートとなっているようです。

とりあえず学習データとテストデータを準備。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

実際に試す。

forest = RandomForestClassifier(n_estimators=100)

forest.fit(X_train, y_train)
y_pred = forest.predict(X_test)
print(y_pred)

出力結果はこちら。

[1 0 0 1 2 0 2 2 1 0 0 0 2 1 0 0 2 0 1 2 0 2 2 2 1 0 2 2 1 0 2 0 0 0 0 0 2
 0 2 1 2 1 0 1 2]

動かすだけならこれだけでいける。

load_irisは機械学習でよく使われるデータセットです。

読み込んだデータセットを分割し、学習用データセットとテスト用データセットに分けています。

そこからランダムフォレストのインスタンスを作成し、実際に分析。

それで出力された結果が上記のような値です。

0, 1, 2はIrisデータセットの中の花の種類を表しています。

最後に

とりあえずどう動かせるかということで試してみましたが、

実際に業務に活かすにはどういうデータセットを準備しなければいけないのかを考えなければ。

今日は動作確認を試してみたというところで終わりにしたいと思います。

それではー

コメント

タイトルとURLをコピーしました