学習者言語の分析1(第3回)

  • 3.3.3 ランダムフォレスト
    • アンサンブル学習
    • ブートストラップ
    • ブースティング
    • イメージで理解するランダムフォレスト
    • ランダムフォレストの実装

3.3.3 ランダムフォレスト¶

アンサンブル学習¶

  • 複数の機械学習のモデルを組み合わせて、より精度の高いモデルを構築する方法。
  • これまで扱った機械学習のモデル、決定木、SVMでは単独のモデルを構築して、予測を行っていました。
  • そうではない場合もありますが、1人で考えるよりも何人かで考えた方が良い答えが導ける場合があります。
  • 機械学習にある種の多数決を導入します。

ブートストラップ¶

  • データから復元抽出という方法でデータのサンプリングを行う方法。
  • 例えば、データが24個あって、AからZのインデックスが付与されているとします。
  • このデータからブートストラップで、1組が5つのデータで構成されている3組のサンプルを抽出すると以下のようになります。

第1組: A,H,T,U,W,W

第2組: F,H,G,M,N,P

第3組: Q,R,S,S,S

  • データをひとつ選んでサンプルの袋に入れて、元のデータの袋から取り出したデータを復元するので復元抽出と言います。

ブースティング¶

  • 複数のモデルを用意して、「学習」を直列的に行います。前の段階で作ったモデルの結果を参考にして、次のモデルを構築します。

イメージで理解するランダムフォレスト¶

  • ブートストラップとブースティングという考え方を元に、復元抽出した複数のデータの組を用いて異なる決定木を構築する手法です。 img01

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

  • 先ほど利用したデータを用いてランダムフォレスト実装します。
In [1]:
# データの読み込み
import pandas as pd
data = pd.read_csv("../DATA01/TALL030302.csv",index_col=0)
data.head()
Out[1]:
sents words wps ttr score
JPN002 25 392 15.680000 0.725000 3
JPN004 18 288 16.000000 0.558333 3
JPN006 26 548 21.076923 0.716667 5
JPN008 21 332 15.809524 0.583333 3
JPN010 18 391 21.722222 0.583333 3
In [2]:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# データの分割
X_train,X_test,y_train,y_test = train_test_split(data[["sents","words","wps","ttr"]],data["score"],test_size=0.2,random_state=0)

# インスタンスの生成
clf = RandomForestClassifier(random_state=1234)

# 学習
clf = clf.fit(X_train,y_train)

# 予測精度の出力
clf.score(X_test,y_test)
Out[2]:
0.56