如何对分类器进行投票并获得分类的准确性?

时间:2019-10-21 10:40:39

标签: matlab classification voting

我想通过多数表决来合并五个分类器(SVM,随机森林,朴素贝叶斯,决策树,KNN)的结果。我在tt数组(类标签是二进制1或2)中收集了这些分类器的输出,然后使用了模式函数来获取数组中最频繁的值,并将输出与ytest(测试标签)进行比较以获得tp,tn,fp,fn并计算整体学习的兰德指数准确性。但是分类合奏的准确性总是得到1,这是不正确的。

clear
close all
clc
load datas17.mat;
data=datas17;
[n,m]=size(data);
rows=(1:n);
test_count=floor((1/6)*n);
sum_ens=0;sum_result=0;
test_rows=randsample(rows,test_count);
train_rows=setdiff(rows,test_rows);
test=data(test_rows,:);
train=data(train_rows,:);
xtest=test(:,1:m-1);
ytest=test(:,m);
xtrain=train(:,1:m-1);
ytrain=train(:,m);
%-----------svm------------------
svm=svm1(xtest,xtrain,ytrain);
%-------------random forest---------------
rforest=randomforest(xtest,xtrain,ytrain);
%-------------decision tree---------------
DT=DTree(xtest,xtrain,ytrain);
%---------------bayesian---------------------
NBModel = NaiveBayes.fit(xtrain,ytrain, 'Distribution', 'kernel');
Pred = NBModel.predict(xtest);
dt=Pred;
%--------------KNN----------------
knnModel=fitcknn(xtrain,ytrain,'NumNeighbors',4);
     pred=knnModel.predict(xtest);
     sk=pred;
tt=[svm rforest DT dt sk];
output=zeros(test_count,1);
for i=1:test_count
    output(i,1)=mode(tt(i,:)); 
end
tp_ens=0;tn_ens=0;fp_ens=0;fn_ens=0;
for i=1:test_count

    if(output(i)==1 && ytest(i)==1)
    tp_ens=tp_ens+1;
    end

    if(output(i)==2 && ytest(i)==2)
    tn_ens=tn_ens+1;
    end

    if(output(i)==2 && ytest(i)==1)
    fp_ens=fp_ens+1;
    end

    if(output(i)==1 && ytest(i)==2)
    fn_ens=fn_ens+1;
    end
end
acc_ens=(tp_ens+tn_ens)/(tp_ens+tn_ens+fp_ens+fn_ens);
disp('accuracy of classification ensemble:');
disp(acc_ens);

对于您对这些分类器进行投票并获得分类的准确性,我将不胜感激。

0 个答案:

没有答案