【问题标题】:Does LibSVM accept training files with floating-point numbers in the scientific format?LibSVM 是否接受具有科学格式的浮点数的训练文件?
【发布时间】:2012-11-14 15:04:05
【问题描述】:

LibSVM 是否接受科学格式的浮点数?

具有...的功能

index: 4
value: 1.04515435733819E-05

...看起来像这样:

4:1.04515435733819E-05

我有一个很大的训练文件,其中充满了浮点值,它们的指数范围从 -06+31

(注意:我关心的是特征值的格式。
我知道训练文件的格式,即:label index:value index:value ...)

我正在使用 Visual C++ 2010,我正在使用 StringStreamWriter 类将 value 写入文件。

【问题讨论】:

    标签: svm libsvm


    【解决方案1】:

    鉴于 LibSVM (v3.16) 使用 stdlibdouble strtod(const char *, char **) 函数来读取它应该接受的特征值所有可以被strtod()阅读

    (顺便说一句,标签也是如此,如下面的 sn-p 所示,也可以是浮点数。)

    可以在 LibSVM 的源代码分发的 svm-train.c 文件中的 void read_problem(const char *filename) 中找到相关代码。

    这里是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;
    }
    

    【讨论】:

    • 但是,将 ...E-05 更改为 ...E+05 将改变数据的含义。如果我尝试将完整的数据集从负指数转移到正指数,当然,我很容易越界。
    猜你喜欢
    • 2017-08-07
    • 2013-10-10
    • 2014-09-23
    • 2014-01-25
    • 1970-01-01
    • 2013-10-10
    • 2013-05-12
    • 2014-08-01
    • 2014-06-11
    相关资源
    最近更新 更多