繁体   English   中英

K最近邻居问题

[英]K Nearest Neighbor Questions

嗨,我在尝试在代码中实现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的类?

我的主要问题是功能在其中起什么作用? 我的直觉是,这两个功能共同将那个数据项定义为某个类,那么我应该计算什么呢?

我完全走对了吗? 谢谢

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

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

由于我们在这里仅使用2个特征,因此我们可以轻松地将它们绘制在图形上,其中一个特征作为X轴,另一个特征作为Y(与哪个特征无关紧要),不同类别用不同的颜色表示或符号之类的东西。 如果您在上面绘制训练数据的样本,则很容易看到A类和B类之间的分离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM