Normal Bayes 分类器

这个简单的分类器模型是建立在每一个类别的特征向量服从正态分布的基础上的(尽管,不必是独立的),因此,整个分布函数被假设为一个高斯分布,每一类别一组系数。当给定了训练数据,算法将会估计每一个类别的向量均值和方差矩阵,然后根据这些进行预测。

CvNormalBayesClassifier

对正态分布的数据的贝叶斯分类器

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:...
};
[编辑]

CvNormalBayesClassifier::train

训练这个模型

bool CvNormalBayesClassifier::train( const CvMat* _train_data, const CvMat* _responses,const CvMat* _var_idx = 0, const CvMat* _sample_idx=0, bool update=false );

这个函数训练正态贝叶斯分类器。并且遵循通常训练“函数”的以下一些限制:只支持CV_ROW_SAMPLE类型的数据,输入的变量全部应该是有序的,输出的变量是一个分类结果。(例如,_responses中的元素必须是整数,因此向量的类型有可能是32fC1类型的),不支持missing, measurements。

另外,有一个update标志,标志着模型是否使用新数据升级。 In addition, there is update flag that identifies, whether the model should be trained from scratch (update=false) or be updated using the new training data (update=true).

[编辑]

CvNormalBayesClassifier::predict

对未知的样本或或本集进行预测

float CvNormalBayesClassifier::predict( const CvMat* samples, CvMat* results=0 ) const;

这个函数估计输入向量的最有可能的类别。输入向量(一个或多个)被储存在矩阵的每一行中。对于多个输入向量,则输出会是一个向量结果。对于单一的输入,函数本身的返回值就是预测结果。 长段文字

//openCV中贝叶斯分类器的API函数用法举例
//运行环境:winXP + VS2008 + openCV2.3.0
#include "stdafx.h"
#include "opencv.hpp"
#include "iostream"
using namespace cv;
using namespace std;//10个样本特征向量维数为12的训练样本集,第一列为该样本的类别标签
double inputArr[10][13] =
{1,0.708333,1,1,-0.320755,-0.105023,-1,1,-0.419847,-1,-0.225806,0,1, -1,0.583333,-1,0.333333,-0.603774,1,-1,1,0.358779,-1,-0.483871,0,-1,1,0.166667,1,-0.333333,-0.433962,-0.383562,-1,-1,0.0687023,-1,-0.903226,-1,-1,-1,0.458333,1,1,-0.358491,-0.374429,-1,-1,-0.480916,1,-0.935484,0,-0.333333,-1,0.875,-1,-0.333333,-0.509434,-0.347032,-1,1,-0.236641,1,-0.935484,-1,-0.333333,-1,0.5,1,1,-0.509434,-0.767123,-1,-1,0.0534351,-1,-0.870968,-1,-1,1,0.125,1,0.333333,-0.320755,-0.406393,1,1,0.0839695,1,-0.806452,0,-0.333333,1,0.25,1,1,-0.698113,-0.484018,-1,1,0.0839695,1,-0.612903,0,-0.333333,1,0.291667,1,1,-0.132075,-0.237443,-1,1,0.51145,-1,-0.612903,0,0.333333,1,0.416667,-1,1,0.0566038,0.283105,-1,1,0.267176,-1,0.290323,0,1
};//一个测试样本的特征向量
double testArr[]=
{0.25,1,1,-0.226415,-0.506849,-1,-1,0.374046,-1,-0.83871,0,-1
};int _tmain(int argc, _TCHAR* argv[])
{Mat trainData(10, 12, CV_32FC1);//构建训练样本的特征向量for (int i=0; i<10; i++){for (int j=0; j<12; j++){trainData.at<float>(i, j) = inputArr[i][j+1];}}Mat trainResponse(10, 1, CV_32FC1);//构建训练样本的类别标签for (int i=0; i<10; i++){trainResponse.at<float>(i, 0) = inputArr[i][0];}CvNormalBayesClassifier nbc;bool trainFlag = nbc.train(trainData, trainResponse);//进行贝叶斯分类器训练if (trainFlag){cout<<"train over..."<<endl;nbc.save("c:/normalBayes.txt");}else{cout<<"train error..."<<endl;system("pause");exit(-1);}CvNormalBayesClassifier testNbc;testNbc.load("c:/normalBayes.txt");Mat testSample(1, 12, CV_32FC1);//构建测试样本for (int i=0; i<12; i++){testSample.at<float>(0, i) = testArr[i];}float flag = testNbc.predict(testSample);//进行测试cout<<"flag = "<<flag<<endl;system("pause");return 0;
}

贝叶斯分类器(Normal Bayes 分类器)相关推荐

  1. 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...

  2. Normal Bayes 分类器过程详解

    OpenCV的机器学习类定义在ml.hpp文件中,基础类是CvStatModel,其他各种分类器从这里继承而来. 今天研究CvNormalBayesClassifier分类器. 1.类定义 在ml.h ...

  3. 贝叶斯分类器详解 从零开始 从理论到实践

    贝叶斯分类器详解 从零开始 从理论到实践 大纲总览 一.贝叶斯相关概念 1.1.频率学派和贝叶斯学派 1.1.1.频率学派 1.1.2.贝叶斯学派 1.2.概率论基础知识 1.3.贝叶斯定理 二.概率 ...

  4. 贝叶斯分类器-资源总结

    本文转载自:http://blog.csdn.net/wuxiaoyao12/article/details/7330652,谢谢原作者. ============================== ...

  5. 机器学习中神经网络,支持向量机以及贝叶斯分类器总结

    第五章神经网络 5.1神经元模型 神经网络中最基本的成分是神经元模型,即"简单单元". 在"M-P神经元模型"中,神经元接受收到来自n个其他神经元传递过来的输入 ...

  6. 贝叶斯分类器原理——学习笔记

    贝叶斯分类器原理 简介 一.逆概率推理与贝叶斯公式 1.确定性推理与概率推理 2.贝叶斯公式 二.贝叶斯分类的原理 三.概率估计 1.先验概率的估计 2.类条件概率的估计 四.贝叶斯分类的错误率 五. ...

  7. MATLAB+二值贝叶斯分类器的手写汉字识别(简易实现)

    写在前头 ~~~~    ~~~   本文以二值贝叶斯作为分类器,利用MATLAB编程工具,实现对9个手写汉字的识别.训练样本是本人手写,数量不大,所以重在描述个人对其工作原理的理解,仅供大家参考和指 ...

  8. 数据挖掘实验:贝叶斯分类器算法的实现

    一.实验原理 贝叶斯分类器是各种分类器中分类错误概率最小或者在预先给定代价的情况下平均风险最小的分类器.它的设计方法是一种最基本的统计分类方法.其分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其 ...

  9. R构建朴素贝叶斯分类器(Naive Bayes Classifier)

    R构建朴素贝叶斯分类器(Naive Bayes Classifier) 目录 R构建朴素贝叶斯分类器(Naive Bayes Classifier) 朴素贝叶斯原理及分类器

最新文章

  1. JZOJ 5461 购物 —— 贪心
  2. each(callback)与each(object[,callback])的区别
  3. 什么是document对象?如何获取文档对象上的元素?_dom对象
  4. 1小时搞懂设计模式之策略模式
  5. Python批量生成垃圾邮件内容
  6. 优秀的互联网项目经理/市场总监如何选择给力的互联网技术实现团队?
  7. 今日问题:开发在临近发布时“画蛇添足”,测试没有时间测试,该如何处理?
  8. 执行力,才是拉开人与人差距的关键
  9. neo4j springboot 日志_SpringBoot使用Neo4j
  10. matlab errorbar 例子,科学网—【MATLAB】如何画水平errorbar - 叶瑞杰的博文
  11. 摆地摊赚钱方案全攻略
  12. 全新的福昕JavaScript PDF阅读器
  13. 宠物医院小程序开发,轻松引流
  14. window常用自带工具
  15. 建网站论坛需要多大服务器,论坛搭建如何选择服务器
  16. Android输入法官方SoftKeyboard示例解析
  17. 软件测试质量标准的指标,关于测试设计的基本原则和用例的质量标准
  18. 黑马程序员——面向对象(1)
  19. Elasticsearch(二):理解index, Document, Field
  20. 【PHP代码注入】PHP代码注入漏洞

热门文章

  1. Android驱动开发之Hello实例(基于高通msm8909)
  2. /dev、/sys/dev 和/sys/devices 和udev的关系
  3. android生成大分辨率图片,自动生成Android不同分辨率下的图片
  4. Kotlin难点解析:extension和this指针
  5. Android Studio安装Genymotion插件
  6. 40款奇特的名片设计,吸引大家的眼球《上篇》
  7. 家园签到:无忧币天天送,连续领礼更多!【家园帮助】
  8. Linux与win2003下修改mac地址方法
  9. happy 99 (转载)
  10. ajax后台如何把对象转为json_57. Django 2.1.7 查询数据返回json格式