Ошибка в rfe.default ... должно быть одинаковое количество выборок в x и y - PullRequest
1 голос
/ 24 апреля 2019

Это довольно просто, функция rfe ниже выдает эту ошибку: "Ошибка в rfe.default (предикторы, as.vector (результаты), размеры = c (5), rfeControl = rfeControl (functions =" ​​lmFuncs ",: там) должно быть одинаковое количество образцов в х и у "

df Первый столбец - это фактор с 2 уровнями. Остальные столбцы df являются числовыми. Нет значений NA.

Понятия не имею, о чем эта ошибка. Я уже пробовал некоторые другие решения безрезультатно.

rfe_linear <- caret::rfe(
  df[ , -1 ],
  df[ , 1 ],
  sizes = c( 5 ),
  rfeControl = rfeControl(
    functions = 'lmFuncs',
    method = 'boot',
    number = 20
  )
)

Я попробовал ниже, что дает ту же ошибку.

rfe_linear <- caret::rfe(
  as.matrix( df[ , -1 ] ),
  df[ , 1 ],
  sizes = c( 5 ),
  rfeControl = rfeControl(
    functions = 'lmFuncs',
    method = 'boot',
    number = 20
  )
)

Попробовал ниже. Выдает эту ошибку: «Ошибка: должен использоваться вектор в [, а не объект матрицы классов».

rfe_linear <- caret::rfe(
  as.matrix( df[ , -1 ] ),
  as.factor( df[ , 1 ] ),
  sizes = c( 5 ),
  rfeControl = rfeControl(
    functions = 'lmFuncs',
    method = 'boot',
    number = 20
  )
)

Также пробовал следующее, выдает эту ошибку: «Ошибка: оператор $ недопустим для атомарных векторов». Назовите меня сумасшедшим, но я не вижу оператора $ нигде в моем коде.

rfe_linear <- caret::rfe(
  df[ , -1 ],
  df[[ 1 ]],
  sizes = c( 5 ),
  rfeControl = rfeControl(
    functions = 'lmFuncs',
    method = 'boot',
    number = 20
  )
)

Я пробовал каждую комбинацию as.factor (), as.data.frame (), as.matrix (), df [, 1], df [, -1], df [, 2: ncol ( df)] и df [, 1: 1], о которых можно подумать.

Итак, я попробовал это:

rfe_linear <- caret::rfe(
  df[ , -1 ],
  df$Phenotype,
  sizes = c( 5 ),
  rfeControl = rfeControl(
    functions = 'lmFuncs',
    method = 'boot',
    number = 20
  )
)

Который, казалось, работал некоторое время, но, конечно, R не позволил мне легко запустить rfe (), поэтому в конце журнала он выдал еще одну ошибку, и объект rfe_linear все еще не найден.

+(rfe) fit Resample01 size: 5191 
-(rfe) fit Resample01 size: 5191 
+(rfe) imp Resample01 
-(rfe) imp Resample01 
+(rfe) fit Resample02 size: 5191 
-(rfe) fit Resample02 size: 5191 
+(rfe) imp Resample02 
-(rfe) imp Resample02 
+(rfe) fit Resample03 size: 5191 
-(rfe) fit Resample03 size: 5191 
+(rfe) imp Resample03 
-(rfe) imp Resample03 
+(rfe) fit Resample04 size: 5191 
-(rfe) fit Resample04 size: 5191 
+(rfe) imp Resample04 
-(rfe) imp Resample04 
+(rfe) fit Resample05 size: 5191 
-(rfe) fit Resample05 size: 5191 
+(rfe) imp Resample05 
-(rfe) imp Resample05 
+(rfe) fit Resample06 size: 5191 
-(rfe) fit Resample06 size: 5191 
+(rfe) imp Resample06 
-(rfe) imp Resample06 
+(rfe) fit Resample07 size: 5191 
-(rfe) fit Resample07 size: 5191 
+(rfe) imp Resample07 
-(rfe) imp Resample07 
+(rfe) fit Resample08 size: 5191 
-(rfe) fit Resample08 size: 5191 
+(rfe) imp Resample08 
-(rfe) imp Resample08 
+(rfe) fit Resample09 size: 5191 
-(rfe) fit Resample09 size: 5191 
+(rfe) imp Resample09 
-(rfe) imp Resample09 
+(rfe) fit Resample10 size: 5191 
-(rfe) fit Resample10 size: 5191 
+(rfe) imp Resample10 
-(rfe) imp Resample10 
+(rfe) fit Resample11 size: 5191 
-(rfe) fit Resample11 size: 5191 
+(rfe) imp Resample11 
-(rfe) imp Resample11 
+(rfe) fit Resample12 size: 5191 
-(rfe) fit Resample12 size: 5191 
+(rfe) imp Resample12 
-(rfe) imp Resample12 
+(rfe) fit Resample13 size: 5191 
-(rfe) fit Resample13 size: 5191 
+(rfe) imp Resample13 
-(rfe) imp Resample13 
+(rfe) fit Resample14 size: 5191 
-(rfe) fit Resample14 size: 5191 
+(rfe) imp Resample14 
-(rfe) imp Resample14 
+(rfe) fit Resample15 size: 5191 
-(rfe) fit Resample15 size: 5191 
+(rfe) imp Resample15 
-(rfe) imp Resample15 
+(rfe) fit Resample16 size: 5191 
-(rfe) fit Resample16 size: 5191 
+(rfe) imp Resample16 
-(rfe) imp Resample16 
+(rfe) fit Resample17 size: 5191 
-(rfe) fit Resample17 size: 5191 
+(rfe) imp Resample17 
-(rfe) imp Resample17 
+(rfe) fit Resample18 size: 5191 
-(rfe) fit Resample18 size: 5191 
+(rfe) imp Resample18 
-(rfe) imp Resample18 
+(rfe) fit Resample19 size: 5191 
-(rfe) fit Resample19 size: 5191 
+(rfe) imp Resample19 
-(rfe) imp Resample19 
+(rfe) fit Resample20 size: 5191 
-(rfe) fit Resample20 size: 5191 
+(rfe) imp Resample20 
-(rfe) imp Resample20 
Error in { : task 1 failed - "replacement has 1 row, data has 0"
In addition: There were 50 or more warnings (use warnings() to see the first 50)

1 Ответ

0 голосов
/ 25 апреля 2019

lmFuncs не работает, когда y является фактором. rfFuncs работает, например.

library(caret)
library(randomForest)

df <- data.frame(y=factor(rnorm(100)>0), 
                 x1=rnorm(100), x2=rnorm(100), x3=rnorm(100), x4=rnorm(100), x5=rnorm(100),
                 x6=rnorm(100), x7=rnorm(100), x8=rnorm(100), x9=rnorm(100), x10=rnorm(100))

rfe_linear <- caret::rfe(
    x = df[,-1],
    y = df[,1],
    sizes = 5,
    rfeControl = rfeControl(
        functions = rfFuncs,
        method = 'boot',
        number = 20
    )
)

rfe_linear
#> 
#> Recursive feature selection
#> 
#> Outer resampling method: Bootstrapped (20 reps) 
#> 
#> Resampling performance over subset size:
#> 
#>  Variables Accuracy   Kappa AccuracySD KappaSD Selected
#>          5   0.5398 0.09997    0.08876  0.1514         
#>         10   0.5478 0.10734    0.07928  0.1433        *
#> 
#> The top 5 variables (out of 10):
#>    x8, x2, x4, x10, x9

Создано в 2019-04-26 пакетом Представления (v0.2.1)

...