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

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言語に書き直して、計算が速くなるようなコーディングをした方が高速化できそうです。

https://drive.google.com/open?id=1_mYgHTMfij_rGxjIyzxSeagA-57jYhob
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識別器の応用例

駐車場管理システムへの応用(ニチゾウテック㈱)

ファジィc平均(FCM)識別器を用いた駐車場管理システム(ニチゾウテック㈱)が、東京銀座の新歌舞伎座にも導入されています。東京都道路整備公団の銀座駐車場に導入されて以来、パレスホテル、新宿イーストサイドスクエア、船橋北口駐車場など著名な施設に導入されています。

 

2018年現在、関東を中心に12箇所の駐車場で稼働しています。

東北自動車道のNEXCO東日本で最大級の施設である蓮田サービスエリア(SA)が2019年夏にオープンして、監視カメラによる満空判定装置が稼働しています。駐車スペースは471で、カメラ16台が鉄塔の上に設置されています。

ゴミ焼却炉の燃焼状態判定システムCoSMoS(日立造船)

FCM識別器を用いて、この動画に似た方式で燃焼状態を判定するシステムが、日立造船の焼却炉の標準機能として採用されています。昨年から新しく建設される焼却炉に導入が始まり、2018年度末までには5箇所に導入されます。

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識別器はメモリーと識別時間を小さくするのに有効ですが、クラス数はあまり大きくできません。最近傍識別機はいくらでも増やせます。AutoMeterReadの例では、メモリの数がクラス数になります。

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