2016-07-27 5 views
1

私が打っを使用して、私のデータセットをスーパーサンプルしようとしていたと私は、このエラーに実行し続けます。撃ち長[2]配列の範囲と等しくない

trainSM <- SMOTE(conversion ~ ., train,perc.over = 1000,perc.under = 200) 

マトリックス中にエラーが発生しました(非公開に(値、FALSE =再帰、use.names = FALSE)、 nrow = NR、 'dimnames' の長さ[2]配列の程度に等しくない

。次のように

私のデータセットは次のとおりです。

  conversion horizon length_of_stay guests rooms price comp_price 
      (dbl) (int)   (int) (int) (int) (int)  (int) 
    1   1  193    2  2  1 199  210 
    2   1  263    2  2  1 171   88 
    3   1  300    3  2  1 164  164 
    4   1  70    4  2  1 76   80 
    5   1  65    6  2  2 260  260 
    6   1  50    3  2  1 171  176 
    7   1  4    3  2  1 158  167 
    8   1  29    3  2  1 171  171 
    9   0  130    1  2  1 161  160 
    10   0  26    2  2  1 110  110 
私は唯一の数値予測因子とさえカテゴリ予測で作業しようとしている

しかし両方で運を

すべてのヘルプ/ガイダンスは大歓迎です。

答えて

2

チーフルであるdata.frameをDMwR::SMOTE()に渡すと、このエラーが発生します。あなたはdata.frame「非tibble」にas.data.frame(your_train_data)を使用して、それを回避することができます。

trainSM <- SMOTE(conversion ~ ., as.data.frame(train), perc.over = 1000, perc.under = 200) 

問題がSMOTE()は、単一のブラケットのサブセットを使用することです。 Tibblesは(すなわちdata.frameはtibble::data_frameになっ)戻り値について、はるかに厳密である(結果は、単一のベクターまたは単一の値であっても)単一のブラケットサブセットは、常にデータフレームを返します。

はここSMOTE()ソースコードの問題の一部です:

# The idea here is to determine which level of the response variable appears least. 
# Unfortunately, if data is a tibble, then data[,tgt] returns a data frame, 
# which of course, doesn't have any levels, so the value of minCL is always NULL 
minCl <- levels(data[, tgt])[which.min(table(data[, tgt]))] 

# this is where the error is thrown--you're testing a data frame against NULL 
minExs <- which(data[, tgt] == minCl) 
関連する問題