0

我遵循了具有 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); 
4

1 回答 1

1

误差计算

线条

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

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

线

cvError = 1-mean(errorMat); 

那么是平均错误率。例如,如果您的成功率等于 0(=平均分类器总是失败),则错误率将等于 1,反之亦然。这称为互补事件概率。

fitcknnknn.predict实施

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

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

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

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

于 2015-01-26T11:30:50.203 回答