見出し画像

データ分析奮闘記(Day10)[Titanic]その9〜アンサンブリングと大幅精度改善!〜

こんにちは!こちょすです!筋トレが趣味の僕ですが、年末年始はジムが休館だったりするので、正月太りしないように気をつけたいです!

前回まで

・ベースモデルとしてランダムフォレストを採用し、実行した結果、過学習が発生したので、ハイパーパラメータを調整した。
・特徴量エンジニアリングとして、同乗していた家族の人数という変数を作成し、モデルに組み込んだ(が、精度が落ちたので、不採用とした)

今回やりたいこと

・ランダムフォレスト以外の手法での分析
・複数モデルを組み合わせる(アンサンブリング)

ランダムフォレスト以外の手法での分析

「そもそもなんで色々な分析手法があるの・・・?」というのがよくわからなかったので、調べてみました。(駆け出しなので無知を許してください、、)
すると、手法によって得意な分析(前提としているデータの特徴)があって、予測精度に偏りが出るものらしいです。これを改善するためにやるべきが、

「複数モデルのアンサンブリング」

とのこと!先人たちが一生懸命考えた結果なので間違い無いでしょう!

ということで、今回はロジスティック回帰と多層パーセプトロンをやってみます!!楽しみ!

・ロジスティック回帰
これは初回の分析時に使った手法なので、特に解説なしで使います!

#ロジスティック回帰のインスタンスを生成
lr = LogisticRegression(random_state=42)
#擬似訓練データで学習
lr.fit(X_train, y_train)
#結果出力
print('Logistic Regression \n')
print('Train Score: {}'.format(round(lr.score(X_train, y_train), 3)))
print(' Test Score: {}'.format(round(lr.score(X_valid, y_valid), 3)))

・多層パーセプトロン

ニューラルネットワークの手法の1つらしい。ぐぐってみたところ、以下の記事がわかりやすかった!(記事の中でリンクされている記事を読んでからの方が理解できた)

では実装!

#多層パーセプトロンのインポート
from sklearn.neural_network import MLPClassifier
#インスタンスを生成
mlpc = MLPClassifier(hidden_layer_sizes=(100, 100, 10), random_state=0)
#学習
mlpc.fit(X_train, y_train)
#結果出力
print('Multilayer Perceptron \n')
print('Train Score: {}'.format(round(mlpc.score(X_train, y_train), 3)))
print(' Test Score: {}'.format(round(mlpc.score(X_valid, y_valid), 3)))

スクリーンショット 2019-12-30 22.36.48

精度はそこまで高くありませんが、過学習は起きていなさそうですね。

複数モデルを組み合わせる(アンサンブリング)

データ分析では1つのモデルだけでなく、複数のモデルを組み合わせて1つのモデルにした方がいい感じらしい(そしてそれをアンサンブリングという)ので、今回はランダムフォレスト、ロジスティック回帰、多層パーセプトロンの結果をアンサンブリングしていきたいと思います!

方法は色々あるらしいのですが、今回は一番簡単そうな平均値を採用するというものにします!

#3つの手法の予測値を出す(0となる確率と、1となる確率がそれぞれ返ってくる)
rfc_pred = rfc.predict_proba(X_test)
lr_pred = lr.predict_proba(X_test)
mlpc_pred = mlpc.predict_proba(X_test)
#予測値の平均値をとる
pred_proba = (rfc_pred + lr_pred + mlpc_pred) / 3
#予測値の0となる確率と1となる確率のうち、確率が高い方を返す
pred = pred_proba.argmax(axis=1)

よし!結果が出せました!苦労した第二版!ファイルに出力して提出してみます、、、!!

●前回

スクリーンショット 2019-12-30 23.09.53

●今回

スクリーンショット 2019-12-30 23.11.03

うぉおおおおおお!!!大幅改善です!!!

スクリーンショット 2019-12-30 23.11.43

2316人抜きです!笑

今回はえいやで決めながら進めましたが、1つ1つもう少し検討すればさらに精度はあげられそうなので、もう少しいじってみようと思います!引き続き見てくださいー!

Twitterもやっています!データサイエンティストとしての学びや、日頃の金融系SEとしての学びを発信してきますので、ぜひ応援お願いします!


この記事が気に入ったらサポートをしてみませんか?