티스토리 뷰
원본데이터 내에 종속변수의 그룹 별 데이터 수가 균등할 경우 바로 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 캠퍼스 머신러닝기반의 빅데이터분석 양성과정
'R > Analysis' 카테고리의 다른 글
[R 분석] Random Forest 알고리즘 (0) | 2019.01.17 |
---|---|
[R 분석] Decision Tree 매개변수 튜닝 (0) | 2019.01.17 |
[R 분석] 조건부 추론 나무 (0) | 2019.01.16 |
[R 분석] 지도학습을 위한 데이터 샘플링 (0) | 2019.01.16 |
[R 분석] Decision Tree(의사결정 나무) 알고리즘 - rpart (0) | 2019.01.15 |