これは,各クラスの特徴ベクトルが正規分布する事を仮定した(とはいえ,必ずしも独立に分布している必要はありません)単純な分類モデルです.したがって,全体的なデータ分布関数は,1クラスに対して1成分の混合ガウス分布で表現できると仮定されます.このアルゴリズムは,学習データを用いて各クラスの平均ベクトルと共分散行列を推定し,それらを用いた予測を行います.
[Fukunaga90] K. Fukunaga. Introduction to Statistical Pattern Recognition. second ed., New York: Academic Press, 1990.
正規分布するデータに対するベイズ分類器.
class CvNormalBayesClassifier : public CvStatModel
{
public:
CvNormalBayesClassifier();
virtual ~CvNormalBayesClassifier();
CvNormalBayesClassifier( const CvMat* _train_data, const CvMat* _responses,
const CvMat* _var_idx=0, const CvMat* _sample_idx=0 );
virtual bool train( const CvMat* _train_data, const CvMat* _responses,
const CvMat* _var_idx = 0, const CvMat* _sample_idx=0, bool update=false );
virtual float predict( const CvMat* _samples, CvMat* results=0 ) const;
virtual void clear();
virtual void save( const char* filename, const char* name=0 );
virtual void load( const char* filename, const char* name=0 );
virtual void write( CvFileStorage* storage, const char* name );
virtual void read( CvFileStorage* storage, CvFileNode* node );
protected:
...
};
モデルを学習します.
このメソッドは,単純ベイズ分類器の学習を行います.これは,以下の制限を持つ一般的な train 「メソッド」の形式に従います: CV_ROW_SAMPLE データレイアウトのみをサポートします.また,すべての入力変数は連続変数で,出力変数はカテゴリ変数です(つまり,ベクトルが CV_32FC1 型だとしても, _responses の要素は整数でなければいけません).そして,データ欠損はサポートされていません.
さらに,モデルを一から学習する( update=false )か,新しい学習データを利用して更新する( update=true )か,を指定する update フラグが存在します.
サンプルに対する応答を予測します.
predict メソッドは,入力ベクトルに対して最も可能性の高いクラスを推定します.その入力ベクトル(単数または複数)は,行列 samples の各行に格納されています.入力ベクトルが複数の場合の出力は,1つのベクトル results となります.また,単一の入力ベクトルに対して予測されたクラスは,このメソッドの戻り値になります.