Стандартизация - это процесс нормализации каждой функции в ваших учебных примерах, чтобы каждая функция имела среднее значение, равное нулю, и стандартное отклонение, равное единице. Процедура для этого должна была бы найти среднее значение каждого признака и стандартное отклонение каждого признака. После этого мы берем каждую особенность и вычитаем, но соответствующее ей среднее значение и делим на соответствующее стандартное отклонение.
Это хорошо видно по этому коду:
m.mean = mean(train_examples{:,:}); %mean variable
m.std = std(train_examples{:,:}); %standard deviation variable
for i=1:size(train_examples,1)
train_examples{i,:} = train_examples{i,:} - m.mean;
train_examples{i,:} = train_examples{i,:} ./ m.std;
end
m.mean
запоминает среднее значение каждой функции, а m.std
запоминает стандартное отклонение каждой функции. Обратите внимание, что вы должны запомнить оба из них, когда хотите выполнить классификацию во время теста. Это можно увидеть по имеющемуся у вас методу predict
, где он берет тестовые характеристики и вычитает среднее и стандартное отклонение каждой функции из обучающих примеров.
function predictions = predict(m, test_examples)
predictions = categorical;
for i=1:size(test_examples,1)
fprintf('classifying example example %i/%i\n', i, size(test_examples,1));
this_test_example = test_examples{i,:};
% start of standardisation process
this_test_example = this_test_example - m.mean;
this_test_example = this_test_example ./ m.std;
% end of standardisation process
this_prediction = myknn.predict_one(m, this_test_example);
predictions(end+1) = this_prediction;
end
Обратите внимание, что мы используем m.mean
и m.std
в тестовых примерах, и эти величины взяты из обучающих примеров.
Мой пост по стандартизации должен предоставить больше контекста. Кроме того, он достигает того же эффекта, что и код, который вы предоставили, но в более векторизованном виде: Как работает этот код для стандартизации данных?