libsvm使用所谓的“稀疏”格式,其中不需要存储零值。因此,具有属性1 0 2 0的数据表示为:1:1 3:2
我有一个数据集,它来自稀疏矩阵。我的数据集的格式为[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来实现这一目标!非常感谢!
考虑以下示例稀疏矩阵:
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
要'+1 '
在前面添加字符串,只需使用标准串联:
str = ['+1 ' str];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句