CvStatModel

来源:互联网 发布:在合肥找php工作好找吗 编辑:程序博客网 时间:2024/06/06 05:18

ML库中的统计模型基类。

ML库中的统计模型基类。

缺省构造函数
CvStatModel::CvStatModel();

ML中的每个统计模型都有一个无参数构造函数。这个构造函数在”两步法”构造时非常有用,先调用这个缺省构造函数,紧接着调用 tranin() 或者load() 函数.

CvStatModel::CvStatModel(…)
训练构造函数
CvStatModel::CvStatModel( const CvMat* train_data … ); */

大多数 ML 类都提供一个单步创建+训练的构造函数。此构造函数等价于缺省构造函数,加上一个紧接的 train() 方法调用,所传入的参数即为调用的参数。

CvStatModel::~CvStatModel
虚拟析构函数(Virtual destructor)
CvStatModel::~CvStatModel();

基类析构被声明为虚方法,因此你可以安全地写出下面的代码:

CvStatModel* model;if( use_svm )    model = new CvSVM(... /* SVM params */);else    model = new CvDTree(... /* Decision tree params */);...delete model;

一般,每个继承类的析构器不用做任何操作,但是如果调用了重载的clear()方法,将释放全部内存资源。

CvStatModel::clear
释放内存,重置模型状态
void CvStatModel::clear();

clear方法和析构函数发生的行为相似,比如:clear方法释放类成员所占用的内存空间。然而,和析构函数不同的是,clear方法不析构对象自身,也即调用clear方法后,对象本身在将来仍然可以使用。一般情况下,析构器、load方法、read方法、派生类train成员调用clear方法释放内存空间,甚至是用户也可以进行明确的调用。

CvStatModel::save
将模型保存到文件
void CvStatModel::save( const char* filename, const char* name=0 );

save方法将整个模型状态以指定名称或默认名称(取决于特定的类)保存到指定的XML或YAML文件中。该方法使用的是cxcore中的数据保存功能。

CvStatModel::load
从文件中装载模型
void CvStatModel::load( const char* filename, const char* name=0 );

load方法从指定的XML或YAML文件中装载指定名称(或默认的与模型相关名称)的整个模型状态。之前的模型状态将被clear()清零。

请注意,这个方法是虚的,因此任何模型都可以用这个虚方法来加载。然而,不像OpenCV中的C类型可以用通用函数cvLoad()来加载,这里模型类型无论如何都要是已知的,因为一个空模型作为恰当类的一种,必须被预先建构。这个限制将会在未来的ML版本中移除。

CvStatModel::write
将模型写入文件存储
void CvStatModel::write( CvFileStorage* storage, const char* name );

write方法将整个模型状态用指定的或默认的名称(取决于特定的类)写到文件存储中去。这个方法被save()调用。

CvStatModel::read
从文件存储中读出模型
void CvStatMode::read( CvFileStorage* storage, CvFileNode* node );

read方法从文件存储中的指定节点中读取整个模型状态。这个节点必须由用户来定位,如使用cvGetFileNodeByName()函数。这个方法被load()调用。

之前的模型状态被clear()清零。

CvStatModel::train
训练模型
bool CvStatMode::train( const CvMat* train_data, [int tflag,] …, const CvMat* responses, …,
[const CvMat* var_idx,] …, [const CvMat* sample_idx,] …
[const CvMat* var_type,] …, [const CvMat* missing_mask,] … );

这个函数利用输入的特征向量和对应的响应值(responses)来训练统计模型。特征向量和其对应的响应值都是用矩阵来表示。缺省情况下,特征向量都以行向量被保存在train_data中,也就是所有的特征向量元素都是连续存储。不过,一些算法可以处理转置表示,即特征向量用列向量来表示,所有特征向量的相同位置的元素连续存储。如果两种排布方式都支持,这个函数的参数tflag可以使用下面的取值:
tflag=CV_ROW_SAMPLE
表示特征向量以行向量存储;
tflag=CV_COL_SAMPLE
表示特征向量以列向量存储;
训练数据必须是32fC1(32位的浮点数,单通道)格式 响应值通常是以向量方式存储(一个行,或者一个列向量),存储格式为32sC1(仅在分类问题中)或者32fC1格式,每个输入特征向量对应一个值(虽然一些算法,比如某几种神经网络,响应值为向量)。
对于分类问题,响应值是离散的类别标签;对于回归问题,响应值是被估计函数的输出值。一些算法只能处理分类问题,一些只能处理回归问题,另一些算法这两类问题都能处理。
ML中的很多模型也可以仅仅使用选择特征的子集,或者(并且)使用选择样本的子集来训练。为了让用户易于使用,train函数通常包含var_idx和sample_idx参数。var_idx指定感兴趣的特征,sample_idx指定感兴趣的样本。这两个向量可以是整数(32sC1)向量,例如以0为开始的索引,或者8位(8uC1)的使用的特征或者样本的掩码。用户也可以传入NULL指针,用来表示训练中使用所有变量/样本。
除此之外,一些算法支持数据缺失情况,也就是某个训练样本的某个特征值未知(例如,他们忘记了在周一测量病人A的温度)。参数missing_mask,一个8位的同train_data同样大小的矩阵掩码,用来指示缺失的数据(掩码中的非零值)。

通常来说,在执行训练操作前,可以用clear()函数清除掉早先训练的模型状态。然而,一些函数可以选择用新的数据更新模型,而不是将模型重置,一切从头再来。

CvStatModel::predict
预测样本的response
float CvStatMode::predict( const CvMat* sample[, ] ) const;

这个函数用来预测一个新样本的响应值(response)。在分类问题中,这个函数返回类别编号;在回归问题中,返回函数值。输入的样本必须与传给train_data的训练样本同样大小。如果训练中使用了var_idx参数,一定记住在predict函数中使用跟训练特征一致的特征。
后缀const是说预测不会影响模型的内部状态,所以这个函数可以很安全地从不同的线程调用。

原创粉丝点击