拟合 KNN 模型时出错
Error when fitting KNN model
我打算用 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列。我遇到了这个错误 "Error in get.knnx(train, test, k, algorithm) : Number of columns must be same!."
不明白为什么会报错,因为train和test数据的列是一样的
首先感谢您回答我的问题!
?knn.reg
表示 train
/test
必须是数据框或矩阵。但是在您的情况下,您只有一个自变量,因此当您执行 str(train_data[,1])
时,它不再是一个数据框。所以解决方案是在 knn.reg
.
中使用带有训练和测试参数的 as.data.frame
另一个重要的一点是,您需要先 'normalize' 您的数据,然后再 运行 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
希望这对您有所帮助!
对于 FNN::knn.reg,test 和 y 必须是数据帧。只是对最后一条语句的一个小修改。
pred = FNN::knn.reg(train = train_data[,1],
test = test_data[1],
y = train_data[2], k = 5)$pred
我打算用 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列。我遇到了这个错误 "Error in get.knnx(train, test, k, algorithm) : Number of columns must be same!."
不明白为什么会报错,因为train和test数据的列是一样的
首先感谢您回答我的问题!
?knn.reg
表示 train
/test
必须是数据框或矩阵。但是在您的情况下,您只有一个自变量,因此当您执行 str(train_data[,1])
时,它不再是一个数据框。所以解决方案是在 knn.reg
.
as.data.frame
另一个重要的一点是,您需要先 'normalize' 您的数据,然后再 运行 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
希望这对您有所帮助!
对于 FNN::knn.reg,test 和 y 必须是数据帧。只是对最后一条语句的一个小修改。
pred = FNN::knn.reg(train = train_data[,1],
test = test_data[1],
y = train_data[2], k = 5)$pred