2017-02-17 16 views
0

Следующий код выполняет 10-кратное перекрестной проверки с использованием линейного дискриминантного анализа:Перекрестная проверка с использованием анализа линейной дискриминантной

load fisheriris 
indices = crossvalind('Kfold',species,10); 
cp = classperf(species); % initializes the CP object 

for i = 1:10 
    test = (indices == i); train = ~test; 
    class = classify(meas(test),meas(train),species(train)); 
    % updates the CP object with the current classification results 
    classperf(cp,class,test) 
end 

cp.CorrectRate 

Как это может быть изменен, чтобы использовать fitcdiscr вместо того, чтобы классифицировать по линии 7? Когда я пытаюсь, я получаю сообщение об ошибке (Неверное количество аргументов). Я не знаю, какие аргументы нужны или нет.

+1

Возможно, посмотрите [в документации] (https://in.mathworks.com/help/stats/fitcdiscr.html?requestedDomain=www.mathworks.com) –

+0

Из [docs] (https: // www. mathworks.com/help/stats/fitcdiscr.html#bt6d86x-2_1): 'fitcdiscr (meas, species)' – EBH

+0

Когда я пытаюсь fitcdiscr (meas, species), я получаю следующую ошибку: Ошибка при использовании classreg.learning.internal. DisallowVectorOps/subsref (строка 16) Вы не можете индексировать объект класса ClassificationDiscriminant, используя() индексирование. Ошибка в classperf (строка 223) gps = varargin {1} (:); – anonymous2015

ответ

1

fitcdiscr возвращает модель, основанную на данных обучения с истинными метками. Поэтому для того, чтобы получить предсказанные классы (класс), нам нужно использовать модельный метод для прогнозирования.

load fisheriris 
indices = crossvalind('Kfold',species,10); 
cp = classperf(species); 
for i = 1:10 
    test = (indices == i); train = ~test; 
    Mdl = fitcdiscr(meas(train,:), species(train,:)); 
    class = Mdl.predict(meas(test,:)); 
    classperf(cp,class,test); 
end 
cp.CorrectRate 

Я проверил это со старой функцией (классифицировать), и CorrectRate был таким же.