Я слежу за этим онлайн-курсом по машинному обучению, и мне нужно найти точность, используя k-ближайших соседей с разными значениями (k = 1, 3, 5, 7, 9, 11) для набора данных с именем fabric_gene_expression из пакет dslabs в R.
Это может быть легко для некоторых, но я относительно новичок в машинном обучении и программировании, и я пробовал разные вещи и уже провел несколько дней, пытаясь выяснить, в чем я ошибаюсь с этим вопросом.
Буду признателен за любую помощь, чтобы выяснить, где я иду не так?
Я попытался разделить данные на обучающие и тестовые тесты с помощью createPartition. Значения x представляют собой матрицу, и я не знаю, связано ли это с проблемой, но похоже, что «y» является фактором, и функция не работает с этим.
Это сообщение появляется при вводе кода:
Ошибка в eval (predvars, data, env):
числовой аргумент 'envir', длина которого не одна
Код, который я использовал ниже.
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 в наборе данных выглядят так (не включили их все, так как они слишком длинные):
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