読者です 読者をやめる 読者になる 読者になる

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

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

kaggleにpythonを使ってみる(3) 〜sklearn

sklearn python kaggle pandas random forest

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