予測には連続する値(売り上げの予想など)と連続しない値(動物の画像など)2種類がある。
連続値を予測する問題を回帰問題といい、連続しない離散値を予測する問題を分類問題という。
回帰問題については統計で最もシンプルな手法として線形回帰が挙げられる。例えば身長と体重の組み合わせであれば身長が大きくなれば体重が重くなるような直線的な傾向を示す。その直線の値を返す事で身長から体重を予測する事ができる。
線形回帰は回帰問題に用いられるが、ロジスティック回帰は分類問題に用いられる。
画像出典:知識のサラダボウルー線形回帰分析とロジスティック回帰分析
分岐路を作って特徴量がどんな値になっているかを順々に考えていき、最終的に一つのパターンを予測できるという手法。
ロジスティック回帰とランダムフォレストで計算した例を紹介します。
どの特徴量に注目すべきかなど、特徴量エンジニアリングの部分はこちらを参照してください。
import numpy as np
import pandas as pd
#ロジスティック回帰
from sklearn.linear_model import LogisticRegression
#ランダムフォレスト
from sklearn.ensemble import RandomForestClassifier
train = pd.read_table('./train.tsv')
test = pd.read_table('./test.tsv')
X_train=train.drop('id',axis=1)
X_test=test.drop('id',axis=1)
X_train=X_train.drop('embarked',axis=1)
X_test=X_test.drop('embarked',axis=1)
X_train=X_train.drop('age',axis=1)
X_test=X_test.drop('age',axis=1)
X_train=X_train.drop('sibsp',axis=1)
X_test=X_test.drop('sibsp',axis=1)
X_train=X_train.drop('parch',axis=1)
X_test=X_test.drop('parch',axis=1)
le = sp.LabelEncoder()
le.fit(X_train.sex.unique())
X_train.sex = le.fit_transform(X_train.sex)
le.fit(X_test.sex.unique())
X_test.sex = le.fit_transform(X_test.sex)
y_train=X_train['survived']
X_train=X_train.drop('survived',axis=1)
clf = LogisticRegression(penalty='l2', solver='sag', random_state=0)
# clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
sub['survived'] = list(map(int, y_pred))
sub['id'] = test['id']
sub.to_csv('submission.csv', index=False)
ロジスティック回帰:正解率 60.5%
ランダムフォレスト:正解率 73.9%
初見なので、精度は気にしません。
計算に用いるデータの工夫、パラメータ調整でこの2つの手法でも80%以上の正解率を達成している事例はあるので慣れてきたらいろいろ試して見てください。
Kaggleに登録したら次にやること ~ これだけやれば十分闘える!Titanicの先へ行く入門 10 Kernel ~