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)