ML (MachineLearning)

데이터 불균형이 발생할 때, 데이터 리샘플링하기

567Rabbit 2024. 4. 15. 14:51

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sb

 

 

#당뇨병을 분류하는 모델

 

df

  Preg Plas Pres skin test mass pedi age class
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1
... ... ... ... ... ... ... ... ... ...
763 10 101 76 48 180 32.9 0.171 63 0
764 2 122 70 27 0 36.8 0.340 27 0
765 5 121 72 23 112 26.2 0.245 30 0
766 1 126 60 0 0 30.1 0.349 47 1
767 1 93 70 31 0 30.4 0.315 23 0

 

df['class']의 의미 ?

(1:당뇨이다, 0:당뇨가 아니다)

 

 

 

nan 정리하기

 

비어있는 데이터는 없지만 비어있는 항목 대신 0으로 셋팅한 데이터이다

따라서, Plas 컬럼부터 mass컬럼까지는 0으로 셋팅된 값을 nan으로 만들려고 한다.

 

df.loc[  : , 'Plas' : 'mass' ]  = df.loc[  : , 'Plas' : 'mass' ].replace(0,np.nan)

df = df.dropna()

 

 

y와 X로 나누기

y = df['class']

X = df.loc[  : , 'Plas' : 'age' ]

 

 

y.value_counts()

class
0    262
1    130
Name: count, dtype: int64

 

 

당뇨가 아닌 사람은 262명, 당뇨인 사람은 130명 있다

이 수를 맞춰주고 싶다면

 

 

 

 

imblearn 라이브러리를 이용하여 리샘플링하기

 

! pip install imblearn

from imblearn.over_sampling import SMOTE

 

sm = SMOTE(random_state=5)

X, y = sm.fit_resample(X, y)

 

y.value_counts()

class
0    262
1    262
Name: count, dtype: int64