2017-10-22 14 views
0

불균형 학습 문제를 연구 중입니다. '불균형'은 데이터 세트가 클래스간에 불균등 한 분포를 보임을 의미합니다. 예를 들어 1000 개의 예제로 이진 분류 문제를 부여한 경우입니다. 총 900 개의 예제는 클래스 0으로 레이블이 지정되고 나머지는 100 개의 예제가 클래스 -1로 레이블됩니다.어떻게 r에서 일부 데이터 집합을 만들 수 있습니까?

대부분의 분류 알고리즘은 데이터 세트의 기본 분포를 고려하지 않으므로이 '불균형 학습 문제'를 처리하지 못했습니다. 왜냐하면 그들은 모든 예를 class-0으로 분류하면 90 %의 정확도를 가지기 때문입니다.

클래스 불균형 분류의 주요 문제 중 하나는 데이터 집합에서 클래스 오버랩 발생입니다. 또한 단일 클래스 내의 불균형으로 인해 문제가 악화 될 수 있습니다 (클래스 불균형 문제로 분류 : Aida Ali, Siti Mariyam Shamsuddin 및 Anca L.Ralescu, ISSN 2074-8523)

그래서 이것을 시뮬레이션하고 싶습니다. 1) 데이터 세트가 서로 다른 중첩 정도를 가질 때 일부 메소드를 비교하는 것, 2) 데이터 세트가 클래스 불균형에있을 때 일부 메소드를 비교하는 것과 같은 문제. datasets have within class imbalance

datasets have overlapping

그래서 내가 연구에서 데이터 집합을해야, 나는이 데이터 세트를 생성하는 방법을 모르겠어요. 난 그냥 몇 가지 독립 변수

set.seed(3) 
x1 <- rnorm(n)   # normal dist 
x3 <- rexp(n)   # exponential dist 
x5 <- rpois(n,lambda=3) # poisson dist 
error <- rnorm(n)   # error term 

그리고 지금은이 X 년대와 관계가 클래스 변수 Y을해야합니다. X의 계수로 중첩 비율을 조정할 수 있다고 생각합니다.

IR <- 90 # IR means imbalanced ratio 'IR=# of class0/# of class1' 
eta <- -200*x1 + 0.5*sin(x3) + 300*x5^3 + error 
Y <- as.factor(ifelse(eta > quantile(eta, IR/(IR+1)), 1, 0)) 

실제로 코드가 정확한지 모르겠다. 또한 클래스 불균형 데이터 집합 내에서 어떻게 만들 수 있을지 궁금합니다. 도와 주시겠습니까? 어떻게이 데이터 세트를 만들 수 있습니까?

+1

실제로 데이터를 재생성하기 위해서는'set.seed'를 한 번만 호출하면됩니다. – xxfelixxx

+0

@xxfelixxx 감사합니다. – Ssunny

+0

이 게시물을보십시오. 그 사람이 가중치 1:49:50 (실제로 50 : 2450 : 2500)로 만드는 훌륭한 3 클래스 데이터 세트가 있습니다. https://stats.stackexchange.com/questions/157714/r-package-for-weighted-random-forest -classwt-option –

답변

0

twoClassSim캐럿 패키지에서 사용할 수 있습니다.

library(caret) 
set.seed(123) 
data <- twoClassSim(
    1000, 
    intercept = -16.5, 
    linearVars = 15, 
    noiseVars = 5 
) 
table(data$Class) 

Class1 Class2 
    899 101