В MATLAB, используя следующую функцию, почему точность классификации (acc1, acc2) рассчитывается по-разному? - PullRequest
1 голос
/ 07 ноября 2019

Следующая функция ( knn_test ) принимает следующие параметры: X обозначает выборки набора данных, Y обозначает метки набора данных и filterindex соответствует фильтру столбца. Если я хочу фильтровать данные, filterIndex устанавливается в 1, в зависимости от того, какой столбец должен быть отфильтрован. Я хочу проверить два метода удержания. Один с функцией crossval , а другой с функцией cvpartition . Но когда я вызываю этот метод, переменные acc1 и acc2 показывают разные значения.

Я добавил точку останова в код и отладил код. Я изучил свойство раздела CVKNNModels, и то же самое было и с разделом de c в Model 2.

Что могло пойти не так в следующем коде?

Почему эти две переменные точности принимали разныезначения?

Если я хочу использовать эту функцию для удержания классификации, какую модель мне выбрать?

Спасибо.

function [acc1,acc2]=knn_test(X,Y,filterIndex)
columnfilterIndex = find(filterIndex==1);

%Model 1
tra1Data = X(:,[columnfilterIndex]);
tra1Label=Y;
KNNModel1=fitcknn(tra1Data, tra1Label, 'Distance', 'Euclidean', 'NumNeighbors', 3, 'DistanceWeight', 'Equal', 'Standardize', true);
rng('default');
CVKNNModel = crossval(KNNModel1,'holdout',0.3);
loss=kfoldLoss(CVKNNModel);
acc1=1-loss;

%Model 2
rng('default');
c = cvpartition(Y,'HoldOut',0.3);
tra2Data=X(c.training,[columnfilterIndex]);
tra2Label=Y(c.training,:);
test2Data=X(c.test,[columnfilterIndex]);
test2Label=Y(c.test,:);
KNNModel2 = fitcknn(tra2Data,tra2Label,'Distance', 'Euclidean','NumNeighbors',3, 'DistanceWeight', 'Equal','Standardize', true);
pre_test = predict(KNNModel2,test2Data);
correctPredictions = (pre_test == test2Label);
acc2 = sum(correctPredictions)/length(correctPredictions);
%perf=classperf(uint8(test2Label),uint8(pre_test)); 
%acc2=perf.CorrectRate;
...