今回は「前回、よくわかんなくて曖昧にしていた」部分の追記です。
Accord.Netについては、以下の記事も参考にしてください。
C#で画像認識(Accord.Net)
C#で画像認識(Accord.Net)
BinarySplitクラス
前回の記事では以下のように記載していました
BinarySplit binarySplit = new BinarySplit(CodeWordCount);
BagOfVisualWords bagofVW = new BagOfVisualWords(binarySplit);
BinarySplit は解析のためのデータ変換するクラス(BagOfVisualWords )のインスタンス作成時の引数として指定していました。
BinarySplitだけで検索しても、あまり関係のある情報が出てこないので、放置していましたが、Binary Splitting Algorithmのことのようです。
BinarySplitだけで検索しても、あまり関係のある情報が出てこないので、放置していましたが、Binary Splitting Algorithmのことのようです。
ただ、この言葉をググっても説明が難しいので、アルゴリズムの内容はよくわかんないです・・・
機械学習の本の索引にも出てないので、いったん放置。
機械学習の本の索引にも出てないので、いったん放置。
このクラスの定義を確認すると、KMeansクラスを継承していることがわかります。
public class BinarySplit : KMeans
このKMeansはk-平均法のことのようです。
こちらについても、解説を読んでもアルゴリズムの詳細は分かりませんが、Wikiによると
k平均法(kへいきんほう、英: k-means clustering)は、非階層型クラスタリングのアルゴリズム。とのこと。
ここのキーワードの「クラスタリング」というところが重要なようです。
// BagOfWordsでデータ変換
bagofVW.Learn(bmps.ToArray());
つまり、ここの記載は「画像の一覧をクラスタリングする」ということになります。
サンプルプログラムの場合
リンゴ、伊勢海老、バナナ、青空をデータを読み込んで、座標をプロットするような処理にあたるようです。
上記のイラストでは画像を色分けしてプロットしていますが、ロジック的にこの時点では「赤色、黄色、青色」のような情報は与えていません。
なので、3分類に分けるような処理は行わず、純粋に与えられた画像を座標としてプロットした状態になっているんだと思います。
こんな感じで、似ている画像どうしのプロットが近くにある感じ