機械学習を様々なアプリケーションに適用するためのアドバイス

Andrew Ngの講義で面白いスライドがあったので紹介.研究ではなく様々なアプリケーションへ機械学習を適用するときに実践すべきTipsが3つのトピックに関して語られています.以下は,スライド内で自分が覚えておくべきと思った部分を抽出し,メモ書きしたもの.実サービスやKDD Cup等のコンテストで機械学習を用いる度に,見返してみるのも良いかもしれません.

トピック1.Debugging Learning Algorithms

  • 適当な分類器を学習させ,スパムフィルタリングでエラー率20%を達成したら次に何をすべきか?
    • 訓練データを増やしたり,より良い分類器を適用したり,色々な改善策が考えられる…
  • 診断法1 : バイアス-バリアンス分析
    • 現在の分類器のボトルネックはバイアスか,バリアンスか
      • 訓練データでもエラー率が20%程度なら,バイアスが高いと考えられる
      • この場合,もっと特徴量の数を増やすべき
      • 訓練データの精度がテストデータよりもよければ,バリアンスが高いと考えられる
      • 過学習の可能性が高いため,データ数を増やす,特徴選択を行う等の処置が適当
  • 診断法2 : 目的関数が適当か
    • アルゴリズムが正しくても収束先が不適当ならば,そもそも目的関数を変更すべき
      • スパムフィルタリングならば,precisionを重視した目的関数を設定
      • 目的と合った収束先を持つアルゴリズムに変更することも考えられる
    • 収束先が適当ならば,後は収束性の問題
      • 反復数を増やす,より高速に収束する最適化法を用いるなど

トピック2. Error Analysis

  • 実際のアプリケーションは,前処理から分類器学習まで多くの機械学習手法がパイプライン的につながっている
  • コンポーネントが最終結果にどの程度影響しているのか分析することは,その後の改良のために非常に重要

トピック3. Getting started on a learning problem

  • 設計をじっくり考えてから実装するか,とりあえず実装してエラー診断・分析を繰り返し改良を重ねるか
    • 前者は,スケーラブルで高精度,汎用性の高いシステムを作りたい時に有用
    • いち早くサービスなどの形で世に送り出したいならば,後者の方が良い