嗨,我很难理解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.遍历每个数据(在本例中是两列中的每一行),一次计算一个数字的距离,并将其与sampleToBeClassified进行比较?
2.在开始的情况下,我想要1个最近邻分类,我是否只存储到sampleToBeClassified距离最小的变量?
3.无论最近的距离变量是什么,找出它是什么类,然后该类就成为sampleToBeClassified的类?
我的主要问题是,这些功能在其中扮演了什么角色?我的直觉是,这两个特征结合在一起就是将该数据项定义为某个类的原因,那么我应该如何计算它们之间的距离呢?
我是不是走对了路?谢谢
发布于 2014-04-04 01:19:01
看起来你走上了正确的道路。您的流程中的三个步骤对于1最近邻的情况似乎是正确的。对于kNN,您只需要列出k个最近的邻居,然后确定该列表中最流行的类。
至于功能,这些只是定义每个实例的属性,并且(希望)给我们一个关于它们属于哪个类的指示。例如,如果我们试图对动物进行分类,我们可以使用height和mass作为特征。所以如果我们在elephant类中有一个实例,它的高度可能是3.27米,质量可能是5142千克。dog类中的一个实例的高度可能为0.59米,质量为10.4千克。在分类中,如果我们得到的东西高0.8米,质量18.5公斤,我们知道它更有可能是一只狗而不是一头大象。
因为我们在这里只使用了两个特征,所以我们可以很容易地将它们绘制在一个图形上,其中一个特征作为X轴,另一个特征作为Y轴(这与哪一个并不重要),不同的类由不同的颜色或符号等表示。如果您绘制上面的训练数据样本,很容易看到A类和B类之间的分离。
https://stackoverflow.com/questions/22824340
复制相似问题