機械学習

しばらく、資料集の紹介だったので、ここらへんで専門に勉強しない人に向けた機械学習についての解説をすこしだけします。 主なタスクは、以下の様なものです。 

(1) Supervised
訓練用にサンプルを用意して、機会に学習させた後、テスト用の別なサンプルでどれぐらい学んだかをテストします。 教師が必要で、通常人間が訓練用サンプルを準備します。 

 Classification (分類)
 あらかじめ決めておいたカテゴリーに、サンプルを分類します。

 Regression
 サンプルごとに、数字を予測します。 

(2) Unsupervised
訓練用のサンプルを必要としないタスク。 教師なし。

 Anomaly Detection
 めずらしいサンプル、ほかと違うサンプルを見つけます。

 Clustering
 サンプルがどのように分類できるか、カテゴリーを発見します。

 Summarization *注意
 データの傾向などを見つけます。 

 *注意 自然言語処理にも、要約文を作り出すタスクがあり、自動要約と呼ばれます。

============

Data Mining と Machine Learning の違い。

どちらも同じ人工知能のサブエリアなのですが、傾向として、大量のデータを処理して情報を得るのが Data Miningで、ややこしいサンプルのモデルを作って解析したり、少量のデータから出来るかぎりを搾り出す傾向にあるのが Machine Learningです。 

したがって、Data Miningでは、ClassificationとRegressionの場合、データが簡単でその代わりに大量にあるケース、そして、データが大量で人には分析しきれないケースでは、Anomaly Detection, Clustering, Summarization に、より力を入れています。 アプリケーションとしては、ウェブサイトのログ解析、金融機関のクレジットカードの使用履歴から、自己破産の危険性があるリスクの高い個人を特定する、などがあります。 

Machine Learningでは、Classification, Regressionに力を入れる傾向があります。 そもそもどのように数値に落としたらよいのか良く分からないぐらい複雑なデータ、サンプルであることも多いです。 分類するにしても、カテゴリーの数がサンプルの数より多かったりします。 (structured prediction) 例えば、文章を文法解析したり、プロテインのアミノアシッドの列から、プロテインの形や機能を予測してみたり、といったことです。 

Data Miningの代表的な国際会議は KDD、Machine Learningの代表的な国際会議は ICML、NIPSなどがあります。 

============

機械学習の手順(教師ありの場合)

例えば、明日の天気を予測するシステムを作るとします。 x は衛星から見た今日の気象状況のデータで、 y は明日の天気だとします。 x をみて、y を予測するのが今回の仕事です。 

Model
問題にあわせてモデルを作ります。 モデルは数式やルールで表されます。 見たことがないサンプルの x がわかれば、今持っているルールやパラメータ Θ を使って、y という予測がたてられるな、という決まりごとをあらかじめ作っておきます。  

Optimization
学習のステップです。 訓練用のサンプルをみて、x と y の対応具合から、モデルのパラメータ Θ を決めます。  Θ を正しく選べれば、見たことのないサンプルでも予測ができるわけです。 モデルを訓練用データにフィットさせます。 

この Model にはこの種類の Optimizationしかうまくいかない、というように、二つを綺麗に切り離すことができない種類の学習システムもあります。 最近の流れでは、ModelもOptimizationも、数学的に解きやすくて、いい特徴がある綺麗な形に直す傾向が強いです。 かなり高度な数学が必要になってきます。 ニューラルネットワークなどは、あまり良い数学的特徴を持っていないため、最近、あまり流行っていません。 

一言で言えば簡単ですが、Model、Optimizationの組み合わせでいろいろな問題がでてきます。 

モデルにサンプルを渡す際、サンプルのどの側面(Feature)について教えるのか選ばなければなりません。 例えば犬と猫を分類するとします。 鳴き声に注意を払えばいいのか? ヒゲがあるかどうか見るべきか? それとも、色の違い? ここが違うと、同じModelとOptimizationでも、まったく結果が違ってきます。 

さらに、モデルが複雑過ぎて、学習するのに時間がかかりすぎたり、うまく一般化しないことも良くあります。 訓練用のデータは完璧に分類できるのに、テスト用は全然正しく分類できなくなってしまう、(Over-fitting)など。 人間でいえば、数学の練習問題を丸暗記したけど、理解できなくてテストは全然ダメ、という感じです。 

同じような Model なら、より良い、綺麗に一般化する Optimization を行うほうが良いです。 モデルの複雑さも、どの程度学習内容が一般化するかを決めるので、問題に適応したうまい組み合わせを作ることが求められます。 また、理論的に、この条件下ではこの方法が良い、という証明も盛んです。 

============

Modelのアプローチは、パラメータ Θ をどのように持つか、で、かなり変わってきます。

まず、最近盛んなのが、Linear Classifierという種類。
Perceptron, Winnow, Naive Bayes, Support Vector Machine, Linear Discriminant Analysis, Gaussian Processなどです。 Featureごとに重みを掛け算し、それらを全て足してから一定の数より高ければ正解、そうでなければ間違っている、という感じのモデルを様々な方法で学習します。 

次は、ニューラルネットワーク
Linear Classifierの延長線上にあります。 Featureごとに重みを掛け算し、いくつか(全てではない)足してから一定の数より高ければ、もう一度重みを掛け算して、足し算。。というように、Linear Classifierみたいなのをネットワークの形にしたがって、順番に何回か繰り返します。 

そして、Decision Tree。 
一つめのFeatureの数字が、ある一定より上だったらこちら、下だったらこちら、という感じで、まず、一つのFeatureだけを見て分類します。 その結果に対して、別のFeatureを見て、また分類します。 それを繰り返して、残ったこの区分は全部正解、この区分は外れ、みたいにするわけです。 どのFeatureをどの順番で、何回使って分類するかはデータを見て決めます。

Inductive Logic Programming。(ILP)
Decision Treeをさらにおしすすめて、Predicate Logicみたいなルールを作っていきます。

k-Nearest Neighbor。
がらっと方向性が変わります。 訓練用のデータがあるFeature Spaceは、ベクトル空間なので距離のコンセプトがあります。 新しいサンプルが来たときには、訓練用のサンプルのなかから、新しいサンプルに一番近い k個を見つけます。 k個の中で、多数が正解、と言っていれば新しいサンプルも正解と予測します。 

他にも、Graphical Modelで、Bayesian Belief Networkなど重要ですが、それは又の機会に。

============

Optimizationのアプローチは、学習時の状況で、大まかにわけて二つにわけられます。

On-line Learning
インターネットでクラスを取って勉強することではありません。 インターネットのOnlineは、線につながっている、という意味。 ここでいう、On-lineとは、一列に並んで列になって、みたいな意味です。 ダッシュ(-)はないこともあります。 どういうことかというと、学習するためのサンプルを、ひとつづつ、一回しか見ないで学習する方法論です。 

Batch Learning
まとめて多くのサンプルから学習します。 On-lineで、ひとつひとつサンプルを見たのでは得ることができない統計を使えます。 したがって、Batchで学習したほうがより精度の高い予測をたてることができます。