是否 LibSVM 接受科学格式的浮点数?
一个功能…
index: 4
value: 1.04515435733819E-05
...看起来像这样:
4:1.04515435733819E-05
我有一个很大的训练文件,里面充满了浮点值,它们的指数范围从
-06
开始。至 +31
.(注意:我担心特征值的格式。
我知道训练文件的格式,即:
label index:value index:value ...
)我正在使用 Visual C++ 2010 我正在写
value
使用 String
到文件和 StreamWriter
类。
最佳答案
鉴于 LibSVM ( v3.16 ) 使用 stdlib
的 double strtod(const char *, char **)
函数读取它应该接受的特征值 strtod()
可以读取的每个符号 .
(顺便说一句,标签也是如此,从下面的片段中可以看出,标签也可以是浮点数。)
有问题的代码可以在 void read_problem(const char *filename)
中找到来自 svm-train.c
文件来自 LibSVM 的源代码分发。
这是read_problem(...)
相关部分的精简版。 :
label = strtok(*line," \t\n");
problem->y[i] = strtod(label,&endptr); // document label
while (1) {
idx = strtok(NULL,":");
val = strtok(NULL," \t");
(*x_space)[j].index = (int)strtol(idx,&endptr,10); // feature index
(*x_space)[j].value = strtod(val,&endptr); // feature value
++j;
}
关于svm - LibSVM 是否接受带有科学格式 float 的训练文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576674/