【发布时间】:2015-05-12 08:53:32
【问题描述】:
根据libsvm faqs,下面一行代码将每个特征在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))
所以我正在使用这个代码:
v_feature_trainN=(v_feature_train - repmat(mini,size(v_feature_train,1),1))*spdiags(1./(maxi-mini)',0,size(v_feature_train,2),size(v_feature_train,2));
v_feature_testN=(v_feature_test - repmat(mini,size(v_feature_test,1),1))*spdiags(1./(maxi-mini)',0,size(v_feature_test,2),size(v_feature_test,2));
我用第一个来训练分类器,第二个用来分类...
在我看来,缩放应该由以下人员执行:
即:
v_feature_trainN2=(v_feature_train -min(v_feature_train(:)))./(max(v_feature_train(:))-min((v_feature_train(:))));
v_feature_test_N2=(v_feature_test -min(v_feature_train(:)))./(max(v_feature_train(:))-min((v_feature_train(:))));
现在我比较了使用这两种缩放方法的分类结果,第一种优于第二种。 问题是: 1)第一种方法到底是什么?我不明白。 2) 为什么 libsvm 建议的代码优于第二个(例如 80% vs 60%)? 提前非常感谢您
【问题讨论】:
-
变量名能保持一致吗?第二个版本也可以使用
data。 -
Protip:你应该定义一个函数,而不是用稍微不同的变量名编写两次完全相同的代码。你甚至可以使用这样的匿名函数。
normalize = @(D) (D-min(D(:)))./(max(D(:))-min(D(:)));然后使用:v_feature_trainN = normalize(v_feature_train)