首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C\C++中的LIBLINEAR

C\C++中的LIBLINEAR
EN

Stack Overflow用户
提问于 2015-01-31 00:07:17
回答 2查看 680关注 0票数 1

我想在我的C++源代码中直接使用LIBLINEAR (http://www.csie.ntu.edu.tw/~cjlin/liblinear)。虽然在MATLAB/JAVA等语言中使用它看起来很简单,但在C语言中似乎很难;例如,读取README文件,似乎我必须将每个数据矩阵转换为特定的链表格式;

代码语言:javascript
复制
`x' is an array 
of pointers, each of which points to a sparse representation (array 
of feature_node) of one training vector.

For example, if we have the following training data:

LABEL       ATTR1   ATTR2   ATTR3   ATTR4   ATTR5
-----       -----   -----   -----   -----   -----
1           0       0.1     0.2     0       0
2           0       0.1     0.3    -1.2     0
1           0.4     0       0       0       0
2           0       0.1     0       1.4     0.5
3          -0.1    -0.2     0.1     1.1     0.1

and bias = 1, then the components of problem are:

l = 5
n = 6

y -> 1 2 1 2 3

x -> [ ] -> (2,0.1) (3,0.2) (6,1) (-1,?)
     [ ] -> (2,0.1) (3,0.3) (4,-1.2) (6,1) (-1,?)
     [ ] -> (1,0.4) (6,1) (-1,?)
     [ ] -> (2,0.1) (4,1.4) (5,0.5) (6,1) (-1,?)
     [ ] -> (1,-0.1) (2,-0.2) (3,0.1) (4,1.1) (5,0.1) (6,1) (-1,?)

所以,看起来我不能直接使用矩阵,而是,我必须做一个很大的feature_node链表;,不存在一个更简单的系统或者任何例子。我可以用一种更简单的方式来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2017-07-11 05:22:46

我不确定自从您发布这篇文章后,文档是否发生了变化,但我使用了另一个问题[here]中所示的方法,即将问题值加载到矩阵中,而不是重写输入文件以匹配格式。(我逐行解析文件并使用逗号拆分,然后存储在一个名为myData的2d数组中):

代码语言:javascript
复制
struct svm_problem prob;
struct svm_node *x_space;

prob.l = problemSize;

svm_node** x = Malloc(svm_node*, prob.l);

for (int row = 0; row < prob.l; row++)
{
    svm_node* x_space = Malloc(svm_node,4);
    for (int col = 0; col < 4; col++)
    {
        x_space[col].index = col;
        x_space[col].value = myData[row][col];
    }
    x_space[4].index = -1;
    x[row] = x_space;
}

prob.x = x;

它似乎工作得很好,至少对我的需求是这样。我不太清楚这是否解决了你的问题(也许晚了几年)。

希望对其他人也有用处。

票数 1
EN

Stack Overflow用户

发布于 2017-07-16 17:58:15

对于那些被困在这里的人来说,索引应该从1开始。所以它应该是:

代码语言:javascript
复制
x_space[col].index = col + 1;

这是针对liblinear的,我不确定libsvm是否具有相同的格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28240062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档