【问题标题】:How to convert to SVM data format如何转换为 SVM 数据格式
【发布时间】:2014-11-22 12:38:18
【问题描述】:

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 实现这一点!非常感谢!

【问题讨论】:

    标签: matlab matlab-figure matlab-guide


    【解决方案1】:

    考虑以下示例稀疏矩阵:

    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];
    

    【讨论】:

    • 另一个问题,如何在数据前面加上+1 or +2 or +3 ...?
    猜你喜欢
    • 2018-05-05
    • 2020-03-05
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    相关资源
    最近更新 更多