机器学习功能的响应?

时间:2012-12-03 01:53:30

标签: opencv machine-learning svm

在完成here解释的任何机器学习功能时。它们都遵循cvStatModel的格式。

例如,NormalBayes的列车功能是通过以下方式实现的:

CvNormalBayesClassifier::train(const Mat& trainData, const Mat& responses, const Mat& varIdx=Mat(), const Mat& sampleIdx=Mat(), bool update=false )

文档告诉您检查cvStatModel以获取有关参数的详细信息。

我不明白的是responses应该采取什么?我知道trainData是我们用来训练系统的数据,但是在回复中应该放什么?

在一个单词包的示例中,响应元素的处理如下:

float label=atof(entryPath.filename().c_str());
labels.push_back(label);

NormalBayesClassifier classifier;
classifier.train(trainingData, labels);

所以这里图像的文件名被转换为双精度并用作responses元素。

我不明白这一点并且对此感到困惑。有人可以解释responses元素应该采取的内容吗?为什么在上面的例子中使用了atof

1 个答案:

答案 0 :(得分:2)

这些模型是受监督的机器学习技术,这意味着训练模型不仅需要训练数据(即测量的矢量),还需要与每个样本相关的标签(或连续值)。例如,如果您尝试检测包含猫的图像,则会有一组训练集,例如500张不包含猫的图像和500张包含猫的图像。您计算所有1000个图像的描述符,并为每个类别分配一个数字(按照惯例,-1表示“非猫”,1表示“猫”)。然后,响应将是1000x1整数的矩阵,前500个值为-1,而剩余的值为1。

在您的示例中,atof用于将目录名称转换为表示类别的唯一编号,因为训练示例可能按文件夹(文件夹猫,狗,自行车等)排序。