0
0

タイタニックで76%を超えたアルゴリズム

Posted at

前回前々回と初心に帰りタイタニックをやっていたわけですが(転職活動長引きすぎてスキルが理由なのか不安になっていたわけですが)どうもサンプルの提出物の精度を超えませんでした。
最初にやったのは欠損値を大真面目に考えたこと

そして次には名前の敬称を特徴量としたわけですが、

どれも良くて75%でした。(検証用データは90%近くなのに)

そこで今度は使用する学習アルゴリズムを決定木系ではなくSVMを使ってみました。
初期値なのでRBFカーネル(ガウスカーネル)である程度ソフトマージンなのかな?

コード

変数選択用

元々変数選択をしようとしたのでそれ用のコードを書きました。

x2 = x
x_te2 = x_test

続いてSVMは決定木系のアルゴリズムではないので前処理として標準化が必要ですので、行います。

from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
ss.fit(x2)
x2 = ss.transform(x2)
models = []
for i in range(200):
    x_train, x_val, y_train, y_val = tts(x2, y, random_state=i, test_size=0.2, stratify=y)
    model1 = RFC()
    model1.fit(x_train, y_train)
    models.append([model1, model1.score(x_val, y_val), model1.score(x_train, y_train)])
    model2 = LGBMC()
    model2.fit(x_train, y_train)
    models.append([model2, model2.score(x_val, y_val), model2.score(x_train, y_train)])
    model3 = SVC()
    model3.fit(x_train, y_train)
    models.append([model3, model3.score(x_val, y_val), model3.score(x_train, y_train)])
models = sorted(models, key=lambda x:x[1], reverse=True)

これでモデルが作られました。見てみましょう。
image.png

SVMが最も精度が高くなりました(LightGBMよりも)。
ではこれで予測をしてみましょう。

from scipy.stats import mode
x_te2 = ss.transform(x_te2)
y_pred1 = models[0][0].predict(x_te2)
y_pred2 = models[1][0].predict(x_te2)
y_pred3 = models[2][0].predict(x_te2)
y_pred = []
for i in range(len(y_pred1)):
    y_pred.append(mode([y_pred1[i], y_pred2[i], y_pred3[i]])[0])

pred = pd.DataFrame(y_pred1)
pred.columns = ["Survived"]
pred.index = x_test.index
pred.sort_index().to_csv("submit_allval11.csv")

これで提出した結果がこちらになります。
image.png
ようやくこれでサンプルの提出物の精度を超えました。
しかし何が原因だったんだろう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0