【问题标题】:How to implement KNN using Matlab and calculate the percentage accuracy如何使用 Matlab 实现 KNN 并计算百分比准确度
【发布时间】:2016-09-19 03:23:42
【问题描述】:

我是matlab新手,我的目标是实现knn,我有两个不同的txt文件,一个包含测试数据(样本),另一个包含训练数据。

到目前为止,我认为我应该做这样的事情,但我不知道该怎么做。

load fisheriris 
x = meas(:,3:4);
gscatter(x(:,1),x(:,2),species)
newpoint = [5 1.45];
[n,d] = knnsearch(x,newpoint,'k',10);
line(x(n,1),x(n,2),'color',[.5 .5 .5],'marker','o','linestyle','none','markersize',10)

或者也许这是一种更简单的方法,对我来说这两组不同的数据集,样本和训练非常清楚,但这并不能显示预测类的准确性。

 A= [50, 60;
    7,2;
    13,12;
    100,200;];
B=[1,0;
    200,30;
    19,10];
G={'First Row';
    'Second Row';
    'Third Row'};
class = knnclassify(A,B,G);

disp('Result: ');
disp(class);

矩阵如下所示:

Training data:
148.0,50.0,0
187.0,34.0,0
204.0,89.0,0
430.0,161.0,1
427.0,22.0,1
-42.0,469.0,1
more,more,class....

Test data:
290.0,-57.0,0
194.0,-80.0,0
174.0,33.0,0
465.0,691.0,1
270.0,-194.0,1
-56.0,665.0,1
more,more,class....

如何使用 knn 对这些数据进行分类并显示每一行的预测,以便计算准确率?

-------EDITED------

我忘了,如果我需要每个类的准确度,我该怎么办?

【问题讨论】:

    标签: matlab matrix percentage knn


    【解决方案1】:

    这是使用knnclassify的更新代码

    trainData= [148.0,50.0,0; ...
                187.0,34.0,0; ...
                204.0,89.0,0; ...
                430.0,161.0,1; ...
                427.0,22.0,1; ...
                -42.0,469.0,1 ...
                ];
    
    testData=   [290.0,-57.0,0; ...
                194.0,-80.0,0; ...
                174.0,33.0,0; ...
                465.0,691.0,1; ...
                270.0,-194.0,1; ...
                -56.0,665.0,1];
    
    % Data
    Sample=testData(:,1:2);
    Training=trainData(:,1:2);
    Group=trainData(:,3);
    
    % Classify
    k=1;  % number of nearest neighbors used in the classification
    Class = knnclassify(Sample, Training, Group,k);
    
    % Display Prediction
    fprintf('%.1f %.1f - Real %d , Predicted %d\n',[testData.'; Class.']);
    
    % Calculate percentage accuracy for each class
    trueClass=testData(:,3);
    classList=unique(trueClass);
    for classIndex=1:length(classList)
        indexesOfEachClass=find(trueClass==classList(classIndex));
        percentageAccuracyEachClass(classIndex,1)=sum(Class(indexesOfEachClass)==trueClass(indexesOfEachClass))/length(indexesOfEachClass)*100;
    end
    fprintf('\nClass %d Accuracy : %f%%',[classList.'; percentageAccuracyEachClass.']);
    
    % Calculate overall percentage accuracy 
    dataClassifiedAccurately=Class==trueClass;
    percentageAccuracy=sum(dataClassifiedAccurately)/length(dataClassifiedAccurately)*100;
    fprintf('\n\nOverall Accuracy : %f%%\n',percentageAccuracy);
    

    【讨论】:

    • 非常感谢,我现在完全明白了。
    • 如果我需要申请ENN规则,我应该怎么做?有一张带有伪代码的图像:i.imgur.com/axyD7ms.png 如果我采用训练集并找到最大距离和最短距离然后除以行数,它会起作用吗?最后用新编辑的训练数据集找到最近的邻居?
    • 我已经更新了每个类的百分比准确度的答案。接下来是关于 ENN 规则。请将此作为一个新问题提出。
    • 谢谢,您的代码非常清晰,易于理解。我认为找到每个类的准确性的关键是使用索引。
    猜你喜欢
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2016-01-23
    • 2021-04-12
    相关资源
    最近更新 更多