OpenCV2.0中机器学习函数与类目录1简介:通用类和函数o1.1CvStatModelo1.2CvStatModel::CvStatModelo1.3CvStatModel::CvStatModel(...)o1.4CvStatModel::~CvStatModelo1.5CvStatModel::clearo1.6CvStatModel::saveo1.7CvStatModel::loado1.8CvStatModel::writeo1.9CvStatModel::reado1.10CvStatModel::traino1.11CvStatModel::predict2NormalBayes分类器o2.1CvNormalBayesClassifiero2.2CvNormalBayesClassifier::traino2.3CvNormalBayesClassifier::predict3K近邻算法o3.1CvKNearesto3.2CvKNearest::traino3.3CvKNearest::find_nearesto3.4例程:使用kNN进行2维样本集的分类,样本集的分布为混合高斯分布4支持向量机部分o4.1CvSVMo4.2CvSVMParamso4.3CvSVM::traino4.4CvSVM::get_support_vector*o4.5补充:在WindowsXP+OpenCVRC1平台下整合OpenCV与libSVMo4.6常用libSVM资料链接5决策树o5.1CvDTreeSplito5.2CvDTreeNodeo5.3CvDTreeParamso5.4CvDTreeTrainDatao5.5CvDTreeo5.6CvDTree::traino5.7CvDTree::predict6Boostingo6.1CvBoostParamso6.2CvBoostTreeo6.3CvBoosto6.4CvBoost::traino6.5CvBoost::predicto6.6CvBoost::pruneo6.7CvBoost::get_weak_predictors7RandomTrees8Expectation-Maximizationo8.1CvEMParamso8.2nclusterso8.3cov_mat_typeo8.4start_stepo8.5term_crito8.6probso8.7weightso8.8covso8.9means9神经网络10中文翻译者[编辑]简介:通用类和函数机器学习库(MLL)是一些用于分类、回归和数据聚类的类和函数。大部分分类和回归算法是用C++类来实现。尽管这些算法有一些不同的特性(像处理missingmeasurements的能力,或者categoricalinputvariables等),这些类之间有一些相同之处。这些相同之处在类CvStatModel中被定义,其他ML类都是从这个类中继承。[编辑]CvStatModelML库中的统计模型基类。classCvStatModel{public:/*CvStatModel();*//*CvStatModel(constCvMat*train_data...);*/virtual~CvStatModel();virtualvoidclear()=0;/*virtualbooltrain(constCvMat*train_data,[inttflag,]...,constCvMat*responses,...,[constCvMat*var_idx,]...,[constCvMat*sample_idx,]...[constCvMat*var_type,]...,[constCvMat*missing_mask,]misc_training_alg_params...)=0;*//*virtualfloatpredict(constCvMat*sample...)const=0;*/virtualvoidsave(constchar*filename,constchar*name=0)=0;virtualvoidload(constchar*filename,constchar*name=0)=0;virtualvoidwrite(CvFileStorage*storage,constchar*name)=0;virtualvoidread(CvFileStorage*storage,CvFileNode*node)=0;};在上面的声明中,一些函数被注释掉。实际上,一些函数没有一个单一的API(缺省的构造函数除外),然而,在本节后面描述的语法和定义方面有一些相似之处,好像他们是基类的一部分一样。注意:opencv1.0版本对CvStatModel类做了修改,类的声明如下。classCV_EXPORTSCvStatModel{public:CvStatModel();virtual~CvStatModel();virtualvoidclear();virtualvoidsave(constchar*filename,constchar*name=0);virtualvoidload(constchar*filename,constchar*name=0);virtualvoidwrite(CvFileStorage*storage,constchar*name);virtualvoidread(CvFileStorage*storage,CvFileNode*node);protected:constchar*default_model_name;};[编辑]CvStatModel::CvStatModel缺省构造函数CvStatModel::CvStatModel();ML中的每个统计模型都有一个无参数构造函数。这个构造函数在两步法构造时非常有用,先调用这个缺省构造函数,紧接着调用tranin()或者load()函数.(Thisconstructorisusefulfor2-stagemodelconstruction,whenthedefaultconstructorisfollowedbytrain()orload().)[编辑]CvStatModel::CvStatModel(...)训练构造函数CvStatModel::CvStatModel(constCvMat*train_data...);*/大多数ML类都提供一个单步创建+训练的构造函数。此构造函数等价于缺省构造函数,加上一个紧接的train()方法调用,所传入的参数即为调用的参数。[编辑]CvStatModel::~CvStatModel虚拟析构函数(Virtualdestructor)CvStatModel::~CvStatModel();基类析构被声明为虚方法,因此你可以安全地写出下面的代码:CvStatModel*model;if(use_svm)model=newCvSVM(.../*SVMparams*/);elsemodel=newCvDTree(.../*Decisiontreeparams*/);...deletemodel;一般,每个继承类的析构器不用做任何操作,但是如果调用了重载的clear()方法,将释放全部内存资源。[编辑]CvStatModel::clear释放内存,重置模型状态voidCvStatModel::clear();clear方法和析构函数发生的行为相似,比如:clear方法释放类成员所占用的内存空间。然而,和析构函数不同的是,clear方法不析构对象自身,也即调用clear方法后,对象本身在将来仍然可以使用。一般情况下,析构器、load方法、read方法、派生类train成员调用clear方法释放内存空间,甚至是用户也可以进行明确的调用。[编辑]CvStatModel::save将模型保存到文件voidCvStatModel::save(constchar*filename,constchar*name=0);save方法将整个模型状态以指定名称或默认名称(取决于特定的类)保存到指定的XML或YAML文件中。该方法使用的是cxcore中的数据保存功能。[编辑]CvStatModel::load从文件中装载模型voidCvStatModel::load(constchar*filename,constchar*name=0);load方法从指定的XML或YAML文件中装载指定名称(或默认的与模型相关名称)的整个模型状态。之前的模型状态将被clear()清零。请注意,这个方法是虚的,因此任何模型都可以用这个虚方法来加载。然而,不像OpenCV中的C类型可以用通用函数cvLoad()来加载,这里模型类型无论如何都要是已知的,因为一个空模型作为恰当类的一种,必须被预先建构。这个限制将会在未来的ML版本中移除。[编辑]CvStatModel::write将模型写入文件存储voidCvStatModel::write(CvFileStorage*storage,constchar*name);write方法将整个模型状态用指定的或默认的名称(取决于特定的类)写到文件存储中去。这个方法被save()调用。[编辑]CvStatModel::read从文件存储中读出模型voidCvStatMode::read(CvFileStorage*storage,CvFileNode*node);read方法从文件存储中的指定节点中读取整个模型状态。这个节点必须由用户来定位,如使用cvGetFileNodeByName()函数。这个方法被load()调用。之前的模型状态被clear()清零。[编辑]CvStatModel::train训练模型boolCvStatMode::train(constCvMat*train_data,[inttflag,]...,constCvMat*responses,...,[constCvMat*var_idx,]...,[constCvMat*sample_idx,]...[constCvMat*var_type,]...,[constCvMat*missing_mask,]misc_training_alg_params...);这个函数利用输入的特征向量和对应的响应值(responses)来训练统计模型。特征向量和其对应的响应值都是用矩阵来表示。缺省情况下,特征向量都以行向量被保存在train_data中,也就是所有的特征向量元素都是连续存储。不过,一些算法可以处理转置表示,即特征向量用列向量来表示,所有特征向量的相同位置的元素连续存储。如果两种排布方式都支持,这个函数的参数tflag可以使用下面的取值:tflag=CV_ROW_SAMPLE表示特征向量以行向量存储;tflag=CV_COL_SAMPLE表示特征向量以列向量存储;训练数据必须是32fC1(32位的浮点数,单通道)格式响应值通常是以向量方式存储(一个行,或者一个列向量),存储格式为32sC1(仅在分类问题中)或者32fC1格式,每个输入特征向量对应一个值(虽然一些算法,比如某几种神经网络,响应值为向量)。对于分类问题,响应值是离散的类别标签;对于回归问题,响应值是被估计函数的输出值。一些算法只能处理分类问题,一些只能处理回归问题,另一些算法这两类问题都