Keepdata株式会社 開発Divの瀧田です。
それでは前回に引き続き、kaggleコンペに参加した結果と感想の第二回をお伝えします。
今回はモデルの作成をしていきます。
データの確認
まず、前回で確認していなかったそれぞれのデータを確認します。
「Titanic: Machine Learning from Disaster」のコンペのDataメニューから、
今回提示されている3つのデータを確認します。
- train.csv
- test.csv
- gender_submission.csv
train.csvは、モデルを作成するために利用する訓練用データです。
test.csvは、作成したモデルの精度を確認するテストデータです。
gender_submission.csvは、女性は全て生き残ったと仮定する提出用サンプルデータです。
train.csvの内容には
- 乗客ID
- 生き残ったか
- チケットのクラス
- 名前
- 性別
- 年齢
- 兄弟や配偶者の数
- 親、子供の数
- チケットの番号
- 運賃
- キャビン番号
- 乗船した港
などが含まれます。 この訓練用データに対して様々な処理を施し学習に利用します。
訓練データの加工
訓練データから学習する前に、様々な処理を行います。 今回行った処理は次の3つです。
- 欠損値に対する処理を行う。
- 機械学習ライブラリに適用するために、文字列データを数値データに変換する。
- 学習に利用しないデータを削除する。
1. 欠損値に対する処理を行う。
サンプルデータの全てのレコードが完全な状態であることは稀です。
大体の場合、データが欠けていたり、他のレコードとは掛け離れた値になっていたり、
広範囲にデータが分布していたりします。
これらのデータを、うまく補間してやることは、学習モデルを作る上でとても重要です。
今回の訓練用データには、例えば年齢が欠けているレコードが含まれています。
このような場合、そのレコードを削除するか、何らかの値で補間する必要があります。
補間する場合、最も多いデータで埋めたり、平均値で埋めたりなどしますが、
今回は乗客の年齢の平均値で埋めました。
実は全体の平均で補間するこの方法は、あまりよろしくないのですが、
その理由は次回説明することとします。
2. 文字列データを数値データに変換する。
今回のpythonのライブラリを利用して学習を行う場合、
文字列データは利用出来ない為、数値に変換しておく必要があります。
例えば性別(male,female)のようなデータは、別の値に変換しておく必要があります。
今回は、maleを0、femaleを1に変換しました。
また、乗船した港のような識別子的な意味しか持たないデータを名義特徴量といいます。
名義特徴量の場合、ダミーの変数に変換する必要がありますが、
pythonでは、get_dummiesという便利な関数が用意されているので、
簡単に変換することが出来ます。この辺りのライブラリの充実している点が、
機械学習でpythonが選ばれている理由の1つですね。
3. 学習に利用しないデータを削除する。
今回、名前、チケット番号、キャビン番号のデータは特徴量として利用しなかった為、
dropメソッドを使い訓練用データから削除しました。
ランダムフォレストのアルゴリズムで予測する。
ここまでで、欠損値の補間、文字列データの数値変換、不要なデータの削除という
3つの前処理を訓練用データに対して行いました。
この訓練用から'Survived'列を除いたデータと'Survived'列のみのデータに分割して、
ランダムフォレストで学習を行います。
また、精度を測定する際に学習に利用したデータで検証を行うと
過学習してしまいかなり高い精度が出てしまいます。
そのような場合、K分割交差検証を行うことでより正しい検証結果を得られます。
今回はここまでです。
次回はモデルの改善のお話をしていければと思います。