Pythonではじめる機械学習ー2章まとめ

長らく更新が空いてしまいました。
読んだ本を忘れないように、章ごとにまとめていきます。

今回はPythonではじめる機械学習の2章(教師あり学習)です。
もっと細かい部分を見たい場合は書籍を見てください。

概要

教師あり学習

  • 学習用データとして、入力データと出力データのセットを用いる
  • クラス分類(classification)と、回帰(regression)に大別される
    • クラス分類
      あらかじめ定められた選択肢の中からクラスラベルを予測する(ex.スパムメールの判別)
    • 回帰
      連続値を予測する(ex.年収の予測)

モデルの汎化

  • 汎化  : 新たなデータにも適切に予測できている
  • 過剰適合: 学習用データセットにのみ過剰に適合し、新たなデータの予測精度が低い
  • 適合不足: 学習用データセットにも適合できていない

モデルの複雑さ

  • 訓練データセットに対して複雑すぎるモデル構築を行うと、過剰適合になりやすい
  • データセットのバリエーションが増えれば、複雑なモデルも構築しやすい
  • 個人的には、シンプルイズベスト。なるべく単純なモデル構築を心がけたい。

教師あり機械学習アルゴリズム

  • k-最近傍法(k-NN)
    • 予測したいデータに近いk個の学習用データポイントを参考に多数決で出力を決める
  • 線形回帰
    • y = w_0x_0 + w_1x_1 + ・・・+bで表される線形関数で予測を行う
    • 高次元のデータセットに適する
  • リッジ回帰
    • 線形回帰の重みにL2正則化を行う
    • L2正則化によって、各重みが0に近づく
  • Lasso
    • 線形回帰の重みにL1正則化を行う
    • L1正則化によって、いくつかの重みが0となる。(=自動で変数選択される)
  • ロジスティック回帰
    • シグモイド関数 \sigma(t) = \frac{1}{1 + e^{-t}})をベースに予測モデルを作成
    •  F(x) = \frac{1}{1 + e^{-(w_0x_0 + w_1x_1 + ・・・+b)}}  で表される
    • 2値分類に利用される
  • SVM
    • 判別する境界線を、各グループ間からの距離が最大になるように
      (どのグループからも離れた場所になるように)引く
    • 非線形の場合には、カーネル法を用いる方法がある。(例:RBF法)
    • 同じような意味を持つ特徴量からなる中規模データセットに強力
    • データのスケールを調整する必要がある。
    • パラメータに敏感
  • ナイーブベイズクラス分類器
    • 特徴量間に条件付き独立性を仮定し、ベイズの定理に基づく分類器
    • クラス分類にのみ適用可能
    • 大規模データセット、高次元のデータセットに適する
    • 線形モデルよりも高速だが、精度が劣ることが多い
  • 決定木
    • 非常に高速で、データのスケールを考慮する必要が無い。
    • 可視化が可能で説明しやすい
    • 決定木を拡張させたものに以下がある。
    • ランダムフォレスト
      • ほとんどの単一の決定木よりも高速で、頑健で、強力
      • データのスケールを考慮する必要が無いが、高次元の疎なデータには不適
    • XGBoost
      • ランダムフォレストよりも時間がかかるが、予測は早く、メモリ使用量も小さい
      • パラメータに敏感だが、強力で、Kaggleでもよく使用される
    • LightGBM
      • XGBoostと同じ勾配ブースティングの一種。XGBoostよりも計算時間が短い傾向がある
      • 決定木の構造が複雑になりやすく、過学習しやすい
  • ニューラルネットワーク
    • 非常に複雑なモデルを構築できる
    • 大規模データセットに有効
    • データのスケールを調整する必要があり、パラメータに敏感

後々、各アルゴリズムの詳細説明記事を書いていこうと思う。

精度比較(分類)

titanicデータセットでいくつかのアルゴリズムの精度を比較した。
実装の詳細はこちらを参照。
brskun.hatenablog.com
以下に各アルゴリズムの精度結果を示す。

f:id:brskun:20210202001328p:plain
アルゴリズムの精度結果
  • titanicの学習用データのうち、8:2の割合でtrain_data:test_dataに分割している。
  • k-NNはtrain_dataへの当てはまりは良いが、test_dataへの当てはまりは悪い。ベースラインとして手始めに構築してみる、というレベルで良いかも。
  • SVMでは、カーネル(RBF法)を使用する場合に、標準化によって精度が大きく向上している。
  • また、決定木系のアルゴリズムが、test_dataに対して適合率が高い傾向にある。
  • 決定木系の結果はハイパーパラメータのチューニングを全く実施していないので、精度向上が見込める。

まとめ

教師あり学習とその代表的なアルゴリズムについてtitanicで実装してみた。
決定木系が精度が高い傾向にあるが、標準化を実施したSVM(rbf法)も良い当てはまりの結果となっていた。

のちほど、回帰についても比較をした結果を更新したい。