【问题标题】:K-Nearest Neighbour Classifier accuracyK-最近邻分类器精度
【发布时间】:2015-01-26 19:30:50
【问题描述】:

我遵循了一个带有 10 倍交叉验证的 MATLAB KNN 分类器的示例,我在计算模型性能的阶段迷失了方向,请查看我下面的代码并就如何正确获得分类准确性的建议以百分比 (%) 表示,我没有得到 cVError = 1-mean(errorMat) 部分。其次,fitcknn 和 knn.predict 函数用于训练和测试模型,我需要帮助我如何创建自己的函数来完成相同的任务。谢谢你。

indices = crossvalind('kfold',labels,10);
confusionMatrix = cell(1,1);
errorMat = zeros(1,10);
for i = 1:10
test = (indices==i);
train = ~test;
knn = fitcknn(data(train,:),labels(train),'NumNeighbors',kVal);
y = knn.predict(data(test,:));
index = cellfun(@strcmp,y,labels(test));
errorMat(i) = sum(index)/length(y);
confusionMatrix{i} = confusionmat(labels(test),y);
end

% Calculate misclassification error
cvError = 1-mean(errorMat); 

【问题讨论】:

    标签: matlab confusion-matrix


    【解决方案1】:

    误差计算

    线条

    index = cellfun(@strcmp,y,labels(test));
    errorMat(i) = sum(index)/length(y);
    

    计算第 i 个分类(介于 0 和 1 之间)的 成功 率。平均 成功率 是所有 10 个成功率的平均值(每个评估一个)。

    线

    cvError = 1-mean(errorMat); 
    

    是平均错误率。例如,如果您的成功率等于 0(=平均而言分类器总是失败),则错误率将等于 1,反之亦然。这称为complementary event 概率。

    fitcknnknn.predict 实现

    原生 MATLAB 函数通常更快,因为它们经过优化和预编译。 但是,如果您需要自己实现它们(例如,为了家庭作业),您应该阅读数学理论,然后逐步实现逻辑,尽管这可能需要时间。如果您遇到问题,当然会邀请您使用您的暂定代码发布一个新问题。

    当然有几种方法可以做到这一点(为每个预测构建排序距离向量是最简单的方法之一),但问题是您是否对可以使用的函数集有性能要求/限制。

    建议的链接(基本上是 Google 搜索的第一个结果):

    http://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm

    http://www.scholarpedia.org/article/K-nearest_neighbor

    http://www.csee.umbc.edu/~tinoosh/cmpe650/slides/K_Nearest_Neighbor_Algorithm.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2011-06-23
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-03
      • 2018-05-09
      相关资源
      最近更新 更多