По libsvm часто задаваемые вопросы, по следующей шкале кода одной строки каждая функция в интервале [0,1] в Matlabspdiags и функции масштабирования
(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% против 60%)? Большое спасибо заранее
Не могли бы вы согласиться с именами переменных? Может быть, использовать «данные» и для второй версии. – knedlsepp
Protip: вместо того, чтобы писать один и тот же код дважды с немного разными именами переменных, вы должны определить функцию. Вы даже можете использовать анонимную функцию. 'normalize = @ (D) (D-min (D (:))) ./ (max (D (:)) - min (D (:)));' и затем использовать: 'v_feature_trainN = normalize (v_feature_train) ' – knedlsepp