OpenCV码源笔记——Decision Tree决策树

本文基于OpenCV2.3.1的mushroom.cpp样本,详细解析如何使用Decision Tree进行训练和分类。首先,从agaricus-lepiota.data读取训练样本,将样本和标志位分别存入CvMat* data和CvMat* reponses。接着,对样本进行训练。最后,介绍如何通过交互式方式输入特征进行分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自OpenCV2.3.1 sample/c/mushroom.cpp

 

1.首先读入agaricus-lepiota.data的训练样本。

   样本中第一项是e或p代表有毒或无毒的标志位;其他是特征,可以把每个样本看做一个特征向量;

   cvSeqPush( seq, el_ptr );读入序列seq中,每一项都存储一个样本即特征向量;

   之后,把特征向量与标志位分别读入CvMat* data与CvMat* reponses中

   还有一个CvMat* missing保留丢失位当前小于0位置;

 

2.训练样本

    dtree = new CvDTree;
    dtree->train( data, CV_ROW_SAMPLE, responses, 0, 0, var_type, missing,
    CvDTreeParams( 8, // max depth
    10, // min sample count 样本数小于10时,停止分裂 
    0, // regression accuracy: N/A here;回归树的限制精度
    true, // compute surrogate split, as we have missing data;;为真时,计算missing data和变量的重要性
    15, // max number of categories (use sub-optimal algorithm for larger numbers)类型上限以保证计算速度。树会以次优分裂(suboptimal split)的形式生长。只对2种取值以上的树有意义
    10, // the number of cross-validation folds;If cv_folds > 1 then prune a tree with K-fold cross-validation where K is equal to cv_folds
    true, // use 1SE rule => smaller tree;If true 修剪树. 这将使树更紧凑,更能抵抗训练数据噪声,但有点不太准确
    true, // throw away the pruned tree branches
    priors //错分类的代价我们判断的:有毒VS无毒 错误的代价比 the array of priors, the bigger p_weight, the more attention
    // to the poisonous mushrooms
    // (a mushroom will be judjed to be poisonous with bigger chance)
    ));



 

3.

double r = dtree->predict( &sample, &mask )->value;//使用predict来预测样本,结果为 CvDTreeNode结构,dtree->predict(sample,mask)->value是分类情况下的类别或回归情况下的函数估计值;


4.interactive_classification通过人工输入特征来判断。

 

#include "opencv2/core/core_c.h"
#i
机器学习(Machine Learning, ML)是一种应用人工智能(AI)领域的科学技术,它使得计算机系统能够从数据中自动学习和改进,而无需显式编程。在机器学习的过程中,算法会通过识别和挖掘数据中的模式来构建一个模型,这个模型可以用于做出预测、分类、聚类、回归以及其他复杂的数据驱动决策。 机器学习的主要类型包括监督学习、无监督学习和半监督学习。在监督学习中,算法根据已知标签的数据集进行训练,以便对未知数据进行预测,例如分类任务(判断邮件是否为垃圾邮件)或回归任务(预测房价)。无监督学习则是在没有标签的情况下,仅凭数据本身的特征发现其中隐藏的结构或模式,如聚类分析(将用户分组到不同的客户细分群体中)。半监督学习介于两者之间,它部分数据有标签,部分数据无标签。 机器学习算法涵盖众多方法,包括但不限于逻辑回归、决策树、随机森林、支持向量机、K近邻算法、神经网络以及深度学习技术等。随着计算能力的增强和大数据时代的到来,机器学习已经在诸多领域展现出强大的功能,如图像识别、语音识别、自然语言处理、推荐系统、金融风控、医疗诊断等。 此外,机器学习的发展与统计学习、逼近论、凸优化、概率论等诸多数学和计算机科学领域紧密相关,且不断地推动着新算法和理论框架的创新与发展。同时,现代机器学习尤其是深度学习模型的内部工作机制有时难以完全解释,因此常被称为“黑箱”决策过程,这也是当前研究中的一个重要挑战。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值