k近邻法是机器学习方法最简单的方法之一
基本思路:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于一个类别,则该样本也属于这个样本。在k近邻法算法中,所选择的邻居都是已经正确分类来决定待分样本所属的类别。
k临近算法主要依靠周围有限的邻近样本,属于样本中概率大的样本。
r语言中k近邻法算法的实现
1、class包 knn( )
2、kknn包中的kknn( )
3、caret包 中的train( ) 参数method选择
实现
以iris数据集为例
iris1 <- iris
set.seed(1234)
ind <- createDataPartition(iris1$Species, times = 1, p = 0.5, list = FALSE)
train_data <- iris1[ind, ]
test_data <- iris1[-ind, ]
a <- knn(train_data[, 1:4], test_data[, 1:4], train_data[, 5], k = 3)
> a[1]; a[75]
[1] setosa
Levels: setosa versicolor virginica
[1] virginica
Levels: setosa versicolor virginica
k近邻法流程验证
ceshi <- function(n = 1, k = 3) {
x <- (train_data[, 1:4] - test_data[rep(n, 75), 1:4])^2
train_data$dist1 <- apply(x, 1, function(x) sqrt(sum(x)))
mydata <- train_data[order(train_data$dist1)[1:k], 5:6]
result <- data.frame(sort(table(mydata$Species), decreasing = FALSE))
return(result[1, 1])
}
> ceshi()
[1] versicolor
Levels: versicolor virginica setosa