2014-09-27 118 views
0

libsvm使用所谓的“稀疏”格式,其中零值不需要存储。 1:1 3:2如何转换为SVM数据格式

我有一个数据集,其中来自一个稀疏矩阵,因此作为具有属性数据被表示。我的数据集的格式是[row_number column_num value]。我粘贴我的数据集如下:

Row number    column number            value 
75         1            0.0079 
76         1            0.0046 
37         1            0.0032 
31         1            0.0028 
41         1            0.0026 
64         1            0.0026 
37         1            0.0025 
18         1            0.0024 
94         1            0.0024 
34         1            0.0023 
64         1            0.0022 
40         1            0.0021 

我的问题是如何将我的数据传输到格式LIBSVM,像 1 18:0.0024 31:0.0028 34:0.0023 37:0.0032 37:0.0025 40: 0.0021 41:0.0026 ......

注意:+1平均等级1,如果我想表达类2,我会在数据前加上+2。 任何人都可以给予帮助,并告诉我如何通过使用Matlab来实现这一点!非常感谢!

回答

0

请看下面的例子稀疏矩阵:

x = sparse(10,1); 
x(3) = 0.04546236; 
x(7) = 1.726; 
x(8) = 0.63; 

然后

[row, col, val] = find(x); 

row = 
    3 
    7 
    8 

val = 
    0.0455 %// this appears rounded, but the correct value is stored 
    1.7260 
    0.6300 

所以:

str = strcat(num2str(row), ':', num2str(val), {' '}); 
str = [str{:}]; 
str = regexprep(str, ':\s+', ':'); %// remove extra spaces 

给串

3:0.045462 7:1.726 8:0.63 

要添加字符串​​在前面,用标准的连接:

str = ['+1 ' str]; 
+0

路易斯Mendo,非常感谢! – 2014-09-27 18:28:24

+0

另一个问题,如何把+1或+2或+3 ...放在数据前面? – 2014-09-27 18:31:01

+0

查看编辑答案 – 2014-09-27 18:33:10

相关问题