我正在学习机器学习这一在线课程,并且我必须使用不同值的k个最近邻居(k = 1、3、5、7、9、11)来寻找准确性,该数据集来自R中的dslabs软件包。
这对某些人来说可能很容易,但是我对机器学习和编程还是比较陌生,我尝试了不同的事情,并且已经花了几天时间来弄清楚我在这个问题上出了什么问题。
如果能找出问题所在,我将不胜感激?
我尝试使用createPartition将数据划分为训练和测试测试。 x值是一个矩阵,我不知道这是否与问题有关,但看起来'y'是一个因素,并且该函数对此无效。
这是我输入代码时收到的消息:
eval(predvars,data,env)中的错误: 数字'envir'arg,长度不为
我使用的代码如下。
library(dslabs)
data("tissue_gene_expression")
ks <- seq(1,11,2)
x <- tissue_gene_expression$x
y <- tissue_gene_expression$y
accuracy <- map_df(ks, function(k){
set.seed(1)
test_index <- createDataPartition(y, times = 1, p = 0.5, list = FALSE)
train_set_y <- y[-test_index]
test_set_y <- y[test_index]
train_set_x <- x[-test_index]
test_set_x <- x[test_index]
fit <- knn3(y ~ x, data = train_set_x, k = ks)
y_hat <- predict(fit, test_set_x, type = "class")
confusionMatrix(data = y_hat, reference = test_set_x)$overall["Accuracy"]
})
我收到此错误消息
Error in eval(predvars, data, env) :
numeric 'envir' arg not of length one
10.
eval(predvars, data, env)
9.
model.frame.default(formula = y ~ x, data = train_set)
8.
model.frame(formula = y ~ x, data = train_set)
7.
eval(m, parent.frame())
6.
eval(m, parent.frame())
5.
knn3.formula(y ~ x, data = train_set, k = ks)
4.
knn3(y ~ x, data = train_set, k = ks)
3.
.f(.x[[i]], ...)
2.
map(.x, .f, ...)
1.
map_df(ks, function(k) {
set.seed(1)
test_index <- createDataPartition(y, times = 1, p = 0.5,
list = FALSE) ...
在这里您可以看到一些我正在使用的数据集
x的类和x的第一部分看起来像这样(因为时间太长,所以没有包含它们):
class(x)
[1] "matrix"
x
MAML1 LHPP SEPT10 B3GNT4 ZNF280D SOX12
cerebellum_1 9.825680 8.327163 5.499382 8.692371 5.642305 6.254751
cerebellum_2 9.631247 8.542827 5.644292 8.833679 5.685083 6.289460
C21orf62 PER3 HOXA10 HOXC5 BLVRB ZIM2 HEMK1
cerebellum_1 5.840938 8.330565 5.520803 7.660495 7.669237 8.355588 7.336959
cerebellum_2 6.065646 8.263576 5.528077 7.569041 7.779377 8.647475 7.282120
y的类和第一行看起来像这样:
class(y)
[1] "factor"
y
[1] cerebellum cerebellum cerebellum cerebellum cerebellum cerebellum
[7] cerebellum cerebellum cerebellum cerebellum cerebellum cerebellum
[13] cerebellum cerebellum cerebellum cerebellum cerebellum cerebellum