VS2017+OpenCV4.5.5 正态贝叶斯分类器-性别预测

正态贝叶斯分类器

该分类器只能处理特征属性是连续数值的分类问题。
正态贝叶斯分类器认为每一个分类的所有特征属性(即特征向量)服从多变量正态高斯分布;执行步骤:

  1. 由训练数据估计每个分类的协方差矩阵和均值向量;
    计算各个特征属性的均值,构成该类的均值向量;
    计算两两特征属性的协方差,构成该类的协方差矩阵;
  2. 每个分类的对数似然函数;
  3. 将待预测样本的特征属性分别代入各分类的对数似然函数中,最大对数似然函数对应的分类就是该样本的分类结果。

测试用例-性别预测

#include
#include
#include
#include

using namespace std;
using namespace cv;
using namespace cv::ml;

int main(int argc, char *argv[])
{
	//创建正态贝叶斯分类器
	Ptr<NormalBayesClassifier> model = NormalBayesClassifier::create();

    //训练样本:身高,体重,脚掌长
	float trainData[8][3] = {
	{6,180,12},
	{5.92,190,11},
	{5.58,170,12},
	{5.92,165,10},
	{5,100,6},
	{5.5,150,8},
	{5.42,130,7},
	{5.75,150,9} 
	};
	Mat trainDataMat(8, 3, CV_32FC1, trainData);
	cout << trainDataMat << endl;
	//训练样本的响应值,1代表M  -1代表F    
	int labels[8] = { 1, 1, 1, 1, -1, -1, -1, -1 };
	Mat labelsMat(8, 1, CV_32SC1, labels);
	cout << labelsMat << endl;
	//创建TrainData并进行训练
	Ptr<TrainData> tData = TrainData::create(trainDataMat, ROW_SAMPLE, labelsMat);
	model->train(tData);
	float myData[3] = {6, 130, 8};//测试样本
	Mat myDataMat(1, 3, CV_32FC1, myData);
	//利用训练好的分类器进行测试样本预测
	int res = model->predict(myDataMat);
	cout << endl << "The result is :  " << res << endl;
	return 0;
}

结果:
VS2017+OpenCV4.5.5 正态贝叶斯分类器-性别预测_第1张图片

你可能感兴趣的:(opencv),机器学习,计算机视觉,算法,人工智能)