1.FCM識別器のプログラム

 FCM識別器はファジィC平均(FCM)クラスタリングを元にした識別器です。大量データを用いても短時間に識別器の訓練(最適化)が可能です。識別クラス毎の訓練データを複数のクラスターに分割して、それらの境界線からクラス間の境界線を決定します。境界線の微妙な調整を簡単に行えるように、クラスターへの分割が終わってからファジィクラスターのメンバシップ関数を用います。そして、そのパラメータを調整します。一般に大量データをクラスタリングするには計算時間が非常に長くなってしまいます。そこで、データセットの二分割を繰り返すPCA-Treeを採用しました。

 データ件数は多くても良いのですが、データの次元数(変数の数)は通常50程度が適当です。そのため前処理(データの圧縮)としてここでもPCAを用いています。人工ニューラルネットワークのDeep LearningではAutoencoderと呼ばれる自動的な特徴抽出機能がありますが、そこのところをPCAで行っていると考えればいいと思います。ただし、公開していますFCM識別器のプログラムは識別機能部分だけです。

 なお、この識別器を応用したものに駐車場の管理システムやゴミ焼却場のシステム(日立造船)があり、実用化され販売もされています。それらを利用される場合は㈱ニチゾウテック http://www.nichizotech.co.jp/ へお問い合わせください。

FCM識別器のMatlabプログラム
 大量の訓練データを高速に処理でき,訓練時間が短いFCM識別器のMatlabプログラムを公開します.研究目的など営利目的以外に用いてください。下のMEX版の方が高速ですが、こちらの方がCを使わず、Matlabだけで、かつコメントも詳しく入れていますので処理内容はこちらで確認してください。FCMC Matlab codes are available free of charge for use in non-commerical research. Copyright (c) 2014-2014 Hidetomo Ichihashi All rights reserved. Redistributions of source code must retain the above copyright notice in the documentation and/or other materials provided with the distribution.
FCMC_release.zip
zip ( 圧縮 ) ファイル 17.0 KB
FCM識別器
FCM識別器の訓練時間の改善.pdf
PDFファイル 105.8 KB
Matlab MEXの使い方
Matlabから Visual C のプログラムをcallして用いる方法を説明しています。無料のVisual C も使えます。
CompilerForMex.pdf
PDFファイル 189.3 KB
FCM識別器のMatlab_MEXプログラム
 大量データを用いる場合の訓練時間を短縮するために、高速化可能な部分をC言語サブルーチン(関数)に変更しました。Matlabには自動的にすべてをCに変換したり、コンパイルする機能がありますが、行列演算などMatlabが速い部分はMatlabにして、その他はCに変更して、計算ができるだけ早くなるようにコーディングしました。計算機によっても異なりますが3倍から5倍高速化されました。FCMC Matlab and C codes are available free of charge for use in non-commerical research. Copyright (c) 2014-2014 Hidetomo Ichihashi All rights reserved. Redistributions of source code must retain the above copyright notice in the documentation and/or other materials provided with the distribution.
FCMC_MEXrelease.zip
zip ( 圧縮 ) ファイル 30.2 KB

プログラムの使い方

 このyoutube動画はMATLAB版の使い方ですが、MEX版でも同じです。ただし、訓練データを十万件ずつ分割してディスクに書き出すのはMATLAB版だけです。訓練データとテストデータ(.matファイル)は共通です。MEX版はMATLABのversionが異なればコンパイル(Make.m)を実行する必要があります。LibSVMのMATLABインタフェースもMake.mを実行してから使うのと同じ要領です。LibSVMのデータ(.matファイル)のフォーマットはFCM識別器とは異なります。

 

MEXを用いるFCM識別器の性能評価 LibSVMとの比較

 PCAの前処理をData Reduction, Autoencoderなどの目的で用いているので、さらに簡単なkd-Treeでも識別精度はそれほど悪くなりません。Random Projectionは乱数の出方で低精度になる場合がありえます。

 LibSVMでも同じデータを用いて比較しています。また、LibSVMはMATLABインターフェース版を用いていて、データは.matファイルで、その読み込み部分だけはMATLABです。

 FCM識別器は for loopなどの計算の遅い箇所を部分的にC言語に書き換えてMEXを用いることで数倍(3~5倍)高速化できました。プログラム全体を自動でC言語に変換したり、コンパイルすることも可能ですが、私がやってみた範囲ではあまり速くなりませんでした。Cのコンパイラーや最適化オプションでも変わるかもしれませんが。マトリックス演算はMATLABにして(Cよりも高速とされています)、部分的にC言語に書き直して、計算が速くなるようなコーディングをした方が高速化できそうです。

1000件以下の少量データの場合のThree-Way-Data-Splitでの性能比較
 訓練データ、評価用データ、テストデータに分けて交差確認法(Cross Validation法)を何度も繰り返すThree way data split法でSVMとの識別精度の比較を行いました。訓練時間が問題とならないので、クラスターの混合比率(Mixing Proportion、クラスターごとのデータ数の割合)もパラメータとして最適化した結果です。データが少ないので、クラスター数もクラス毎に2としています。従ってプログラムは上のプログラムとは少し違っています。
Benchmark_Ichihashi.pdf
PDFファイル 400.4 KB

FCM識別器は科学研究費 基盤研究(C)

 ・ファジィクラスタリングに基づく高精度識別器

 ・ファジィc平均識別器の高精度・高機能化

の6年間の成果です。

FCM識別器の応用例

MATLAB 入門
目次
2.k-Means クラスタリングの簡単プログラミング
3.主成分分析(PCA) による高次元データの圧縮
4.MATLAB でC 言語のコンパイル-最近傍探索(全探索)のC プログラム
5.計算時間とメモリー使用量を調べる
6.多変量データ解析の簡単プログラミング
  6.1 線形最小2乗法(線形回帰)
  6.2 対応分析( 数量化分析III 類)
  6.3 計量的多次元尺度構成法
  6.4 数量化分析IV 類
  6.5 正準相関分析
SNS_Mtatlab_Intro.pdf
PDFファイル 57.9 KB

2.簡単な機械学習(最近傍識別器)

 Automated Meter Reading    https://youtu.be/E14WxtFKk8g
人工知能ブームですが、機械学習にこんなに簡単で、結構性能も良いのがあります。
学習時間はゼロですが一応機械学習です。訓練データが大量で識別に時間がかかる場合は近似最近傍探索ANNを用いることもできます。この動画のように識別のクラス数をいくらでも増やすことができます。

以下も最近傍識別器を用いています。

https://youtu.be/duK2s5xW9qk  rock-paper-scissors

https://youtu.be/PKS1X3q0vaM  MeterTaco

https://youtu.be/Ywbk1ASWMuo  Soccer Player

https://youtu.be/L-EPZrZGWHg  Pedestrian

 

FCM識別器はメモリーと識別時間を小さくするのに有効ですが、クラス数はあまり大きくできません。

最近傍識別器のMATLABプログラム GUIとPCA
機械学習Programming.pdf
PDFファイル 51.0 KB