LoginSignup
0
0

More than 3 years have passed since last update.

データ分析 タイタニック号3

Posted at

Aidemy 2020/10/31

はじめに

 こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
 今回は、「データ分析 タイタニック号」の3つ目の投稿になります。どうぞよろしくお願いします。

*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・⑤問題のモデル化、予測、解決

モデルの作成

使用するアルゴリズムの選択

・Chapter2でデータ処理が完了したので、ここからは実際にモデルにデータを渡して予測し、解決するところまでを行う
・はじめに、どのアルゴリズムでモデルを作成するかを決める必要がある。予測問題には「分類」と「回帰」があり、前者はデータをクラスに分けて渡されたデータがどの「クラス」に属するかを予測するもので、後者はデータの「値」を予測するものである。
・今回のタイタニック号の予測問題はSurvivedが0か1かを「分類」するものである。使用するアルゴリズムは、「ロジスティック回帰」「SVC」「k-NN」「決定木」「ランダムフォレスト」によるモデルを作成する。

データの準備

・モデルに渡す「X_train」「y_train」「X_test」を準備する。いつもはsklearn.model_serectionのtrain_test_split()を使っているが、今回は自分で分割する
・X_trainはSurvived以外のtrain_df、y_trainはSurvivedのみのtrain_df、X_testはPassengerId以外のtest_dfを代入すれば良い。

・コードスクリーンショット 2020-10-24 18.32.01.png

ロジスティック回帰

・(復習)ロジスティック回帰シグモイド関数を使って二値のクラス分類を行うものである。シグモイド関数は0から1の間で値を取る関数である。LogidticRegression()を使ってモデルを作成する。
・今回は目的変数であるSurvivedが0か1かを説明変数AgeやPclassなどを使って予測する。

・また、モデルに渡すデータであるが、ロジスティック回帰のみ、X_trainとY_trainをさらに8:2の割合で訓練データとテストデータに分けたものを使用する

・コード(結果も含む)スクリーンショット 2020-10-24 19.03.30.png

どの説明変数(特徴量)が結果を左右しやすいのかを可視化

「どの説明変数(特徴量)が結果を左右しやすいのか」を知るには、目的変数と説明変数との間の偏回帰係数を計算する。値が大きいほど結果を左右しやすいと言える。
・偏回帰係数の計算は、「model.corf_」で行う。DataFrameで扱いたいので、train_dfのcolumnsを行("Feature")に持つDataFrameを作成し、新しい列として"Partial regression coefficient"を作り、偏回帰係数をそこに格納する。
・DataFrame作成時にdelete(0)としているのは、偏回帰係数の計算の過程で0が出てくると計算ができず、NaNになってしまうからである。

・コードスクリーンショット 2020-10-24 19.25.54.png

・結果スクリーンショット 2020-10-24 19.26.25.png

SVM

・(復習)サポートベクターマシン(SVM)を使って分類するアルゴリズム。分類の境界線が他クラスと最も距離が遠くなるように引かれるため、汎化されやすいカーネル法によって非線形から線形に変換しているので、非線形データにも対応できる。線形SVMはLinearSVC()で、非線形SVMはSVC()で使用する。

・コード(LinearSVCも同様に作成すればOK 今回の結果は「83.84」)
スクリーンショット 2020-10-24 19.48.48.png

k-NN

・(復習)k-NNは、予測データと類似している教師データをk個抽出し、最も多かったクラスを予測結果として出力するアルゴリズムである。学習コストが0であり、予測精度が高いことが特徴である。KNeighborsClassifier()で使うことができ、抽出するデータの個数kは引数に「n_neighbors」を指定することで設定できる。

・コードスクリーンショット 2020-10-24 19.56.44.png

決定木

・(復習)決定木は、データから抽出されたルールが木構造で表されるので、このような名前になっている。ルールとは、例えば説明変数Ageが1(16才〜32才)ならPclassについて判定する、といったものである。これらが進んでいくと最終的にはクラスを分類することができる。DecisionTreeClassifier()で使用することができる。

ランダムフォレスト

・(復習)ランダムフォレスト多数の決定木を構築し、それぞれの結果のうち最も多数のものを最終的な結果として出力するアルゴリズムである。このような複数の分類器を使用する学習をアンサンブル学習という。RandomForestClassifier()で使用でき、決定木の個数は引数に「n_estimators」を指定することで行える。

モデルの評価

・以上で作成したそれぞれのモデルの精度(acc)をDataFrameで一覧にすることで、どのモデルを使用するのが良いかを決める。

・コードスクリーンショット 2020-10-24 21.52.03.png

・結果スクリーンショット 2020-10-24 22.10.51.png

モデルの保存

・前項の結果で見た通り、決定木とランダムフォレストを使ったモデルの精度が最も高いことがわかった。今回はよりモデルの汎化が期待できそうなランダムフォレストのモデルを使用することに決め、このモデルをcsvファイルで保存する。
・csvファイルの書き出し、保存は「to_csv」で行える。ファイルには、'PassengerId'としてtest_dfのPassengerIdを格納した列と'Survived'としてランダムフォレスト(決定木)の予測結果'Y_pred'を格納した列を持つDataFrameとしてファイルを作成する。

・コード(ファイルパスは架空のもの)
スクリーンショット 2020-10-24 22.24.47.png

まとめ

・前回までで作成したデータをtrain_X,train_y,test_Xに分割する。これらのデータを使ってモデルを作成する。
「どの説明変数(特徴量)が結果を左右しやすいのか」を知るには、偏回帰係数を計算し可視化すると良い。
・それぞれのモデルのscoreから、どのモデルの精度(acc)が最も高いかを比較し、一番高かったモデルはcsvファイルで保存する。

今回は以上です。最後まで読んでいただき、ありがとうございました。

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