缩放LIBSVM的测试数据:MATLAB实现

时间:2012-04-07 14:44:02

标签: matlab testing input scaling libsvm

我目前使用LIBSVM支持向量机的MATLAB版本对我的数据进行分类。 LIBSVM文档提到在应用SVM之前进行扩展非常重要,我们必须使用相同的方法来扩展训练和测试数据。

“相同的缩放方法”解释如下: 例如,假设我们将训练数据的第一个属性从[-10, +10]缩放到[-1, +1]。如果测试数据的第一个属性位于[-11, +8]范围内,我们必须将测试数据缩放到[-1.1, +0.8]

可以使用以下MATLAB代码缩放[0,1]范围内的训练数据:

(data - repmat(min(data,[],1),size(data,1),1))*spdiags(1./(max(data,[],1)-min(data,[],1))',0,size(data,2),size(data,2))

但我不知道如何正确地扩展测试数据。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:16)

您提供的代码基本上减去最小值然后除以范围。 您需要存储训练数据功能的最小值和范围。

minimums = min(data, [], 1);
ranges = max(data, [], 1) - minimums;

data = (data - repmat(minimums, size(data, 1), 1)) ./ repmat(ranges, size(data, 1), 1);

test_data = (test_data - repmat(minimums, size(test_data, 1), 1)) ./ repmat(ranges, size(test_data, 1), 1);

答案 1 :(得分:0)

遗憾的是,如果有所有观察值具有相同值的列(如果数据稀疏则可能发生),则Richante的代码不正确。一个例子:

>> data = [1 2 3; 5 2 8; 7 2 100]

data =

     1     2     3
     5     2     8
     7     2   100

>> test_data = [1 2 3; 4 5 6; 7 8 9];
>> minimums = min(data,[],1);
>> ranges = max(data, [], 1) - minimums;
>> data = (data - repmat(minimums, size(data, 1), 1)) ./ repmat(ranges, size(data, 1), 1);
>> data

data =

         0       NaN         0
    0.6667       NaN    0.0515
    1.0000       NaN    1.0000

因此,您必须检查是否存在只有一个值的列。但是,如果整个训练集中只有一个值,但测试集中有多个值,该怎么办?我们在Leave-one-out场景中做了什么,其中测试集中只有一个观察,然后如果训练集的列中的所有值都是0,并且测试集中的相应值是100?这些都是堕落的案例,但可能会发生。但是,当我检查Libsvm库中的文件svm_scale.c时,我注意到了这一部分:

 void output(int index, double value)
{
    /* skip single-valued attribute */
    if(feature_max[index] == feature_min[index])
        return;

    if(value == feature_min[index])
        value = lower;
    else if(value == feature_max[index])
        value = upper;
    else
        value = lower + (upper-lower) * 
            (value-feature_min[index])/
            (feature_max[index]-feature_min[index]);

    if(value != 0)
    {
        printf("%d:%g ",index, value);
        new_num_nonzeros++;
    }
}

所以我们应该忽略这些案例?我真的不知道。正如我所说,我不是这个问题的权威,所以我要等待另一个答案,最好是来自Libsvm的作者自己,以便清理......