我跟着一个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);
答案 0 :(得分:1)
错误计算
行
index = cellfun(@strcmp,y,labels(test));
errorMat(i) = sum(index)/length(y);
计算 i -th分类的成功率(介于0和1之间)。然后,平均成功率是所有10个成功率的平均值(每个评估一个)。
该行
cvError = 1-mean(errorMat);
然后是平均错误率。例如,如果您的成功率等于0(=平均分类器始终失败),则错误率将等于1,而反之亦然。这称为complementary event概率。
fitcknn
和knn.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