忘れないようにメモっとく

機械学習とかプログラミングとか。

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

github
-> https://github.com/akiniwa/kaggle_titanic