機械学習の具体的手法

教師あり学習

「与えられたデータ(入力)を元に、そのデータがどんなパターン(出力)になるのかを識別・予測する」こと。

例えば、

・過去の売上から、将来の売上を予測したい。
・与えられた動物の画像が、何の動物かを識別したい。
・英語の文章が与えられたときに、それを日本語の文章に翻訳したい
 (英語に対応する日本語のパターンを予測)

すなわち、教師あり学習は入力と出力の間にどのような関係があるのか、教師データという正解ラベルに予測値を近づけることを目標に学習する手法といえる。

代表的な手法

回帰(出力値(数値)の予測)
・線形回帰(linearregression)
 -単回帰分析、重回帰分析
・ラッソ回帰(lassoregression)
・リッジ回帰(ridgeregression)

分類(あらかじめ設定したクラスにデータを割り振る)
・ロジスティック回帰(logisticregression)
・サポートベクターマシン(SVM: SupportVectorMachine)
・決定木
・KNN法
・ランダムフォレスト(randomforest)
・ブースティング(boosting)

複雑な関数近似をしなければ分類や回帰ができない場合
・ニューラルネットワーク(neuralnetwork)

ロジスティック回帰は、線形回帰の”分類”問題版。
名前に「回帰」とついているが、回帰問題ではなく分類問題に用いる手法であることに注意。
シグモイド関数という関数をモデルの出力に用いる。

任意の値を0から1の間に写像するシグモイド関数を用いることによって、
与えられたデータが正例(+1)になるか、負例(0)になるかの確率が求まる。
出力の値が0.5以上ならば正例、0.5未満ならば負例と設定設定しておくことで、データを2種類に分類できる。

分類問題では2種類の分類だけでなく、もっとたくさんの種類の分類を行いたいというケースも多々ある。そうした場合はシグモイド関数の代わりにソフトマックス関数を用いる

ランダムフォレスト(randomforest)は決定木を用いる手法。
教師あり学習の手法は、結局のところ複数の特徴量(入力)をもとにパターンを出力するので、どの特徴量がどんな値になっているかを順々に考えていき、それに基づいて分岐路を作っていけば、最終的に1つのパターン(出力)を予測できるはず。
ここで作られる分岐路が決定木と呼ばれるものになる。
ランダムフォレストでは、それぞれの結果を用いて多数決をとることによって、モデルの最終的な出力を決定する。
これにより、もしどれか1つの決定木の精度が悪くても、全体的には集合知という形でいい精度が得られるはず、ということになる。
要は、ランダムフォレストというモデルは、その中で複数のモデルを試していることになり、このように複数のモデルで学習させることをアンサンブル学習という。

また、厳密には全体から一部のデータを用いて複数のモデルを用いて学習する方法をバギングと言い、ランダムフォレストはバギングの中で決定木を用いている手法といえる。

ブースティング(boosting)もバギングと同様、一部のデータを繰り返し抽出し、複数のモデルを学習させるアプローチをとる。
バギングとの違いは以下。

・複数のモデルを一気に並列に作成するか(バギング)
・逐次的に作成するか(ブースティング)

ブースティングも、モデル部分では決定木が用いられており、
AdaBoostや勾配ブースティング(gradientboosting)、XgBoostが有名。
逐次的に学習を進めていく分、一般的にはランダムフォレストよりもこれらのブースティングのモデルのほうがいい精度が得られる一方で、ブースティングは並列処理ができないため、学習にかかる時間は多くなりやすい。

サポートベクターマシン(SupportVectorMachine)はSVMとも呼ばれ、
高度な数学的理論に支えられた手法であるために、ディープラーニングが考えられる以前は機械学習において最も人気のあった手法の1つだった。
コンセプトは非常に明快で、(入力に用いる)各データ点との距離が最大となるような境界線を求めることで、パターン分類を行うというもの。
この距離を最大化することをマージン最大化と言う。

ニューラルネットワーク(neuralnetwork)は人間の脳の中の構造を模したアルゴリズム。単純パーセプトロン(simpleperceptron)は複数の特徴量(入力)を受け取り1つの出力を算出。
入力を受け取る部分を入力層、出力する部分を出力層と呼ぶ。
入力層のニューロンと出力層のニューロンの間のつながりは重みで表され、
電気信号(値)を調整する。そして出力が0か1をとるようにすることで
正と負の分類を可能にする。
数式上は関数で表現されるが、0~1の値ととるようにするにはシグモイド関数を用いる。

ニューラルネットワークとロジスティック回帰は数式上の表現は全く同じになる。
シグモイド関数のように層の間の電気信号(値)を調整する関数を活性化関数と言う。

単純パーセプトロン(あるいはロジスティック回帰)は線形分類しか行えないが、さらに層を追加した多層パーセプトロンは非線形分類も行うことが可能。この追加した層を隠れ層と呼ぶ。これによりネットワーク全体の表現が大きく向上。

さらに予測値と実際の値の誤差をネットワークにフィードバックするアルゴリズムである誤差逆伝搬法(バックプロパゲーション)が考えられたことも効率が向上した。

教師なし学習

教師なし学習で用いるデータには出力がない。つまり、教師あり学習・教師なし学習の「教師」とは、出力データのことを指し、いったい何を学習するのかと言うと、入力データそのものが持つ構造・特徴が対象となる。

例えば

・ECサイトの売上データから、どういった顧客層があるのかを認識したい。
・入力データの各項目間にある関係性を把握したい。

代表的な手法

クラスタリング(似たデータがなす「クラスタ」を抽出する。データから自動で導かれる)
・k-means(K平均法)

次元圧縮/次元削減(データの情報を失わないようにデータを低い次元に圧縮する)
・主成分分析(PCA)

k-meansは、データをk個のグループに分けることを目的とする。
元のデータからグループ構造を見つけ出してまとめるということ。
このグループをクラスタと呼び、k-meansを用いた分析をクラスタ分析と言う。

1.まず適当に各データをk個のクラスタに分ける
2.各クラスタの重心を決める
3.求まったk個の重心と各データとの距離を求め、各データを最も距離が
 近い重心に対応するクラスタに振り分けなおす
4.重心の位置が(ほぼ)変化しなくなるまで2,3を繰り返す

得られた各クラスタがどういったものか解釈するのは人間の作業。
 
主成分分析(PCA)は、データの特徴量間の関係性、すなわち相関を分析することでデータの構造をつかむ手法。特に特徴量の数が多い場合に用いられ、相関をもつ多数の特徴量から、相関のない少数の特徴量へ次元削減することが目的。ここで得られる少数の特徴量を主成分という。

機械学習で扱う特徴量は次元が多くなりがちだが、次元削減することで、学習にかかる時間を減らしたり、データを可視化したりすることができる。

手法の評価

手元の全データを分割し、学習用データを訓練データ、評価用データをテストデータと呼ぶ。このようにデータを分割して評価することを交差検証と呼ぶ。
 
交差検証には2種類ある。

1.ホールドアウト法
 単に全データを訓練データとテストデータに分割すること

2.k-分割交差検証
 訓練データとテストデータの分割を複数回行い、それぞれで学習、評価を行うこと。

訓練データをさらに分割し、それぞれ訓練データ、検証データと呼ぶこともある。全データが訓練・検証・テストの3データに分割
これにより、検証データで一度モデル評価を行いパラメータ調整し最終モデルを決定し、テストデータで再評価する流れをとる。

評価指標

混同行列

実際の値と予測値のマトリクス
・真陽性(True Positive: TP)
・真陰性(True Negative: TN)
・偽陽性(False Positive: FP)
・偽陰性(False Negative: FN)

正解率(accuracy)
 全データ中、どれだけ予測があたったか
 accuracy = (TP + TN) / (TP + TN + FP + FN)

適合率(precision)
 予測が正のうち、実際に正であった割合
 precision = TP / (TP + FP)
 
再現率(recall)
 実際に正であるもののうち、正だと予測できた割合
 recall = TP / (TP + FN)
  
F値(F measure)
 適合率と再現率の調和平均。どちらかだと予測が偏るのを防ぐために用いる。
 F measure = 2*precision*recall / (precision + recall)
  
上記いずれかを目的に沿った指標を選択すること。
いずれの指標を使うにしろ、モデル性能はテストデータ(検証データ)を
用いて評価
することに注意。

参考文献: