R语言 k近邻法

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

点赞