データハンドリング 前処理 可視化 機械学習

タイタニック生存者予測~ランダムフォレスト~

投稿日:5月 26, 2019 更新日:

有名なタイタニックのデータを使って、RandamForestを使って生存者を予測します。

前処理について

  • 前処理とは
    • データ分析に適したデータセットの作成を目的とした生データの加工処理のこと
  • 前処理の必要必要性
    • 機械学習を実行するためには、条件に合ったデータ形式となっている必要がある。上記を満たさない場合は、精度がおちたり、正しく動作しないこともある
  • 前処理の具体的な内容
    1. 目的変数と特徴量を一つのレコードにもつデータセットを作成する
    2. データの欠損値や異常値に適切な値に補正または削除する
    3. カテゴリカルデータをダミー変数に変換する
    4. データごとの数値のばらつきや大きさを調整するため標準化する
  • 上記前処理の効果
    1. 目的変数と特徴量を関連付けることができる
    2. 欠損値があると、機械学習が実行できない。また、削除するのではなく、適切に補正することで、データを歪めることなくデータ数を増やすことができる
    3. カテゴリカル変数をデータとして活用可能になる
    4. 機械学習の精度が向上する
  • 前処理まえのチェックポイント
    1. 欠損値はないか
    2. 異常値はないか
    3. カテゴリカル変数はないか
PassengerIdSurvivedPclassSexAgeSibSpParchFareCabinLnameNamePrefix
0103maleStudent101_quartileNBraund,Mr.
1211femaleAdult104_quartileCCumings,Mrs.
2313femaleYoung Adult001_quartileNHeikkinen,Miss.
3411femaleYoung Adult104_quartileCFutrelle,Mrs.
4503maleYoung Adult002_quartileNAllen,Mr.
PassengerIdSurvivedPclassSexAgeSibSpParchFareCabinLnameNamePrefix
010314100710019
121100103218220
231307000732916
341107103226720
45031700171519

モデル選定について

今回は、生存予測(分類)を行いますが、その他も検討するべきです。

  1. ロジスティック回帰
  2. SVM
  3. 決定木
  4. k最近傍法
  5. その手法の概要をそれぞれ記述せよ

ロジスティック回帰

ロジスティック関数を用いて、2クラスに分類する方法

長所:計算が軽い
長所:結果が確率で表現される
長所:オッズ比も計算できるため、1単位増えた時の影響も見積もれる
短所:非線形な分類には適さない
短所:複雑な分類では成語低くなる
短所:自由度が低い

SVM

長所:比較的計算が比較的軽い
長所:結果が確率で表現される
長所:最適化するべきパラメータが少ない
短所:特徴量が多いと計算量が膨大になる
短所:現象を理解しにくい
短所:人に説明しにくい
短所:基本的には2クラス分類しかできない

分類木

長所:計算が軽い
長所:回帰、多クラスにも対応できる
長所:結果を可視化できる
短所:過学習しやすい
短所:非線形に対応できない
短所:精度が悪い

最近棒法

長所:異常値に強い
長所:アルゴリズムがわかりやすい
長所:多クラスにも対応できる
短所:次元が多いと精度が落ちる
短所:計算が重い
短所:特徴量の選定が難しい

関数の説明(内容と狙い)

  • simplify_ages
    • 内容:年齢を一定のバンドで分類し、カテゴリ変数に変換
    • 狙い:異常年齢の判定と、同一カテゴリ内での年齢差の効果を除外した。
  • simplify_cabins
    • 内容:Null場合Nを代入。データを文字列の頭文字だけとした。
    • 狙い:欠損値の対応と、頭文字だけにすることで部屋番号?を除外し大分類でのデータとした
  • simplify_fares
    • 内容:naの場合-0.5を代入。ビン幅を定義し、各ビンに対応するデータに名称を付ける
    • 狙い:faresの異常値判定と、同一カテゴリ内での差異を除外した
  • format_name
    • 内容:姓と名を分割する
    • 狙い:同一名字から家族を特定する
  • drop_features
    • 内容:Ticket, Name, Embarkedを特徴量から除外する
    • 狙い:生存に無関係な特徴量を除外し計算量を削減する
  • encode_features
    • 内容:オブジェクト型の特徴量を数値に変換する
    • 狙い:機械学習を行う際は数値型である必要があるため

モデル選択の基準

精度

可能な限り最も正確な回答を得ることが常に必要とは限らない。使用目的によっては、近似で十分な場合がもある。その場合は、より大まかな方法を使用することで、処理時間を大幅に削減できることがある

トレーニング時間

トレーニング時間は、アルゴリズムやデータ量に大きく依存する。時間的な制約がある場合、モデル選定の基準となる

線形性

データの傾向が直線に従う場合は、線形分類。そうでなければ非線形分類を利用する。非線形データに線形分類を使うと大きく精度が低下する

特徴の数

特徴の数が多いと一部の学習アルゴリズムは処理が遅くなり、実行不可能なほどトレーニング時間が長くなる。このケースには、SVMが適している

考察

  1. 男性と比較して女性の方が倍以上生存率が高い。特に、teenager以上でその差は顕著
  2. childは男の子のほうが生存率が高い
  3. babyは性別に関係なく生存率が高い

上記1,2,3から女性子供が優先して救助されたと考えられる。

上記より、性別、年齢共に特徴量として有効であることがわかる

考察

  1. 男性と比較して女性の方が倍以上生存率が高い
  2. 乗客の階級pclassが下がる(数値的には上がる)ごとに、生存率も低下する傾向がある
  3. pclassが下がると、男女の生存率の差は小さくなる傾向にある

上記より、階級pclassの高差も考慮しているが、それよりも女性を優先的に救助していたことがわかる。また、性別、pclass共に特徴量として有効であるが、性別の方が情報量が多いことがわかる 。

 

ランダムフォレストについて

決定木とはどのような手法か

決定木の学習は、元となる集合を属性値テストに基づいて部分集合に分割することを繰り返すことで、目的とするデータを抽出する手法。 分割には、情報利得が最大になるような特徴量で次々にデータを分割していく。 情報利得には、ジニ係数やエントロピーなどを使う。

ランダムフォレストとはどのような手法か

複数の決定木の結果を組み合わせて判断するアンサンブル学習の一つ。元データをブートストラップサンプリングによりN個に分割し、N個の決定木で分類し、多数決で最終的な分類結果を決定する方法。 このとき、普通の決定木を使うと、各決定木間で結果の相関が強く、精度が向上しない。 そこで、決定木の識別に用いる特徴量をあらかじめ決めた数だけランダムに選択するすることで、 決定木間の相関をなくし精度を高める工夫をしている。

ランダムフォレストの長所と短所について

長所

  • 説明変数が多数であってもうまく働く
  • 学習・評価が高速
  • 説明変数の重要度(寄与度)を算出可能
  • Out of Bag エラーの計算により、クロスバリデーションのような評価が可能
  • AdaBoost などと比べて特定の説明変数への依存が少ないため、クエリデータの説明変数が欠損していても良い出力を与える

短所

  • 説明変数のうち意味のある変数がノイズ変数よりも極端に少ない場合にうまく働かない
  • 複雑なデータではSVMなどの分類手法に比べて汎化性能が下がる
  • 調整が必要なハイパーパラメータの数が多い

ランダムフォレストの選定理由

  • 説明変数の重要度を算出することができるため

train score = 0.9719101123595506

test score = 0.7877094972067039

accuracy = 0.7877094972067039

ハイパーパラメーターについて

ハイパーパラメーターとは何か

機械学習のモデルに外部から与えるパラメータのこと

ランダムフォレストのハイパーパラメーターについて

  1. n_estimators: いくつ決定木を作成するか
  2. max_depth: どの深さの決定木を作成するか
  3. max_features: サンプリングする特徴量の数をいくつにするか
  4. criterion: 情報利得に何を活用するか
  5. n_jobs: 使用するCPUコアの数

各ハイパーパラメーターの取りうる値と影響

  1. 整数。少なすぎるとバリアンスを下げることができない。多いと計算時間が大きくなる。
  2. 整数。多いと計算時間がかかる。少ないと精度が出ない。
  3. 整数。多いと決定木間の相関が強くなり、バリアンスを下げることができない。少ないと精度が出ない。
  4. ジニ係数orエントロピー。
  5. 整数。多いと計算が早いが、PCの負荷が高まる。

array([[93, 17], [21, 48]])

accuracy = 0.7877094972067039

検証とは

検証は何か

学習で用いていないデータでモデルの性能を評価すること

なぜ検証を行う必要があるのか(Accuracyだけではダメな理由も含めること)

学習データに対して過学習している場合、通常のデータでは同様の性能が出ない可能性があるため。 また、Accuracyだけでなく、他の性能指標をみる必要があるのは、 判別クラスの数に大きな偏りがある場合、yes10:no990などの場合すべてをnoと判定すれば99%の精度となるが、 このような場合、yesをいかに正解するかの方が重要となることが多い。

主な検証方法

  • クロスバリデーション
  • ブートストラップ
  • kホールド法

k-Fold法

K-分割交差検証について

データをK個に分割し、k-1個のデータで訓練し、残りの1個でテストするという工程をK回繰り返し評価する手法。

K-分割交差検証はデータセットを何個に分割するか

k個に分割する

データセットを分割する際、その個数はどのように考えると良いか

分割数は精度と実行時間のトレードオフとなる。 kの値は大きければ大きいほど、正確に評価できるが、 kが大きければそれだけ実行に時間がかかるのでなるべく小さい値にしたい。

K-分割交差検証は何回の検証を行うか

K回実施する

K-分割交差検証の結果は、最終的にどのように求められるか

K回の評価の平均値を評価結果とする

Best parameters set found on development set: {‘criterion’: ‘gini’, ‘max_depth’: 10, ‘max_features’: ‘log2’, ‘min_samples_leaf’: 5, ‘min_samples_split’: 5, ‘n_estimators’: 9} Best score: 0.8356741573033708

train_score = 0.9578651685393259 +/- 0.003382470387301199

test_score = 0.8044692737430168 +/- 0.011449107001072165

0.95786516853932591

 

Lname、Sex、NamePrefixの順に重要であったことがわかる

-データハンドリング, 前処理, 可視化, 機械学習

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

kaggle:メルカリ チュートリアル(EDA探索的データ解析)

Contents1 概要説明1.1 データ探索の流れ2 ライブラリインポート3 データ読み込み4 目的変数5 送料6 アイテムカテゴリ¶7 ブランド8 アイテム説明8.1 前処理 tokenizati …

no image

データフレームの操作一覧

データフレームでよく使う機能をチートシートとしてまとめました。 Contents1 インデックス操作2 型変換3 欠損値4 ソート5 一括処理6 可視化7 結合8 集約9 重複10 条件抽出11 出力 …

no image

kaggle:House Price チュートリアル(LASSO回帰とRIDGE回帰)

Contents1 概要説明1.1 作業の流れ2 ライブラリインポート3 データの読み込み4 前処理4.1 対数変換4.2 ダミー変数化4.3 欠損値処理4.4 データの分割5 モデリング5.1 RI …

no image

KFold + XGBoost + EDAチュートリアル | PortoSeguro コンペ

Contents1 概要説明2 コンペの説明3 目次4 コンペの説明5 イントロ6 データ準備6.1 データロード6.2 欠損値の確認6.3 中央値で欠損値補完7 特徴量とターゲットの分割8 データの …

no image

クラスタリングの実践(中学生スポーツテストデータ)

Contents1 クラスタリングの実践1.1 概要1.2 データの読み込み1.3 データの確認1.4 主成分分析1.5 クラスタリング クラスタリングの実践 概要 ・目的:中学生のスポーツテストデー …