멀티 클래스 불균형 문제에 대한 SMOTE 오류 발생 3

SMOTE를 사용하여 멀티 클래스 분류 문제의 불균형을 수정하려고합니다. SMOTE 도움말 문서에 따라 SMOTE가 홍채 데이터 세트에서 완벽하게 작동하지만 유사한 데이터 세트에서는 작동하지 않습니다. 내 데이터 모양은 다음과 같습니다. 값이 1, 2, 3 인 3 개의 클래스가 있습니다.

> data
   looking risk every status
1        0    1     0      1
2        0    0     0      1
3        0    0     0      2
4        0    0     0      1
5        0    0     0      1
6        3    0     0      1
7        0    0     0      1
8        0    0     0      1
9        0    1     0      1
10       0    0     0      1
11       0    0     0      3
12       0    0     0      1
13       0    0     0      1
14       0    0     0      1
15       0    0     0      2

홍채와 같은 데이터 프레임의 형태입니다.

> class(data)
[1] "data.frame"

SMOTE를 사용하는 코드와 발생하는 오류는 다음과 같습니다.

> newData <- SMOTE(status ~ ., data, perc.over = 600,perc.under=100)
Error in scale.default(T, T[i, ], ranges) : subscript out of bounds
In addition: Warning messages:
1: In FUN(newX[, i], ...) :
  no non-missing arguments to max; returning -Inf
2: In FUN(newX[, i], ...) :
  no non-missing arguments to max; returning -Inf
3: In FUN(newX[, i], ...) :
  no non-missing arguments to max; returning -Inf
4: In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf
5: In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf
6: In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf


답변

비슷한 문제가 발생하여 클래스 값 (귀하의 경우 “상태”)을 요인 유형으로 전송하여 문제를 해결했습니다. 사용 후 data$status=factor(data$status), newData다음과 같이 인쇄 :

     looking risk every status
7          0    0     0      1
2          0    0     0      1
7.1        0    0     0      1
12         0    0     0      1
4          0    0     0      1
12.1       0    0     0      1
11         0    0     0      3
8         NA   NA    NA      3
9         NA   NA    NA      3
10        NA   NA    NA      3
111       NA   NA    NA      3
121       NA   NA    NA      3
13        NA   NA    NA      3

오류가 없습니다!