【问题标题】:K Nearest Neighbor QuestionsK 最近邻问题
【发布时间】:2014-05-14 11:55:42
【问题描述】:

您好,当我尝试在代码中实现 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)])
}

为此,我正在使用以下公式计算“距离”:

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

那么算法其余部分的流程如下:?

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

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

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

我的主要问题是这些功能在其中扮演什么角色?我的直觉是这两个特征一起将数据项定义为某个类,那么我应该计算什么之间的距离?

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

【问题讨论】:

    标签: r algorithm data-mining knn


    【解决方案1】:

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

    至于特征,这些只是定义每个实例的属性,并且(希望)给我们一个关于它们属于哪个类的指示。例如,如果我们尝试对动物进行分类,我们可以使用 heightmass 作为特征。所以如果我们在类elephant中有一个实例,它的高度可能是3.27m,质量可能是5142kg。 dog 类中的实例可能具有 0.59m 的高度和 10.4kg 的质量。在分类中,如果我们得到 0.8m 高、18.5kg 质量的东西,我们知道它更可能是狗而不是大象。

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

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2014-04-12
      • 1970-01-01
      • 2018-04-08
      • 2011-12-06
      • 1970-01-01
      相关资源
      最近更新 更多