关于使用k最近邻计算精度的问题

时间:2019-05-26 08:34:48

标签: r machine-learning data-science knn nearest-neighbor

我正在学习机器学习这一在线课程,并且我必须使用不同值的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

0 个答案:

没有答案