機械学習概論~AIブートキャンプ1日目 教師あり学習編~
学習内容
- 教師あり学習
- 教師なし学習
- 深層学習の基礎技術(DNN)
機械学習とは
条件分岐に必要なパラメータを変数化して、それをデータの入力により動的に変化させることで、最適解を得る手法
教師あり学習
教師データを用いて分析する手法。教師データとは、入力内容と期待する出力結果が対になっているデータを指す。
例えば、ヨークシャーテリアの写真を入力し、これは犬であると学習させる。また、チワワの写真を入力し、犬と学習させる。そして、もしコーギーの写真を入力した場合、犬と判定する。
教師あり学習のモデル
そもそもモデルとは?…「やり方」を意味するので、教師あり学習のやり方と覚えてもいいと思う。
回帰モデル
入力に対してどのような評価が返ってくるのかを予測するモデル。関数を作成し、その線付近に対して入力データがどの位置にいるのかを判定する。
分類モデル
学習データをクラスタリングしておき、入力データがどこのクラスタに該当するのかを判定するモデル。
過学習とテストデータ
過学習とは、モデルが学習しすぎてしまい、判定が厳密になったり、勝手に特徴を見出して、精度が落ちてしまうことを指す。これをやるには、学習するためのデータと実際に精度がいい感じになっているかどうかを検証するためのテストデータを用意して学習を進める必要がある。
回帰モデル
- 線形回帰
- サポートベクター回帰
- カーネルトリック
- 汎化・正則化
線形回帰
関数を書いて、その関数を元に入力データがどの位置にいるのかを割り出して予測する。線形単回帰であれば入力値は1つだし、重回帰であれば入力値を複数取れる。
この時、機械が学習してくれるのは直線の傾き(いわゆる重み)とバイアス(切片)である。
Tips!
もちろんデータは必ずしも法則に則った出力を返してくれるわけではないので、誤差を認識して修正する必要がある。その誤差の求め方の1つとして、最小二乗法が用いられる。ちなみに、誤差を求める関数を損失関数と呼ぶ。
Tips!
回帰の決定係数とは?
予測がどの程度正しいのかを明らかにするために、どの程度ばらつきがあるかによって判定するための係数。
汎化
過学習を防ぎ、精度の高い予測データを出せるようにすること。学習のチューニングをやってくれる。基本的に回帰モデルは関数で、傾きが存在する。この傾きによってある程度予測の精度が決まってくるため、傾きの変化が大きいことは学習としては望ましくない。そこで、傾きに関するペナルティ(制限)を損失関数に加えることで、予測データの精度をそれらしいものにする。
汎化の種類その1: Ridge回帰
汎化の種類その2: Lasso回帰
汎化の種類その3: Elastic Net回帰
カーネルを用いた回帰
サポートベクター回帰
データに対して許容範囲(マージン)を定め、その範囲内の誤差を0と認識する手法。
分類モデル
- ロジスティック回帰
- SVM
- 決定木
- ランダムフォレスト
- K-NN
ロジスティック回帰
回帰だけど分類をする手法。出力は確率で出す。
例えば、服のセールのキャンペーンを行ったときに、お客さんが反応し購入する確率は0.8となり、0.2の確率で服を購入しない、といった具合である。
SVM
クラスタ同士の最も近い点の距離を最大化して、はっきりと境界線を引くことで分類を行うモデル。
これが参考になった。
決定木
データを分割しておき、回答を徐々に絞り込んでいく手法。質問に対する回答により、徐々に正解を絞り込んで予測をするため、ユーザーのセグメンテーションに利用できる。ただ、枝が深くなりすぎると過学習(回答がめちゃくちゃ細かくなる)してしまうため、多くの変数を渡し予測するには向いてない。競馬とかは無理。
こんな感じ。
以下参考。
ランダムフォレスト
訓練データからランダムに複数の決定木を作り、それらをまとめてモデルとする手法。
複数の決定木から回答を出し、多数決で最終的な出力を決定するため過学習を防ぎ、汎化性を高めてくれる。
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
K-近傍法
事前学習を一切行わず、出力を求められた場合にのみ学習データをプロットし、学習データとの距離から対象がどのクラスに分類されるのかを判別する手法。下記の記事が参考になる。
データの分け方
ホールド・アウト法
教師データを指定した割合でざっくり分割する方法。教師データを70%、テストデータを残り30%といった具合。超絶シンプル。
K-分割交差検証
教師データの分割数を定め、その回数だけ学習とテストを繰り返す手法。
混同行列
混同行列とは、実際の入力値に対し、どのような予測を行ったのかどうかを一目でわかるように示した行列。具体的には以下を参照。
scikit-learn でクラス分類結果を評価する – Python でデータサイエンス