安装KNN模型时出错

时间:2017-10-09 04:08:13

标签: r knn

我打算在R中使用忠实数据的knn模型。我的代码是这样的:

smp_size <- floor(0.5 * nrow(faithful))
set.seed(123)
train_ind <- sample(seq_len(nrow(faithful)), size = smp_size)
train_data = faithful[train_ind, ]
test_data = faithful[-train_ind, ]

pred = FNN::knn.reg(train = train_data[,1], 
                  test = test_data[,1], 
                  y = train_data[,2], k = 5)$pred

忠实数据只有2列。我遇到了这个错误&#34; get.knnx中的错误(train,test,k,algorithm):列数必须相同!。&#34;

我不明白为什么错误会出现,因为列车和测试数据的列是相同的。

首先感谢您回答我的问题!

2 个答案:

答案 0 :(得分:0)

?knn.reg表示train / test必须是数据框或矩阵。但在你的情况下,你只有一个自变量,所以当你str(train_data[,1])时,它不再是一个数据框。因此,解决方案是使用as.data.frame与火车&amp; knn.reg中的测试参数。

另一个重要的一点是,在运行KNN之前,您需要先对数据进行“规范化”。您可以尝试使用以下代码段作为代码的一个小改进:

library('FNN')
set.seed(123)

#normalize data
X = scale(faithful[, -ncol(faithful)])
y = faithful[, ncol(faithful)]

#split data into train & test
train_ind <- sample(seq_len(nrow(faithful)), floor(0.7 * nrow(faithful)))
test_ind <- setdiff(seq_len(nrow(faithful)), train_ind)

#run KNN model
knn_model <- knn.reg(train = as.data.frame(X[train_ind,]), 
                     test = as.data.frame(X[test_ind,]), 
                     y = y[train_ind], 
                     k = 5)
pred = knn_model$pred


希望这有帮助!

答案 1 :(得分:0)

对于FNN :: knn.reg,测试 y 必须是数据帧。只是对最后一条语句的微小修改。

pred = FNN::knn.reg(train = train_data[,1], 
                    test = test_data[1], 
                    y = train_data[2], k = 5)$pred