K-最近邻分类器精度

K-Nearest Neighbour Classifier accuracy

我按照 MATLAB KNN 分类器的示例进行了 10 次交叉验证,我在计算模型性能的阶段迷路了,请查看下面的代码并就如何正确获得准确度提出建议我的百分比 (%) 分类,我没有得到 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); 

计算错误

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

当然有几种方法可以做到这一点(为每个预测构建一个排序的距离向量是最简单的方法之一),但问题是如果你在函数集上有性能 requirements/limitations 你可以使用。

建议链接(基本上是 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