提高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-NNclassifier 的库很有可能提供此类实用程序。

【讨论】:

以上是关于提高knn分类器的准确性的主要内容,如果未能解决你的问题,请参考以下文章

如何定义kNN分类器的最大k?

不平衡数据集的 Knn 分类器

具有 ROC 分析的 KNN 分类器

为啥逻辑回归分类器的准确率与 k 近邻不同? [关闭]

使用交叉验证的 KNN 分类器

分类器的选择