識別器
識別器
与えられたデータがどのクラスに所属するかを決定する
k-近傍識別器
特徴空間でいっぱいクラスがあったとき、あるデータが与えられた時そこから近い点がk個入るように円を取って、その中に含まれてる要素が一番多いクラスをそれとする
線形識別器はバシッと線で切れるやつじゃないと無理だけど、k近傍はデータの分布がどうなっていようが識別できる
ナイーブベイズ
ナイーブ(単純に)
ベイズの定理が基本
argmax(y)P(y|x1,x2,x3)
↑この式が最大になるようなyを選んで返すよ
= P(y)P(x1x2x3|y)/P(x1,x2,x3)
P(x1,x2,x3)は定数として無視,x1,x2,x3は独立とする
⇛P(y)P(x1|y)P(x2|y)P(x3|y)
クラスを選んだ時の特徴量ヒストグラムのそれらしさがP(x1|y)など
決定木
学習データをうまくクラス分け出来るまでうまく分けて分けてと木を作っていく
そこで決めた決定則に基づいて分類して、行き着いたクラスに所属させる
とりあえずSVM
線形的に頑張って分ける
サポートベクターってのを見つける(その分けた線にそれぞれのクラスでもっとも近いやつ)、そしてその点と線の距離がもっとも遠くなるようにする
たまに外れ値があると普通のサポートベクターマシンで解けなくなる
そこで、ソフトマージン!多少別クラスに所属していて間違っててもうまく分けれる(CSVM)など
カーネル関数…円形の層状になってて線形に分類できない!⇛例えば高さをz軸に追加すれば分類できる!
次元を上げることにより線形に分けられるようにする
カスケーディングCascading
入力→分類器1→(yes)分類器2→(yes)分類器3→…
↓no ↓no ↓no
☓ ☓ ☓
ノイズ除去もカスケーディングに当たる
ブースティングBoosting
入力→分類器1→yes
↓
→分類器2→no
↓ ⇛集計してyes,no判断
→分類器3→no
↓
→… →…
それぞれの分類器を弱識別器と呼ぶ
アダブーストAdaboost
Boostingの弱識別器をもっとうまいコトつくろう
学習データに対して行う(答えわかってるやつ) 間違ってた識別器があったら、他の識別器でカバーできるように他の識別器を変更する
どの識別器が強く影響を与えるかという重みをつけることもできる
単純パーセプトロン
いくつかの学習データにそれぞれ重みをつけたものを足しあわせた結果をシグモイド関数などにより0〜1にして、正しい結果を出すまで重みを変更する
それを多層的にしたもの 出力層が分類したいクラスの数
一個一個は線形識別器、それをいくつか使ったり、中間層を入れることによって非線形な問題になる
中間層増やせばより学習データにフィットする
学習データに過学習してしまう問題 重みを1個1個決めていくのめっちょ大変 逆伝播すると誤差が大変なことになるなどの問題で廃れる
マルコフランダムフィールド
○○フィールド…場 位置情報がある
各パーツの出力値の積?
Deep Learning
すべての分類で使える
ニューラルネットがある。中間層を多く持ち、クラスの数だけの出力を持つ(これは同じ)
誤差伝播でぐちゃぐちゃになるのを防ぐために、プレトレーニングを行う
まず最初の層だけで教師なし学習を行う 次の層でさらに教師なし学習を行う
最終層で、教師あり学習を行う
教師なし学習は、入力層を反転させたものを次の層として作る 第一層 − 第二層 − 第一層
第一層にあるxを入れた時、後の第一層になるべく同じものが帰ってくるようにする(誤差最小にする)
中間層が入力層より小さければPCA(主成分分析)にあたる(次元減らして、元に戻して情報の損失が一番少ないもの)
中間層が入力層より大きければスパースコーディング