Opencv决策树分类器应用
机器学习在数据挖掘、计算机视觉、搜索引擎、医学诊断、证券市场分析、语言与手写识别等领域有着十分广泛的应用,特别是在数据分析挥着越来越重要的作用。在机器学习中,决策树是最基础且应用最广泛的归纳推理算法之一,基于决策树算法,衍生出很多出色的集成算法,如random forest、adaboost、gradient tree boostiong等。
决策树构建的基本步骤如下:
1.开始,所有记录看作一个节点
2.遍历每个变量的每一种分割方式,找到最好的分割点
3.分割成两个节点N1和N2
4.对N1和N2分别继续执行2-3步,直到每个节点足够“纯”为止
决策树归纳是从有类标号的训练元中学习决策模型。常用的决策树算法有ID3,C4.5和CART。它们都是采用贪心(即非回溯的)方法,自顶向下递归的分治方法构造。这几个算法选择属性划分的方法各不相同,ID3使用的是信息增益,C4.5使用的是信息增益率,而CART使用的是Gini基尼指数。
何为信息熵?信息熵是跟所有可能性有关系的。每个可能事件的发生都有个概率。信息熵就是平均而言发生一个事件我们信息量大小。所以数学 上,信息熵其实是信息量的期望。熵越大,说明系统越混乱,携带的信息就越少。熵越小,说明系统越有序,携带的信息就越多。
以下是根据4个条件的成立与否,来决定是否报考深圳大学,通过这10个样本生成决策树,进而对输入的4个条件来判断是否报考深大,以下是样本数据:
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/ml/ml.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
//10个训练样本
float trainingDat[10][4]={{1,0,0,0},{1,1,0,1},{0,0,1,0},
{0,1,1,1},{1,0,0,0},{1,0,1,1},{1,1,1,1},{0,1,1,0},{1,1,0,1},{0,0,0,1}};
Mat trainingDataMat(10,4,CV_32FC1,trainingDat);
//样本的分类结果,作为标签供训练决策树分类器
float responses[10]={1,1,0,0,0,0,1,1,1,0}; // 1代表考取,0代表不考
Mat responsesMat(10,1,CV_32FC1,responses);
float priors[4]={1,1,1,1}; //先验概率,这里每个特征的概率都是一样的
//定义决策树参数
CvDTreeParams params(15, //决策树的最大深度
1, //决策树叶子节点的最小样本数
0, //回归精度,本例中忽略
false, //不使用替代分叉属性
25, //最大的类数量
0, //不需要交叉验证
false, //不需要使用1SE规则
false, //不对分支进行修剪
priors //先验概率
);
//掩码
Mat varTypeMat(5,1,CV_8U,Scalar::all(1));
CvDTree tree;
tree.train(trainingDataMat, //训练样本
CV_ROW_SAMPLE, //样本矩阵的行表示样本,列表示特征
responsesMat, //样本的响应值矩阵
Mat(),
Mat(),
varTypeMat, //类形式的掩码
Mat(), //没有属性确实
params //决策树参数
);
CvMat varImportance;
varImportance=tree.getVarImportance();
cout<<"各项所占的权重分别为:\n\n";
string item;
for(int i=0;i<varImportance.cols*varImportance.rows;i++)
{
switch (i)
{
case 0:
item="马化腾深大毕业:";
break;
case 1:
item="深大妹子多:";
break;
case 2:
item="深圳台风多:";
break;
case 3:
item="深圳房价高:";
break;
default:
break;
}
float value =varImportance.data.db[i];
cout<<item<<value<<endl<<endl;
}
float myData[4]={0,1,1,0}; //测试样本
Mat myDataMat(4,1,CV_32FC1,myData);
double r=tree.predict(myDataMat,Mat(),false)->value; //获得预测结果
if(r==(double)1.0)
{
cout<<endl<<"预测结果是: 考取深圳大学"<<endl<<endl;
}
else
{
cout<<endl<<"预测结果是: 不考取深圳大学"<<endl<<endl;
}
system("pause");
return 0;
}
输入预测参数 0,1,1,0,结果为:
Opencv决策树分类器应用的更多相关文章
- OpenCV训练分类器制作xml文档
OpenCV训练分类器制作xml文档 (2011-08-25 15:50:06) 转载▼ 标签: 杂谈 分类: 学习 我的问题:有了opencv自带的那些xml人脸检测文档,我们就可以用cvLoad( ...
- 基于Python的决策树分类器与剪枝
作者|Angel Das 编译|VK 来源|Towards Data Science 介绍 决策树分类器是一种有监督的学习模型,在我们关心可解释性时非常有用. 决策树通过基于每个层次的多个问题做出决策 ...
- Opencv——级联分类器(AdaBoost)
API说明: cv::CascadeClassifier::detectMultiScale(InputArray image,//输入灰度图像 CV_OUT std::vector<Rect& ...
- 使用opencv训练分类器时,traincascade训练报错:Train dataset for temp stage can not be filled.解决方法
opencv分类器训练中,出错一般都是路径出错,例如, 1.opencv_traincascade.exe路径 2.负样本路径文件,neg.dat中的样本前路径是否正确 3.移植到别的电脑并修改完路径 ...
- OpenCV——级联分类器(CascadeClassifier)
级联分类器的计算特征值的基础类FeatureEvaluator 功能:读操作read.复制clone.获得特征类型getFeatureType,分配图片分配窗口的操作setImage.setWindo ...
- Opencv级联分类器实现人脸识别
在本章中,我们将学习如何使用OpenCV使用系统相机捕获帧.org.opencv.videoio包的VideoCapture类包含使用相机捕获视频的类和方法.让我们一步一步学习如何捕捉帧 - 第1步: ...
- OpenCV 级联分类器
#include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" ...
- opencv 训练自己的分类器汇总
原地址:http://www.cnblogs.com/zengqs/archive/2009/02/12/1389208.html OpenCV训练分类器 OpenCV训练分类器 一.简介 目标检测方 ...
- 机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者
python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比 附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/l ...
随机推荐
- 无法顺利删除问题处理一则-ORA-00604和ORA-00942错误
1.以sys/oracle登录 2. -- Create tablecreate table ARGUMENT$( OBJ# NUMBER not null, PROCEDURE ...
- JavaScript对象的创建
原文 简书原文:https://www.jianshu.com/p/6cb1e7b7e379 大纲 前言 1.简单方式创建对象的方法 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对 ...
- 魔兽争霸war3心得体会(三):UD内战
最近,经常匹配到UD内战.有输有赢,有的时候,自己双矿经济,人口优势巨大,却很遗憾地输掉比赛. 本文,简要分析下 对战过程. 前期狗流开局, 5只狗,一只出去骚扰,攻击商店,防止对方科技蜘蛛骚扰我.二 ...
- 终端复用工具tmux的使用
tmux的作用在于终端复用. 1. 在server上启动一个bash.并在里面执行tmux 2. 通过ssh远程登录server,执行tmux attach,就会切换到server上的那个bash中, ...
- Android面试准备 第二天 第五例 数据存储
參考:http://blog.csdn.net/lmj623565791/article/details/24015867 5.Activity用SharedPreferences保存数据,大小有木有 ...
- 监听text等的改变事件
oninput事件是html5的标准事件,支持ie9和以上以及其他的火狐啊谷歌啊等浏览器 ie9以下的可以用onpropertychange <head> <script t ...
- (三)Unity5.0新特性------动画的StateMachineBehaviours
出处:http://blog.csdn.net/u010019717 author:孙广东 时间:2015.3.31 (State machine behaviours)状态机的行为在Ani ...
- HTML Email 编写指南(转)
作者: 阮一峰 日期: 2013年6月16日 今天,我想写一个"低技术"问题. 话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly.每周 ...
- Java 8新特性探究(十一)Base64详解
开发十年,就只剩下这套架构体系了! >>> BASE64 编码是一种常用的字符编码,在很多地方都会用到.但base64不是安全领域下的加密解密算法.能起到安全作用的效果很差,而且 ...
- 工具类与工具函数 —— NextPrime
求大于某数的下一个素数: static int NextPrime (int N) { if (N % 2 == 0) ++N; int i; for (; ; N += 2){ for (i = 3 ...