Я пытаюсь расширить этот ответ в классификатор knn:
load fisheriris;
% // convert species to double
isnum = cellfun(@isnumeric,species);
result = NaN(size(species));
result(isnum) = [species{isnum}];
% // Crossvalidation
vals = crossval(@(XTRAIN, YTRAIN, XTEST, YTEST)fun_knn(XTRAIN, YTRAIN, XTEST, YTEST), meas, result);
функция fun_knn
:
function testval = fun_knn(XTRAIN, YTRAIN, XTEST, YTEST)
yknn = knnclassify(XTEST, XTRAIN, YTRAIN);
[~,classNet] = max(yknn,[],2);
[~,classTest] = max(YTEST,[],2);
[~,classTest] = find(YTEST);
cp = classperf(classTest, classNet);
testval = cp.CorrectRate;
end
Я получаю эту ошибку: Ground truth must have at least two classes.
Похоже, проблема в том, что knnclassify
дает пустой результат. Я хотел бы использовать более современные функции, такие как fitcknn
, однако я не знаю, как я могу использовать обучение и ввод задачи для этой функции.