Pythonで機械学習を学ぶために基礎を整理します。とにかくシンプルに、言葉を並べながら整理して、ゆくゆく書く記事とリンクさせていきます。
機械学習の概要
機械学習には、教師あり学習、教師なし学習、強化学習などがある。
- 教師あり学習:説明変数から目的変数を予測するモデルを構築
- 教師なし学習:訓練データそのものに着目し、パターンや示唆を発見
- 強化学習:行動と結果に対する報酬によって、実現したい行動ルールを獲得
※機械学習の前に基本統計量や散布図を作成しデータ分析を行うべき
教師あり学習
目的変数(正解データ、従属変数)を説明するための変数を説明変数(特徴量、予測変数)と呼ぶ。y=f(x)はyが目的変数、xが説明変数。f(x)はモデル。
回帰(目的変数が数値)と分類(カテゴリに分類する)に分けられる。
アルゴリズムには、重回帰、ロジスティック回帰、k近傍法、決定木、SVM、ニューラルネットワーク、ランダムフォレスト、勾配ブースティングなどがある。
主な流れ
- モデル構築のためのクラスのインスタンス化
- データを説明変数と目的変数に分ける
- 訓練データとテストデータに分ける
- モデルの学習
- モデルの汎化性能の確認
説明変数を統計的に選択する方法として、変数増加法、変数減少法、ステップワイズ法などがある。また、選択の基準にRMSE、AIC(赤池情報量規準)、BIC(ベイズ情報量規準)などがある。
教師なし学習
多数のデータを類似のグループに分けるクラスタリング(探索的なデータ分析)が代表的な手法(k-means法など)。主成分分析、マーケットバスケット分析などがある。
強化学習
環境におけるエージェントの行動の結果を評価し、望ましい結果には高い報酬、望ましくない結果には低い報酬を与える。アプローチには動的計画法、モンテカルロ法、TD学習などがある。
Python モデルの評価・精度を上げる
機械学習ではモデルの選定、ハイパーパラメータ、データの量・質によって、精度が大きく変わります。正しい精度の測定法とチューニング方法(グリッドサーチなど)を確認します。
主なアプローチ
- 過学習を防ぐ(学習に使用したデータに適合してしまい、新しいデータに適合できない)ための方法(交差検証法、ホールドアウト法など)を学ぶ
- 精度を測る概念(混同行列、ROC曲線)、分類・回帰の評価指標を学ぶ
- 複数のモデルを組み合わせるアンサンブル学習(バギング、ブースティング(勾配ブースティング))を学ぶ
特徴量の扱い
学習不足の場合、特徴量を増やせないか、データを水増しできないかなどを試す。
過学習の場合、特徴量を次元削減を行う。特徴選択(特徴量のサブセットを選択する)、特徴抽出(PCAなどを行う)の2種類がある。(モデルの解釈を優先する場合、基本的に特徴選択を選ぶ)
モデルの種類を整理する
プロファイリングモデルは、説明変数と目的変数で、同じ期間のデータで生成するモデル。
予測モデルは、説明変数と目的変数で、別の期間のデータで生成するモデル。
より実践的な内容に向け、ファイナス機械学習の読書記録もまとめています。