2014-06-08 2 views
1

DMwR 패키지에 포함 된 Smote를 사용하여 데이터 세트에서 오버 샘플링을 방금했습니다.Smote가 오버 샘플링을 만들지 못합니다.

내 데이터 집합은 두 클래스로 구성됩니다. 원래 분포는 그래서,이 오버 샘플링으로 구분 한 62 대 12 :

newData <- SMOTE(Score ~ ., data, k=3, perc.over = 400,perc.under=150) 

지금을, 분포는 60 그러나

72 대 나는 'newData의'데이터 집합을 표시 할 때, 내가 어떻게 쳐서을 발견하다 오버 샘플링을 만들었고 일부 샘플이 반복되었습니다.

예를 들어 샘플 번호 24는 24.1, 24.2 및 24.3으로 나타납니다.

이 정보가 맞습니까? 이것은 분류 자 ​​(classification)가 테스트에 존재할 데이터가있는 모델을 학습 할 것이기 때문에 분류에 직접 영향을 미치므로 분류에서 합법적이지 않습니다.

편집 : 내가 제대로 내 문제를 설명하지 않았다고 생각 :

아시다시피, 강타는 오버 샘플링하는 기술입니다. 원래 샘플에서 새 샘플을 작성하여 해당 샘플의 기능 값을 수정합니다. I는 쳐서 의해 생성 내 새로운 데이터를 표시 할 때, I 이것을 얻기 :

(이 값은 특징의 값은)

Sample50을 : 1.8787547 0.19847987 -0.0105946940 4.420207 4.660536 1.0936388 0.5312777 0.07171645 0.008043167

샘플 50.1 : 1.8787547을 0.19847987 -0.0105946940 4.420207 4.660536 1.0936388 0.5312777 0.07171645

샘플 50은 원래의 데이터 세트에 속한다. 샘플 50.1은 SMOTE가 생성 한 '인공'샘플입니다. 그러나 SMOTE는 피처의 값을 '약간'수정하는 인공적인 샘플을 만드는 대신 반복 된 샘플을 만들었습니다.

나를 이해할 수 있기를 바랍니다.

감사합니다.

+0

그래서 data.frame'data'의 범주 형 변수'sample'에 새로운 SMOTEING ID가 새롭고 유효하지 않다고 말하고 있습니까? 이 변수의 클래스는 무엇입니까? 요인으로 올바르게 코딩 되었습니까? – MrFlick

+0

아니요. 설명하려고하는 것은 SMOTE가 값을 반복한다는 것입니다. 자세한 내용은 내 새 게시물을 참조하십시오. – user2228819

답변

0

DMwR에서 SMOTE 구현에 대해서는 잘 모르겠지만 새 데이터를 가장 가까운 정수 값으로 반올림하는 것이 안전해야합니다. 하나의 추측은 이것이 분류 대신에 회귀를하고 싶다고 생각할 때 기회가 될 때까지 남겨 둡니다. 그렇지 않으면 회귀를 원하고 SMOTE가 정수를 반환하면 반대 방향 (SMOTE -> 정수 -> 실수)으로 이동하여 실수로 정보를 잃어 버리게됩니다.

SMOTE의 기능에 익숙하지 않은 경우 가장 가까운 이웃을보고 이웃을 설정 한 다음 해당 이웃에서 샘플링하여 '새 데이터'를 만듭니다. 주어진 클래스에 대한 분류 문제에서 불충분 한 데이터가있을 때 일반적으로 수행됩니다. 근접성 때문에 데이터 근처의 데이터가 유사하다는 가정하에 작동합니다.

이 추가 작업을 수행하지 않는 Weka's implementation of SMOTE을 사용할 수도 있습니다.

4

스머 트 (Smote)는 불균형 분포를 처리하기 위해 주어진 클래스 (소수 클래스)의 합성 예제를 생성하는 알고리즘입니다. 새로운 데이터 생성을위한이 전략은 다수 클래스의 무작위 언더 샘플링과 결합됩니다. DMwR 패키지에서 SMOTE를 사용할 때 오버 샘플링 백분율과 언더 샘플링 백분율을 지정해야합니다. 얻은 데이터 분포가 불균형을 유지할 수 있으므로이 값을 신중하게 설정해야합니다.

귀하의 경우, 매개 변수 세트가 주어지면 즉, 과소 및 과다 표본 채취 비율은 소수 집단의 사례 복제본을 소개합니다.

초기 클래스 분포는 12에서 62이며, 강타를 적용한 후에는 60에서 72로 끝납니다. 즉, 소수 클래스가 스톰으로 오버 샘플링되었고이 클래스의 새로운 합성 예제가 생성되었습니다.

그러나 62 개의 예제가있는 대다수 클래스는 이제 72 개를 포함합니다! 샘플링 비율 미만이이 클래스에 적용되었지만 실제로는 예제 수가 증가했습니다. 대다수 클래스에서 선택하는 예제의 수는 소수 클래스의 예제를 기반으로 결정되므로이 클래스에서 샘플링 된 예제의 수는 이미 존재하는 것보다 큽니다.

따라서 62 개의 예제가 있고 알고리즘이 무작위로 72를 선택하려고했습니다! 이것은 대다수 클래스의 예제를 일부 복제 한 것을 의미합니다. 그래서

는 오버 샘플링을 설명하고 언더 샘플링 선택한한다 :

12 예를 오버 샘플링의 400 %와 소수 클래스에서 제공하는 12 * 100분의 400 = 48. 따라서 소수의 클래스에 추가 된 48 개의 새로운 합성 예제 (12 + 48 = 60은 소수 클래스의 최종 사례 수입니다).

다수 클래스에서 선택하는 예제는 48 * 150/100 = 72입니다. 그러나 대부분의 클래스에는 62 개 밖에 없으므로 복제본이 반드시 도입됩니다.

+0

paboranco가 말한 것을 분명히하기 위해 smotes는 percunder * (소수 클래스)를 만듭니다. 그런 다음 perc.over * (percunder * (소수 클래스))를 사용합니다. – aginensky

관련 문제