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

正态贝叶斯分类器

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

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

测试用例-性别预测

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/ml/ml.hpp>

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;
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoannaJuanCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值