前提
単回帰分析などにより代表値を出す
どのようなデータが入力データか十分に想像できませんが、インプットデータはある一定の傾向のまとまりのある散布図的なものかと思います。
少なくとも、声紋分析に出てくる積層のカラーの図のようなものでも、マイクの周波数特性のようなものでもない、と思って回答します。例えば、ここのp.11であったならば、と勝手に想像します。
私がやるなら
私がもし取り組むのであれば、以下のステップでできるか試します。
- 従来の機械学習で特徴を抽出する
- 特徴をクラスタリングする
- 画像とマッチングする
具体的には
1. 従来の機械学習で特徴を抽出する
恐らく、インプットの2次元の値を深層学習にそのまま突っ込むのであれば、次元数は縦×横になりますので、仮に100×100であれば入力データだけで10000次元に膨れ上がります。
そのまま上記のステップ1+2+3を一緒にやってしまうと、複雑すぎてうまく特徴を捉えれなさそうな感じがします。
そう考えると、最終的にはこれらの数値と画像とマッチングさせないといけませんので、何とかして扱いやすくしたい、ステップ1の段階で次元数を減らしたい(単純化)したいと思うはずです。
ここで必要になるライブラリは、計算はscipy
やnumpy
、グラフや散布図の可視化はmatplotlib
が役に立つと思います。
もし、入力データを回帰問題で捉えられるのであれば、傾きと切片が出ますし、母集団があるものであれば重心や標準偏差がステップ2の入力データにできそうですね。
2. 特徴をクラスタリングする
クラスタリングはscikit learn
でやることになると思います。もし、この方法をとらなくても、通常の計算から異常を検出できるのであればそれでも良いと思います。クラスタリングする、というよりも数値上の異常を探すイメージかもしれません。目的は、ステップ3で異常品と正常品を仕分けるためです。
3. 画像とマッチングする
恐らく、解析結果と画像をいきなりマッチングさせるのは困難です。
画像は上記の入力データ以上に次元が多い(と想定される)ためです。
たとえば512px四方カラー画像であれば、(512*512)^3=1.8e+16(次元)になってしまうので、これらから適切な関係を見つけるのは骨が折れます。
そのため、少しでもとっつきやすくするために、まずはステップ2で見つかった異常が、画像の異常と関係があるか目で見て探します。見つかった異常の画像に異常という目印をつけます。そうすれば、ちょっと強引かもしれませんが、数値上の異常と画像の異常と関係が見えますね。少なくとも数値的にも見た目的にも異常だ、というものを先に見つけて目印をつけるイメージです。
これがある程度進んでくると、正常品の画像と正常品のクラスタリング結果が出そろってくると思います。ここから入力値に対して正常品かどの異常品か学習できそうな状況になってきそうです。どうやってやるのかは課題になりますし、寄与率も得られないかもしれませんが、信頼度のような指標が代わりに得られるはずです。
使うライブラリはTensorflow
やchainer
、Torch
あたりになると思います。