kaggleにpythonを使ってみる(3) 〜sklearn
sklearnのランダムフォレストを使う。
前回の予測モデルは、線形モデルのロジスティック回帰。
今回は、ensembleモジュール内にあるランダムフォレストを試してみる。
あと、データを加工するときとか、評価するときの便利メソッドもいくつかメモ。
from sklearn import preprocessing from sklearn import ensemble import pandas as pd
最初にインポートするのは、preprocessingモジュールとensembleモジュール。
sklearn.preprocessing
preprocessingモジュールは、生データを処理して、後々の解析に適した整形をしてくれる。
実際に、練習用csvを読み込んで使ってみる。
LabelEncoder()は、カテゴリカルデータを、数値(ラベル)で表現するメソッド。
train = pd.read_csv('train.csv') # 年齢のNaNデータを補完。 train.Age = train.Age.fillna(train.Age.mean()) # 性別をラベルで表示する。 le_sex = preprocessing.LabelEncoder() train.Sex = le_sex.fit_transform(train.Sex) print train.Sex.head() >> 0 1 1 0 2 0 3 0 4 1 Name: Sex, dtype: int64
fit_trainsformで、整形している。わざわざ、le_sexというふうにオブジェクトを作っているのは、もとに戻すときに、inverse_trainsform()を使うから。
# [female, male] -> [0, 1] train.Sex = le_sex.fit_transform(train.Sex) # [0, 1] -> [female, male] train.Sex = le_sex.inverse_trainsform(train.Sex)
train.Embarkedも加工しておく。
le_embarked = preprocessing.LabelEncoder() train.Embarked = le_embarked.fit_transform(train.Embarked)
データが準備できたので、予測モデルをつくる。
ensemble.RandomForestClassifier()
ランダムフォレストも使いかたは、ロジスティック回帰と大体同じ。
fit() -> predict() という流れ。
y = train['Survived'] X = train[['Age', 'Sex', 'Pclass', 'SibSp', 'Parch', 'Fare', 'Embarked']] rf = ensemble.RandomForestClassifier() rf.fit(X, y) py = rf.predict(X)
sklearn.metrics
前回は、予測の評価にpd.crosstab()を使ったけど、sklearnにも比較用のモジュールがある。
from sklearn.metrics import confusion_matrix confusion_matrix(py, y) >> array([[539, 19], [ 10, 323]]) from sklearn.metrics import accuracy_score accuracy_score(py, y) >> 0.96745230078563416
nbviewer
-> http://nbviewer.ipython.org/6229646