画像認識屋がキャリアを広げていくうえでおすすめなのが、機械学習全般もできるエンジニアになることだ。
そのためにおすすめする技術分野
- 主成分分析
- サポートベクターマシン
- クラスタリング
分野が違う人向けの説明
主成分分析とは:
やたら変数の数が多すぎる状況から、データにありがちな傾向を少ない数で表現し直すこと。
変数がやたらありまくっても、うまく特徴をつかんで分析ができるということです
サポートベクトルマシンとは:
変数の数がありすぎて、グラフで分布を見ることなんてできないデータに対して、
いいようにデータの分類や回帰計算をしてくれる方法。
できるだけ、誤分類が生じにくいようにマージンを考えてくれるという優れもの。
それぞれを勧める理由
- 主成分分析
主成分分析は、多数の変数がある分野で、線形の関係性から何らかの規則性を発見するためのものだ。
人は、多次元の空間で物事を考えることが苦手だ。
少ない次元で少ない変数で考えたほうが圧倒的に理解しやすい。
多次元の変数の分布の多くは、少ない数の主成分の累積寄与率で説明がつく。
そうすることで、物事を単純化することができる。
多くのパラメータのままモデルを作ると、学習データに対して過学習したモデルができやすい。
Scikit-learn の主成分分析
- サポートベクターマシン
2値判定、他値分類などの分類問題に対して、有効な手法だ。
サポートベクトルマシンでは、分類のマージンを十分に広くとろうとする性質があることも好まれる点だ。
主成分分析で、入力データの次元を減らしておいてから、それをサポートベクターマシンにで学習・推論するのは機械学習の常套手段だ。
分類の際に、その分類の確からしさの値を出力させることもできる。
サポートベクターマシンの利点:
分類問題で、少ない数の学習データでも良好な結果を得やすい。
ポジティブサンプル・ネガティブサンプルの境界付近のデータが学習に寄与するので、簡単すぎるデータを学習に加えすぎて、逆に性能がでなくなるという生じにくい。そのため、分類問題には使いやすい。
さらに、サポートベクターマシンには、回帰推定を行うバージョンもある。
Support Vector Machines
1.4.2. Regression - クラスタリング
サポートベクターマシンでは正解データを予め人が与えていた。教師あり学習ですね。
それに対して、クラスタリングでは、データそれ自体の中にある関係性によってクラスターを作る。そのため予め人が正解データを与えることがありません。教師なし学習
付記:対象とする分野が違えば、分析のしかたも変わる
ナイーブベイズ(単純ベイズ)
決定木
random forest
などがのぞましい場合もある。
付記:対象とする分野が違えば、分析のしかたも変わる(時系列データ)
時系列データには、時系列データに特徴的なアプローチがある。
- リカレントニューラルネットワーク
- 時系列データの季節変動・曜日による変動の除去をするよく使われるノウハウもあるだろう。
物理現象であって、線形の遅れ系を仮定できることがわかっているのならば、
なにも機械学習というアプローチをとらずに、通常の計測分野でのモデル化の手法をとればいい。
古い時代の画像認識の開発(サポートベクターマシン)
深層学習以前の機械学習で活躍していたのは、サポートベクターマシン(SVM)だった。
多次元空間のデータを分類するのに、サポートベクターマシンを用いていた。
非線形な事例でも分類できるうえに、汎化性が高いことが理由だった。
前段の特徴量にHOGを用いた用いたものが使われ、HOG-SVMの検出器として利用された。
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
found = hog.detectMultiScale(img, winStride=(8, 8), padding=(32, 32), scale=1.05)
などのコードが書かれた。
画像の縮小倍率を変えて、ラスタースキャンすることで、検出するものだった。
そのため、この時代の画像認識エンジニアは、サポートベクターマシンを使うことが多かった。
- libSVM も典型的なライブラリの一つだった。
古い時代の画像認識の開発(主成分分析)
古い時代の画像認識は線形代数を前提としていた。
画像はグレースケールにしても、画素数が多くなるので、高次元での分類問題となった。
そのため、高次元で問題を解くよりは、より低次元の空間で問題を解くように前処理を行なっていた。
それが主成分分析です。
主成分分析では、
入力ベクトルの基底を、直交なベクトルで取り直します。
しかも、寄与率の高い順に取り扱います。
32x32 の画素数グレースケール画像は32x32 = 1024 次元になります。
しかし、累積寄与率が98 % に達する次元は格段に小さくなります。
この直交なベクトルは、固有値ベクトルと呼ばれます。
入力として、顔照合用の正規化された顔画像を用いたときに、
その固有値ベクトルを画像として表示したものを
固有顔(Eigenface) と呼びます。
このような事例もあって、古い時代の画像認識エンジニアは、主成分分析をも使っていることがある。
自動顔登録とクラスタリング
顔照合は、教師なし学習としても定式化できるはずである。
あの顔とこの顔は、同一人物であるかどうかという判断である。
同一人物に属する顔データの一群を作っていく処理である。
クラスタリングには、様々なロジックがある。