Прогнозирование меток для нового набора данных (тестовые данные) с использованием перекрестно проверенной модели классификатора Knn в Matlab

У меня есть обучающий набор данных (50000 X 16) и тестовый набор данных (5000 X 16) [16-й столбец в обоих наборах данных - это метки решения или ответ. Метка решения в тестовом наборе данных используется для проверки точности классификации обученного классификатора]. Я использую свои тренировочные данные для обучения и проверки моего перекрестно проверенного классификатора Knn. Я создал модель классификатора с перекрестной проверкой, используя следующий код:

X = Dataset2(1:50000,:); % Use some data for fitting
Y = Training_Label(1:50000,:); % Response of training data

%Create a KNN Classifier model
rng(10); % For reproducibility
Mdl = fitcknn(X,Y,'Distance', 'Cosine', 'Exponent', '', 'NumNeighbors', 10,'DistanceWeight', 'Equal', 'StandardizeData', 1);

%Construct a cross-validated classifier from the model.
CVMdl = crossval(Mdl,'KFold', 10);

%Examine the cross-validation loss, which is the average loss of each cross-validation model when predicting on data that is not used for training.
kloss = kfoldLoss(CVMdl, 'LossFun', 'ClassifError')

% Compute validation accuracy
validationAccuracy = 1 - kloss;

теперь я хочу классифицировать свои тестовые данные с помощью этого перекрестно проверенного классификатора knn, но не могу понять, как это сделать. Я просмотрел доступные примеры в Matlab, но не смог найти подходящей функции или примеров для этого.

Я знаю, что могу использовать функцию «прогноз» для прогнозирования меток классов моих тестовых данных, если мой классификатор не прошел перекрестную проверку. Код выглядит следующим образом:

X = Dataset2(1:50000,:); % Use some data for fitting
Y = Training_Label(1:50000,:); % Response of training data

%Create a KNN Classifier model
rng(10); % For reproducibility
Mdl = fitcknn(X,Y,'Distance', 'Cosine', 'Exponent', '', 'NumNeighbors', 10,'DistanceWeight', 'Equal', 'StandardizeData', 1);

%Classification using Test Data
Classifier_Output_Labels = predict(Mdl,TestDataset2(1:5000,:));

Но я не смог найти аналогичной функции (например, «прогноз») для перекрестно проверенного обученного классификатора knn. Я обнаружил функцию «kfoldPredict» в документации Matlab, но в ней говорится, что функция используется для оценки обученной модели. http://www.mathworks.com/help/stats/classificationpartitionedmodel.kfoldpredict.html Но я не нашел ввода новых данных через эту функцию.

Итак, может ли кто-нибудь посоветовать мне, как использовать модель классификатора с перекрестной проверкой knn для прогнозирования меток новых данных? Любая помощь приветствуется и крайне необходима. :( :(


person stacy    schedule 06.05.2016    source источник


Ответы (2)


Кажется, вы здесь что-то путаете. Перекрестная проверка - это инструмент для выбора и оценки модели. Это не тренировочная процедура как таковая. Следовательно, вы не можете «использовать» перекрестно проверенный объект. Вы прогнозируете, используя обученный объект. Перекрестная проверка - это форма оценки возможностей обобщения данной модели, она не имеет ничего общего с фактическим обучением, это скорее небольшой статистический эксперимент для оценки определенного свойства.

person lejlot    schedule 06.05.2016
comment
Спасибо за любезный ответ. Похоже, я действительно испортил идею перекрестной проверки и обучения. Из объяснения, которое вы дали выше, у меня есть еще несколько вопросов. Перекрестная проверка - это инструмент для выбора модели, означает ли это, что она выбирает лучшую модель (лучшие параметры для нашей модели классификатора)? Если да, то могу ли я заменить различные параметры (например, предшествующие, стоимость и т. Д.) Перекрестной проверенной модели в моей обученной модели для получения лучшего результата .. ?? Или фиткнн сам выбирает лучшую модель? - person stacy; 07.05.2016
comment
У меня довольно низкий уровень классификации (82%) после обучения классификатора, и я не могу понять, как повысить уровень классификации. Действительно извините за мой наивный вопрос. - person stacy; 07.05.2016

Допустим, вы выполняете 10-кратную перекрестную проверку во время изучения модели. Затем вы можете использовать функцию kfoldLoss, чтобы также получить потери CV для каждой складки, а затем выбрать обученную модель, которая дает вам наименьшие потери CV, следующим образом:

modelLosses = kfoldLoss(Mdl,'mode','individual');

Приведенный выше код даст вам вектор длиной 10 (10 значений ошибок CV), если вы выполнили 10-кратную перекрестную проверку во время обучения. Предполагая, что обученная модель с наименьшей ошибкой CV является k-й, вы должны использовать:

testSetPredictions = predict(Mdl.Trained{k}, testSetFeatures);
person maverickdebx    schedule 13.08.2016