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) является предиктором признаков.

Какой параметр я устанавливаю неправильно?


person Nal    schedule 25.05.2015    source источник
comment
У меня сработало !!!, пожалуйста, проверьте этот ответ. stackoverflow.com/questions/48902732/   -  person Zuber    schedule 22.07.2019


Ответы (3)


Существует соглашение, что строки - это наблюдения, а столбцы - функции. То, как вы предоставили аргумент x для rfe, означает, что у вас есть 2901 наблюдение, что дает несоответствие с 15 результатами. Используйте функцию транспонирования t для ваших данных (если, конечно, у них 15 столбцов).

Вектор y = c(1,1,1...) не следует называть предсказателем. Это зависимая переменная или результат. Первый аргумент - это data.frame переменных-предикторов.

person Pafnucy    schedule 25.05.2015

Мы не знаем ваших данных, но это работает с смоделированными данными:

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
person Robert    schedule 25.05.2015

rfe(x, y,sizes = subsets, rfeControl = ctrl)

Ваша проблема в том, что у вас нет числа строк x такой же длины, как у вектора y

person horia mihai popescu    schedule 12.01.2017