무던히 하다보면 느는

[파이썬/Python] 리샘플링 (Resampling) 본문

파이썬

[파이썬/Python] 리샘플링 (Resampling)

무던히 하다보면 느는 2022. 7. 10. 18:25

데이터가 불균형한 분포를 가지는 경우 모델의 학습이 제대로 이루어지지 않을 확률이 높다.

이 문제를 해결하기 위해 언더 샘플링과 오버 샘플링이 있다.

 

🐱‍🏍 방법 1

np.random.choicec로 인덱스 랜덤 추출 

number_records_fraud = len(data[data['Class']==1])

fraud_indices = np.array(data[data['Class']==1].index) # 사기
normal_indices = np.array(data[data['Class']==0].index) # 정상

Class가 1인 값들을 number_records_fraud에 넣고

random_normal_indices = np.random.choice(normal_indices, number_records_fraud, replace = False )
under_sample_indices = np.concatenate([fraud_indices, random_normal_indices])

np.random.choice로 임의표본추출해줌

np.random.choice(a,size,replace=True) # a는 모집단 a를 뜻함

 

pandas 결합은 concat

python list 결합은 concatenate

 

https://rfriend.tistory.com/548

 

[Python numpy] np.random.choice() 메소드로 임의표본 추출하기 (무작위, 확률 샘플링)

이번 포스팅에서는 Python numpy 모듈의 random.choice() 메소드를 사용하여 임의(무작위, 확률) 추출 (random sampling)하는 방법을 소개하겠습니다. numpy.random.choice() 메소드의 기본 Syntax는 아래와 같습..

rfriend.tistory.com

 

🐱‍🏍 방법 2

랜덤시드 생성하고 sample 함수로 추출

import numpy as np
import tensorflow as tf

RANDOM_SEED = 42
TRAINING_SAMPLE = 20000
VALIDATE_SIZE = 0.2

np.random.seed(RANDOM_SEED)
rn.seed(RANDOM_SEED)
tf.set_random_seed(RANDOM_SEED)
RATIO = 15

normal = data[data['Class'] == 0]
fraud = data[data['Class'] == 1]

normal_undersampled = normal.sample(
    int(len(fraud) * RATIO),
    random_state=RANDOM_SEED) # 정상에서의 undersampling

#visualisation_initial = pd.concat([fraud, normal_undersampled])
#column_names = list(visualisation_initial.drop('Class', axis=1).columns)

0 28432

1 30

 

정상인 clean 에서 .sample함수를 사용함으로써 원하는 갯수의 추출이 가능함.

사기인 fraud 인 친구들의 len에서 임의의 비율을 곱해줘서 랜덤으로 추출

 

https://wikidocs.net/153182

 

05-05. 샘플 추출 (sample)

####DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=Non ...

wikidocs.net

 

끗 🐢

 

추가로 data.sample(frac=0.4) 하면 전체에 대한 추출 비율을 정할 수 있다.

그리고 번외로 SMOTE도 있음

 

https://hwi-doc.tistory.com/entry/%EC%96%B8%EB%8D%94-%EC%83%98%ED%94%8C%EB%A7%81Undersampling%EA%B3%BC-%EC%98%A4%EB%B2%84-%EC%83%98%ED%94%8C%EB%A7%81Oversampling

 

언더 샘플링(Undersampling)과 오버 샘플링(Oversampling)

* 해당 포스팅은 파이썬 머신러닝 완벽 가이드(권철민, 2019) 교재를 참고하여 공부하며 작성한 글입니다. 순서 언더 샘플링과 오버 샘플링의 개념 SMOTE 개념 SMOTE 코드 1. 언더 샘플링과 오버 샘

hwi-doc.tistory.com