2014-09-20 98 views
0

我有一个向量x,有2列(第1列是特征1,第2列是特征2),每行代表一个数据点。我还有另一个向量,我们称之为c,其中包含每个数据点(1或2)的类标签,但只有2个类。是否有一种简单的方法只使用knnsearch来构建K-NN分类器?我已经尝试了将近两整天的时间,但我无法完成它的工作。我知道我的数据中的哪些点是训练,验证和测试集。那么我应该查看被错误分类的点数,并且看看这个数字随着k的增加而变化。有人有建议吗?在这一点上我会采取任何我能得到的。即使只是一个大纲。仅使用knnsearch(MATLAB)使用knn分类的简单方法?

回答

1

如果您添加了代码并指定了代码的哪部分不起作用,情况会更好。在如何knnsearch工作的一般建议,

K = 1 % constant. 'K'th nearest neighbor 
x = rand(10, 2) % 10 data with length 2 feature 
c = rand(2, 2) % class data point, 2 classes with length 2 feature 
outputClass = knnsearch(c, x, 'K', K) % knn-classifies x in c class points 

输出类的每个点x的。

outputClass = 

    2 
    2 
    1 
    2 
    2 
    2 
    1 
    2 
    2 
    1 

也就是说,对于x中的每个点,它返回欧几里德距离中c中最近点的索引。

如果你想看看有多少人会被误判,您可以使用

sum(outputClass ~= expectedClass) 

但是,如果你只有2班,增钾将变得毫无意义。 KNN返回接近数据点的K类。如果只有2个类别,则K = 2的KNN将具有与K = 1的KNN完全相同的信息量。通常,您使用KNN分类将点分类到多个类,以找到k个最接近的类。

+0

我想我明白你在说什么,但是不应该是你期望的课程?或者至少我原来是这么想的。 – 2014-09-21 00:55:46

+0

我不认为这实际上是一个分类,但是,对吗?如果在训练数据上使用这个,我可以在验证等方面进行测试吗? – 2014-09-21 01:22:39

+0

我明白了。你想用c标记的训练数据找到knn的中心。你不能只用knn来达到这个目的。 – 2014-09-21 03:03:43