2012-02-10 101 views
3

OpenCV中的机器学习算法似乎使用以CSV格式读取的数据。例如参见this cpp file。的数据使用以下代码读入的OpenCV机器学习类CvMLData用于OpenCV机器学习算法的CSV格式

CvMLData data; 
data.read_csv(filename) 

然而,似乎没有成为对CSV文件所需的格式的任何容易获得的文档。有谁知道如何安排CSV文件?

其他(非Opencv)程序通常每个训练示例都有一行,并以整数或字符串开头,指示类标签。

+0

请参阅[本](http://www.opencv.org.cn/opencvdoc/2.3.1/html/modules/ml/doc/mldata.html),除介绍性说明外, CvMLData :: read_csv'获取关于数值/分类值的更多细节。 – fotNelton 2012-02-12 07:04:15

+0

谢谢,我读过它,它给出了一些见解,但并没有真正给出所需文件格式的绝对具体描述,特别是类标签的每一行中的位置,类标签所需的格式(整数,字符串等),特征矢量格式等。 – 2012-02-12 15:44:51

回答

2

如果我读source for that class,特别是str_to_flt_elem功能,并且class documentation我得出结论:在文件中的具体条目的格式是:

  1. 凡是可以通过strod
  2. 被解析到一个双一个问号(?)或表示缺失值的空字符串
  3. 任何不解析为double的字符串。

项目1和2仅适用于功能。与第3项相匹配的任何东西都被假定为类别标签,并且据我所能推断出项目的顺序无关紧要。 read_csv函数会自动为csv文件中的每一列指定正确的类型,并且(如果需要)可以用set_response_index覆盖标签。使用分隔符明智的方式,您可以使用默认值(,)或将其设置为任何您喜欢的内容,然后使用set_delimiter(只要您不使用小数点)调用read_csv。

所以这应该工作,例如,6个数据点中的3个教学班,每点3,特点:

A,1.2,3.2e-2,+4.1 
A,3.2,?,3.1 
B,4.2,,+0.2 
B,4.3,2.0e3,.1 
C,2.3,-2.1e+3,-.1 
C,9.3,-9e2,10.4 

您可以将文本标签移动到任何你想要的列,甚至有多个文本标签。