ML入門2:機械学習のアルゴリズム色々

機械学習を理解することよりも、使うことを優先して話を進めていきたいと思う。
機械学習のアルゴリズムは用途によって大きく5つに分類できる。
それぞれの特徴を理解した上で、これらの組み合わせで機械学習を実現することになる。

1.回帰分析(Regression)

学習データとの差違が最小となる多項式を求めて、新たに与えられたデータから値を算出する方式。最も単純なのは線形回帰分析(Linear Regression)で「機械学習とは何をしているのか」で示した例がまさにこれに当る。相関関係を単純な数式で表せることが前提条件となる。
非線形回帰分析を行う改良型もあるが、学習データに異常値が含まれていると学習結果の精度が大きく落ちる。どちらが良い悪いという物では無い。

2.教師データありの分類(Classification)

対象がどの分類に含まれるかを判断する。本質的には回帰分析と大きく変わらない。学習データを元に回帰分析によって境界線となる多項式を求め、その多項式で分断される空間のどちら側になるかを算出することで分類する。

3.教師データなしの分類(Clustering)

対象を類似度の高い、いくつかのグループ(クラスタ)に分類する。学習のための教師データを用意する必要が無い。k-meansアルゴリズムがよく使用される。クラスタの所属する円の中心を繰り返し計算で求めていく。いくつのグループに分割するのかは指示する必要があるがグループ数が小さいと計算が収束しなくなる可能性が高い。かといって大きすぎても一つのクラスタが複数に分断される事になる。またクラスタに属せずに孤立するデータが含まれていると計算結果が不正確になりやすく、与えるデータの品質が求められる点は変わらない。

4.ベイジアンフィルタ(Bayesian Filter

Classificationの一つだが、回帰分析ではなく統計的な手法(ベイズ理論)により確率を求めることで分類を行う。全ての特徴に対する特定の特徴の発生頻度を元にして、個々の特徴が存在する時にその分類となる確率を計算する。実データのもつ個々の特徴を元にこの確率を積分することで、どの分類になるかを判断する。
全体の特徴の種類が増えると計算結果となる確率の差が小さくて誤判定が増えたり、全体的に出現頻度の低い特徴に判断結果が引っ張られたりと、学習データの質に大きく左右される。

5.ニューラルネットワーク(neural network)

Classificationの一つだが、神経細胞を単純化して模したニューラルネットワークで計算を表現する。実質的にはひとつのニューロンがひとつの線形回帰分析機となる。これを複数組み合わせてニューラルネットワークを構成することで、複数の線形回帰分析による複雑なルール学習が可能になる。欠点は学習のための計算量が大幅に増えてしまうこと。

番外1.遺伝的アルゴリズム(genetic algorithm)

番外として遺伝的アルゴリズムを加えておく。学習結果となるパラメータ(遺伝子パターン)をランダムに生成し、それぞれを評価関数の元で競わせる。より良い結果を出した遺伝子パターンを残してそれらをランダムにシャッフルする事を繰り返して、最も適した遺伝子パターンを求める物。遺伝子パターンや評価関数の設計が難しく、適切な方法をプログラマが提示する必要があり、また計算量も膨大になってしまう。
現在の機械学習において遺伝的アルゴリズムが話題にあがる事は少ないので番外としておく。

番外2.ディープラーニング(Deep Lerning)

現状ではバズワードだと思っているので、番外扱い。
複数の機械学習(一般的にはニューラルネットワークを使っているが、ニューあっルネットワークに限らない)を階層的に、あるいは並列的に組み合わせて使用することで、より高度で複雑な事象の学習を可能にしようとする試み。コンピューターの高性能化、低価格化によって可能になってきた。

ML入門1:機械学習とは何をしているのか?

機械学習とMachine Lerningについて情報収集中なので、せっかくだから整理しつつ残していきたいと思う。

機械学習とは何をしているのか?

機械学習が何をしているのかというと実は非常にシンプルなことをしています。下のようなグラフがあったとき直線(回帰直線)を引いたりしませんでしたか?あるいは大学で最小二乗法による回帰直線を求める方法を学びませんでしたか?機械学習がやっていることは、まさしくその回帰直線を求めて、与えられたXからYを求める方程式を作成し、新たなXが与えられたときにYの値を予想する事です。

regresion1
例えば上の散布図のように与えられたサンプルデータに対する破線を求めるのが機械学習です。そして学習結果であるy=0.7482x+14.612の計算式を用いて、新たに与えられた値に対してyを求める事で結果を予想するわけです。勿論これは極端に単純かした場合の話で、実際の機械学習では二次元はなく十数次元~数千次元にもなります。図示することなど到底不可能なレベルです。でもどれだけデータの次元数が増えて複雑に見えても、内部的に行っていることはこの延長線上にあります。

この事を踏まえると機械学習に出来ること、出来ないこと、なぜ与えるデータが重要なのか理解も容易になります。

機械学習に出来ること、出来ないこと

機械学習では学習させるデータの質が非常に重要になります。これを提供できるか否かが、機械学習で出来るか否かに直結しています。

異常値が含まれていたり、学習サンプルデータが偏っていたり、相関関係の薄いデータが紛れていたりすれば、学習結果となる数式は容易に異なった物になります。十分な量の、質の高いサンプルデータを必要とします。

regresion1

上の図のように異常値を一つ加えただけで、学習結果が変わってきます。x値が小さいときには10近く大きな数字が出るようになってしまいました。このような異常値は学習させる前に取り除く必要があります。これは二次元のグラフだから異常値と言うことがわかりやすいのですが一般的に機械学習に使うデータは数十次元にも及ぶので異常値を取り除くだけでも高い数学的知識を求められます。

Azure Machine Lerningの基本的な使い方1

概要

Microsoft Azure Mchine Lerningが追加されました。Google CloudやAmazon Web Service(AWS)でもMachine Lerning APIを提供していますが、MicrosoftのAzure Mchine LerningはGUI上で学習アルゴリズムをテストし、そのままWEBサービスとしてリリースすることが出来ます。そのためコーディングなど、学習のための敷居が低いのが特徴です。

それでいて、Rスクリプトを実行することが出来たり、Vowpal Wabbitの機械学習アルゴリズムを使うことも出来ます。これにより拡張性も担保されています。

チュートリアルの補足

Create a simple experimentのチュートリアルを元に基本的な使い方を確認します。このチュートリアルは自動車のメーカーや車種、サイズ、排気量、馬力等の情報から、販売価格を予測する物です。ごくシンプルなチュートリアルですが、不動産の立地条件から家賃を予測したり、様々な条件から売上を予測したりと応用範囲の広いものです。

基本操作でいくつかわかりにくいところがあります。

Azure Mchine Lerningでは作成した機械学習モデルをExperiment(実験)と呼びます。ExperimentのCanvas上にModuleを配置して、Module同士をデータの流れを表す線で接続することで危害学習モデルを作成していきます。

scoremodel1Moduleの四角い枠同士を接続している矢印の起点、終点となる○の部分をクリックするとメニューが表示されます。チュートリアルではダブルクリックしてvisualization windowを表示すると記載されていますが、この起点、終点の部分をクリックして表示されるメニューからVisualize選択して表示します。

出来上がったExperimentをWEBサービスとしてリリースする場合には終点となる部分をクリックして表示されるメニューからSet as Publish Inputを選択します。また終点となる部分をクリックしてSet as Publish Outputを選択します。これが、それぞれWEBサービスの入力パラメータと出力パラメータになります。これらを設定した後、Publish Web ServiceをクリックするとWEBサービスが作成されます。