kaggleにpythonを使ってみる(2) 〜sklearn
機械学習ライブラリのsklearn(scikit-learn)
前回の続き
予測モデルをつくるときに、機械学習のライブラリを使ってみようということで、sklearnを試してみる。
というかpandasに機械学習入ってると思ってた。。
まずはインストール。
$ pip install scikit-learn
機械学習はいろんなモジュールに分割されているので、必要なものを以下のように、importする。
# 決定木 from sklearn import tree # 線形モデル from sklearn import linear_model # ニューラルネットワーク from sklearn import neural_network # サポートベクターマシン from sklearn import svm
今回は、ロジスティック回帰を使う。
import pandas as pd from sklearn import linear_model
前回と同じように、train.csvをデータフレームとして読み込んで、train.Ageの欠損部分は、平均値で埋める。
説明変数には、AgeとSexを使う。Rなら、説明変数と目的変数に列をボコスカ入れればいいんだけど、sklearnの場合は、オブジェクトを注意して選ぶ。
説明変数はDataFrameオブジェクト、目的変数はSeriesオブジェクト。
あと、カテゴリカル変数が文字のときは、そのまま使えないみたいなので、直しとく。
[male, female]->[1, 0]って感じで。
train = pd.read_csv('train.csv') # データ加工 train.Age = train.Age.fillna(train.Age.mean()) for i, sex in enumerate(train.Sex): if sex=='male': train.Sex[i]=1 else: train.Sex[i]=0 # ロジスティック回帰 logiReg = linear_model.LogisticRegression()
目的変数は、Seriesオブジェクト。
y = train['Survived'] print type(y) >> <class 'pandas.core.series.Series'>
説明変数は、DataFrameオブジェクト。
X = train[['Age', 'Sex']] print type(X) >> <class 'pandas.core.frame.DataFrame'>
変数の準備ができたら、fit()とか、score()とかを使っていく。
logiReg.fit(X, y) print logiReg.coef_ # 回帰係数 print logiReg.intercept_ # 切片 print logiReg.score(X, y) # 決定係数 >> [[-0.0042936 -2.41865573]] >> [ 1.11913633] >> 0.786756453423
このモデルに、練習用データをそのまま使ってみる。
py = logiReg.predict(X) # 練習用データ当てはめ table = pd.crosstab(y, py) # 比較する table
表示される結果は、以下の通り。
col_0 | 0 | 1 |
---|---|---|
Survived | ||
0 | 468 | 81 |
1 | 109 | 233 |
正解率を計算すると、
(468+233)/(468+233+81+109.0) >> 0.7867564534231201
今回書いたコードは、ここ
-> http://nbviewer.ipython.org/6204124
githubはこちら
-> https://github.com/akiniwa/kaggle_titanic