Перекрестная проверка с классификатором KNN в Matlab

Я пытаюсь расширить этот ответ в классификатор 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, однако я не знаю, как я могу использовать обучение и ввод задачи для этой функции.


person Woeitg    schedule 16.01.2016    source источник
comment
Как выглядит YTRAIN непосредственно перед вызовом knnclassify? Наземная истина должна иметь как минимум два класса. кажется, указывает на то, что с ним что-то не так (например, неправильная форма или только нули).   -  person Robin Spiess    schedule 18.01.2016