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

Lil*_*ily 10 testing matlab scaling input libsvm

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

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

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

(data - repmat(min(data,[],1),size(data,1),1))*spdiags(1./(max(data,[],1)-min(data,[],1))',0,size(data,2),size(data,2))
Run Code Online (Sandbox Code Playgroud)

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

非常感谢您的帮助.

Ric*_*nte 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);
Run Code Online (Sandbox Code Playgroud)