K最近邻问题

时间:2014-04-02 22:30:42

标签: r algorithm data-mining knn

嗨我在尝试在代码中实现时最难理解K最近邻居算法的工作原理。我在R中实现这个,但只是想了解工作情况,我并不像代码那样担心代码。我将发布我的内容,我的数据以及我的问题:

Training Data (just a portion of it): 

Feature1 | Feature2  | Class
   2     |     2     |   A
   1     |     4     |   A
   3     |     10    |   B
   12    |     100   |   B
   5     |     5     |   A

到目前为止,在我的代码中:

kNN <- function(trainingData, sampleToBeClassified){

    #file input
    train <- read.table(trainingData,sep=",",header=TRUE)
    #get the data as a matrix (every column but the class column)
    labels <- as.matrix(train[,ncol(train)])
    #get the classes (just the class column)
    features <- as.matrix(train[,1:(ncol(train)-1)])
}

为此我正在计算距离&#34;使用这个公式:

distance <- function(x1,x2) {
   return(sqrt(sum((x1 - x2) ^ 2)))
}

其余算法的过程如下:?

1.遍历每个数据(在这种情况下,每列为2列)并一次计算一个数字的距离并将其与sampleToBeClassified进行比较?

2.在我想要1个最近邻分类的起始情况下,我是否只存储与sampleToBeClassified距离最小的变量?

3.无论最近的距离变量是什么类,找出它是什么类,那么该类成为sampleToBeClassified的类?

我的主要问题是这些功能在这方面发挥了什么作用?我的直觉是两个特征在一起就是将数据项定义为某个类,那么我应该计算它之间的距离呢?

我是否在正确的轨道上? 感谢

1 个答案:

答案 0 :(得分:0)

看起来你正走在正确的轨道上。对于1个最近邻居案例,您的过程中的三个步骤似乎是正确的。对于kNN,您只需要列出k个最近邻居,然后确定哪个类在该列表中最为普遍。

至于功能,这些只是定义每个实例的属性,并且(希望)能够告诉我们它们属于哪个类。例如,如果我们尝试对动物进行分类,我们可以使用heightmass作为功能。因此,如果我们在类elephant中有一个实例,它的高度可能是3.27米,质量可能是5142千克。类dog中的实例可能具有0.59米的高度和10.4千克的质量。在分类中,如果我们得到的东西高0.8米,质量为18.5千克,我们就知道它更像是一只狗而不是大象。

由于我们这里只使用了2个特征,因此我们可以轻松地将它们绘制在一个图形上,其中一个特征为X轴,另一个特征为Y(它并不重要)由不同颜色或符号或其他东西表示的不同类别。如果您绘制上述训练数据样本,则很容易看到课程AB之间的分离。

相关问题