[英]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个最近的邻居,然后确定该列表中最常见的类。
至于功能,这些只是定义每个实例的属性,并且(希望)为我们提供了它们所属的类的指示。 例如,如果我们尝试对动物进行分类,则可以使用height
和mass
作为特征。 因此,如果我们在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.