提高knn分类器的准确性
Posted
技术标签:
【中文标题】提高knn分类器的准确性【英文标题】:Enhancing accuracy of knn classifier 【发布时间】:2016-06-16 01:05:48 【问题描述】:我有一个大小为54 * 65536
的训练集和一个18 * 65536
的测试集。
我想用一个knn分类器,但是我有一些问题:
1) 我应该如何定义trainlabel
?
Class = knnclassify(TestVec,TrainVec, TrainLabel,k);
它是一个大小为54 * 1
的向量,它定义了训练集中的每一行属于哪个组?这里的组编号为 1 ,2,..
2)为了找到我使用的准确性:
cp = classperf(TrainLabel);
Class = knnclassify(TestVec,TrainVec, TrainLabel);
cp = classperf(TestLabel,Class);
cp.CorrectRate*100
这是对的吗?有没有其他计算方法?
3) 如何提高准确率?
4) 如何选择最佳的 k 值?
【问题讨论】:
请问有人可以帮我吗?如何提高准确性? 【参考方案1】:我不知道 matlab 也不知道你提供的 knn 的实现,所以我只能回答你的几个问题。
1) 你的假设是正确的。 trainlabel
是一个 54*1
向量或大小为 54 的数组或等效的数组,用于定义训练集中的每个数据点(行)属于哪个组。
2) ... MATLAB / 实现相关,抱歉。
3) 这是一个非常大的讨论。可能的方法是:
选择一个更好的K
值。
对数据进行预处理(如果已经应用,可以更好地进行预处理)。
获得更好/更大的火车组。
仅举几例......
4)您可以在测量每个值的准确性时使用不同的值并保持最佳值。 (注意:如果您这样做,请确保您不要只测量每个 k
值的分类器的准确性,而是使用诸如 10-Folding 之类的技术)。
您用于K-NN
classifier 的库很有可能提供此类实用程序。
【讨论】:
以上是关于提高knn分类器的准确性的主要内容,如果未能解决你的问题,请参考以下文章