티스토리 뷰

반응형


원본데이터 내에 종속변수의 그룹 별 데이터 수가 균등할 경우 바로 sampleBy를 사용하여 바로 샘플링해줄 수 있지만

ex) 종속변수 Group 컬럼의 A 그룹 데이터 = 100개  

                                    B 그룹 데이터 = 100개 


원본데이터 내에 종속변수의 그룹 별 데이터 수가 균등하지 않다면 모델의 예측력이 떨어질 가능성이 높습니다.

ex) 종속변수 Group 컬럼의 A 그룹 데이터 = 235개  

                                    B 그룹 데이터 = 100개 


해결 방법으로 

1. 데이터가 더 많은 그룹(A)의 데이터를 줄이거나, 

2. 데이터가 더 적은 그룹(B)의 데이터를 반복(중복 사용)하여 

데이터 개수를 균등하게 맞춰주어야 할 필요성이 있습니다.


보통 종속변수의 그룹(class) 별로 균등하게 분리된 데이터가 좋은 결과를 도출해준답니다 !!!



#. 종속변수의 그룹(class) 별 데이터 개수를 균등하게 맞추는 방법


- upsampling :: 도수가 더 높은쪽으로 균등하게 맞추는 작업, 작은 쪽 도수가 재사용(복원추출) => 데이터 수 확보를 위함

- downsampling :  도수가 더 낮은쪽으로 균등하게 맞추는 작업, 데이터가 많아 여유가 있을 경우


caret::upSample(x,y)  ::  

caret::downSample(x,y)

# x(설명변수),y(종속변수)를 분리해서 인자에 넣어줘야 합니다. 단, y는 반드시 Factor형


> install.packages('caret')

> library(caret)


> cancer <- read.csv('cancer.csv')

> head(cancer)

        id diagnosis radius_mean texture_mean perimeter_mean ....

1   842302 Malignant       17.99        10.38         122.80    1001.0   ....   

2   842517 Malignant       20.57        17.77         132.90    1326.0   ....    

3 84300903 Malignant       19.69        21.25         130.00    1203.0  ....

....

> usample <- upSample(cancer[,-c(1,2)], cancer[,2])    # 이 데이터로 다시 샘플링부터 시작하면 됩니다.


### 결과 확인

> str(usample)         

'data.frame': 714 obs. of  31 variables:

 $ radius_mean            : num  13.5 13.1 9.5 13 8.2 ...

...

 $ fractal_dimension_worst: num  0.0726 0.0818 0.0777 0.0617 0.0741 ...

 $ Class                  : Factor w/ 2 levels "Benign","Malignant": 1 1 1 1 1 1 1 1 1 1 ...   # sampling 결과가 Factor형으로 저장 됨 


> table(cancer$diagnosis)     # 기존 cancer Data는 그룹별 데이터가 불균등하게 저장되어있습니다.

   Benign Malignant 

      357       212

> table(usample$Class)        # 데이터가 부족한 Malignant 그룹의 데이터가 upSample 함수로 복원추출된 것을 확인

   Benign Malignant 

      357       357 




참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday