【问题标题】:running a Knn function in R在 R 中运行 Knn 函数
【发布时间】:2023-02-06 06:30:31
【问题描述】:

我使用以下代码在我的数据集上运行 Knn 算法:

ran <- sample(1:nrow(Knn_data), 0.9*nrow(Knn_data))
nor <- function(x) { (x-min(x))/(max(x)-min(x))}
Knn_data_norm <- as.data.frame(lapply(Knn_data[,c(1,2,3,4,5,6,7)], nor))
summary(Knn_data_norm)
Knn_train <- Knn_data_norm[ran,]
Knn_test <- Knn_data_norm[-ran,]
Knn_target_category <- Knn_data[ran,8]
Knn_test_category <- Knn_data[-ran,8]
library(class)
pr <- knn(Knn_train, Knn_test, cl=Knn_target_category, k=3)

我不断收到错误: knn(Knn_train, Knn_test, cl = Knn_target_category, k = 3) 中的错误:“train”和“class”的长度不同 我如何更改课程使其长度相同?

【问题讨论】:

  • 第 8 列是否是手册页上要求的“训练集真正分类的因素”?数据中是否有缺失值?
  • 它是或否,指的是它是否是用户,第 1-7 列是数字,没有数据丢失

标签: r knn


【解决方案1】:

没有数据就无法重现您的结果。这是您使用 R 自带的 iris 数据集的代码。没有问题:

data(iris) # Four measurements on three species with 50 observations of each
library(class)
set.seed(42)  # Make the example reproducible
ran <- sample(1:nrow(iris), 0.9*nrow(iris))
nor <- function(x) { (x-min(x))/(max(x)-min(x))}
Knn_data_norm <- as.data.frame(lapply(iris[,1:4], nor))
Knn_train <- Knn_data_norm[ran,]
Knn_test <- Knn_data_norm[-ran,]
Knn_target_category <- iris[ran, 5]
Knn_test_category <- iris[-ran, 5]
pr <- knn(Knn_train, Knn_test, cl=Knn_target_category, k=3)
table(Knn_test_category, pr)
#                  pr
# Knn_test_category setosa versicolor virginica
#        setosa          5          0         0
#        versicolor      0          6         0
#        virginica       0          1         3

15 个中有 14 个被正确预测。另请注意,nrow(Knn_train) 等于 length(Knn_target_category)。您的错误消息表明您的数据并非如此。

【讨论】:

    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2012-01-03
    • 2014-05-13
    相关资源
    最近更新 更多