機械学習を理解することよりも、使うことを優先して話を進めていきたいと思う。
機械学習のアルゴリズムは用途によって大きく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)
現状ではバズワードだと思っているので、番外扱い。
複数の機械学習(一般的にはニューラルネットワークを使っているが、ニューあっルネットワークに限らない)を階層的に、あるいは並列的に組み合わせて使用することで、より高度で複雑な事象の学習を可能にしようとする試み。コンピューターの高性能化、低価格化によって可能になってきた。