R rfe function "caret" Ошибка пакета: в x и y должно быть одинаковое количество выборок
Поскольку я пробую пример rfe из пакета "caret", взятого отсюда, я продолжал получать эту ошибку
Error in rfe.default(d[1:2901, ], c(1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, :
there should be the same number of samples in x and y
Этот вопрос был задан, но его решение не применимо в этом случае.
Вот код:
set.seed(7)
# load the library
library(mlbench)
library(caret)
# load the data
d <- read.table("d.dat")
# define the control using a random forest selection function
control <- rfeControl(functions=rfFuncs, method="cv", number=10)
# run the RFE algorithm
results <- rfe(d[1:2901, ], c(1,1,1,1, 1, 1,2,2,2, 3 ,3,3,4, 4, 4), sizes=c(1:2901), rfeControl=control)
# summarize the results
print(results)
Набор данных представляет собой фрейм данных из 2901 строки (объектов) и 15 столбцов. Вектор c(1,1,1,1,1,1,2,2,2,3,3,3,4,4,4) является предиктором для признаков.
Какой параметр я устанавливаю неправильно?
3 ответа
Существует соглашение, что строки - это наблюдения, а столбцы - объекты. То, как вы предоставили х аргумент rfe
означает, что у вас есть 2901 наблюдение, что приводит к несоответствию с 15 результатами. Используйте функцию транспонирования t
на ваших данных (если он имеет 15 столбцов, конечно).
y = c(1,1,1...)
вектор не должен называться предиктором. Это зависимая переменная или результат. Первый аргумент - это data.frame переменных-предикторов.
Мы не знаем ваши данные, но это работает с симулированными данными:
set.seed(7)
d=data.frame(matrix(rnorm(2901*15,1,.5),ncol=15))
#something like dependent variable
dp=factor(sample(c(1,1,1,1, 1, 1,2,2,2, 3 ,3,3,4, 4, 4),2901,replace = TRUE))
# define the control using a random forest selection function
control <- rfeControl(functions=rfFuncs, method="cv", number=10)
# run the RFE algorithm
sz=50 # Change sz to 2901 for full sample
results <- rfe(d[1:sz, ], dp[1:sz], sizes=c(1:15), rfeControl=control)
# summarize the results
print(results)
## End of the printed results ## The top 5 variables (out of 6): ## X5, X6, X15, X14, X3
rfe(x, y,sizes = subsets, rfeControl = ctrl)
Ваша проблема в том, что у вас нет nr строк x такой же длины вектора y