[機械学習] A few useful things to know about machine learning

タイトルの論文はCommunication of the ACM, 2012のレビュー記事
ドラフトバージョンは下のリンクから読める。
http://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf

割と面白かったのでいくつか内容を紹介

概要

機械学習システムはデータから自動でタスク(スパムフィルタ、レコメンドなど)をどうやって実行するかを見出すことができます。

しかしながら機械学習システムを成功させるには教科書を読んだだけではなかなか見つけづらいお約束事とかがあって、思うようには行かないことが多い。

本文献では機械学習の研究者および実務に携わる人間が知っておくべきである事柄を12個に要約しています。

一般化が重要

機械学習のゴールは訓練データにはないデータに対しても一般化して推定ができるという点になります。単に訓練データのみ分類できればよいならば事例を丸暗記することによって可能となります。しかしこの場合は訓練データにないデータに対してはランダムな性能しか得られない。

このため、識別機の利用時には訓練データとテストデータを分離することが重要となります。機械学習の初期ではこの二つを分離することはあまりやられてきませんでした。これは当時は線形判別みたいな表現力の低い学習機を利用していたので問題にはならなかった(例えば統計でよくでてくる身長に対して体重を予測する単回帰分析とかであればデータにフィットさせたとしてもそこまでデータに対して最適化できない)

データだけでは十分ではない

例えば二値分類問題において、100次元の2値の特徴量をもつデータが100万点存在したとして、取りうる値である2^100に対して2^100 - 10^6点に関するデータの情報が抜けている。もしこれらに対してのラベルがランダムに振られていたとしたらどんな機械学習アルゴリズムを使ったとしてもランダムな推定よりもよくなることはない(いわゆる"no free lunch"定理)

しかし、データは実際にはランダムにすべての可能な数学的関数からサンプリングされた関数から生成されているわけではなく、実際は類似したデータは類似したラベルを持つなどの性質や変数間の従属関係が存在する。

このため解きたい問題のドメインの知識をうまく利用することにより適切な学習方法を選択してやることができる。

学習の際にデータに関する知識がいることは驚くべきことではない、機械学習は魔法ではなく、無から有を得ることはできない。
機械学習は農業に似ていて、農家が種と肥料をやることにより作物を得るのと同様に、機械学習アルゴリズムはデータとそれに対する知識を合わせることによって学習器を作れる。

過学習について

単純な分類器はデータが少なくても、大きく予測を外さない。一方複雑な分類器はデータが大きくないと、予測を大きく外すことが多い。

Feature Engineeringが鍵になる

いくつかの機械学習プロジェクトは成功し、他は失敗する。この二つを分ける一番重要な点はどういう特徴量を使ったかによる。多くの独立かつ予測したい値と相関がある変数があれば学習はうまくいく、一方で複雑にからみあった変数から学習するのは非常に難しい。そしてたいていの場合生のデータは複雑なのでそこからどういう変数を取り出すかがカギとなっていく。

高次元においては直感はうまく働かない

このため、一見特徴量を増やせば増やすほど悪くてもその特徴量が使われなくなるだけだと思われるが実際には精度が悪くなったりする。

データ数を増やせば賢いアルゴリズムを使うよりもよくなる

たいていの場合データを増やせば増やすほど精度は高くなる。さらに精度が高いとされている複雑な学習機はデータが増えたときにスケールしないことが多いので、まずは単純な学習器を試してみることが必要。

さらに機械学習の論文では精度や計算量しか評価されないが、実問題では人間が理解しやすい学習結果を提示することにより、機械学習の専門家とドメインの専門家が協業しやすくなる。

複数のモデルを学習する

多くの研究では自分の好きな学習器を一つ選んで、その優位性を議論することが多いが、実際にはbaggingのような複数の学習器を作成してそれらで多数決をとったりする方がよい。