Как создать матрицу путаницы, используя вывод функции crossval() в классификаторе Matlab SVM?

Мне нужно измерить производительность классификатора SVM в Matlab. Матрица путаницы должна использоваться в качестве меры эффективности. Однако в примерах в Matlab можно рассчитать только величину потерь. Я не смог найти информацию о том, как создать матрицу путаницы из результата функции crossval().

SVMModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF',...
    'KernelScale','auto');
CVSVMModel = crossval(SVMModel);
FirstModel = CVSVMModel.Trained{1};

person elmass    schedule 21.12.2015    source источник
comment
Если нет другого пути, вы можете хотя бы вычислить матрицу вручную. Классифицируйте свои тестовые данные, используя классификатор SVM. Затем посмотрите, какие элементы тестовых данных соответствуют выходным данным классификатора, и сравните их с истинным классом.   -  person mikkola    schedule 21.12.2015
comment
Да, на самом деле я делаю это. Однако я искал более практичный способ.   -  person elmass    schedule 21.12.2015


Ответы (1)


Пример кода Matlab для этого.

`% Пример 3 % Вычислите матрицу путаницы, используя стратифицированную 10-кратную перекрестную проверку: % https://www.mathworks.com/help/stats/crossval.html

загрузить('рыбак'); % Метка класса y = вид; % Измерения для классификации с помощью X = изм.;

% порядок порядка классов = уникальный (y); % Порядок групповых меток

cp = cvpartition (y, 'k', 10); % Стратифицированная перекрестная проверка

f = @(xtr,ytr,xte,yte)confusionmat(yte,classify(xte,xtr,ytr),'order',order);

cfMat = crossval(f,X,y,'partition',cp);

cfMat = reshape(sum(cfMat),3,3) % cfMat = % 50 0 0 % 0 48 2 % 0 1 49 % cfMat представляет собой сумму 10 матриц путаницы из 10 наборов тестов.`

person Kieran Inductance D    schedule 18.02.2017