아주 전통적인 방법의 데이터 전처리.
생성한 데이터가 범주가 다 다르기 때문에 변수의 정규화가 필요하다.
ratio 데이터의 경우 min-max 정규화 (최솟값~최댓값 기준 범위로 정규화하는 것), 또는 standard 정규화 (평균0으로 정규화하는것..) 2가지 방법을 사용해보고,
범주형 데이터의 경우 one-hot encoding 으로...
1. Dataset 분할
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3, random_state=42)
random_state 는 np.random.seed(1)의 역할을 한다. 매번 분석할때마다 훈련/테스트셋이 변화하는걸 막기 위해 고정시키는 역할이다.
stratify=y 의 역할은, 훈련 데이터와 테스트 데이터를 구분할 때, 레이블의 범주비율에 맞게 하라는 것이다. 분류 알고리즘에서는 이 옵션을 적용해야한다.
조금 더 low-level로?
import numpy as np
def split_train_test(data, test_ratio):
np.random.seed(1)
shuffled_indices = np.random.permutation(len(data))
test_set_size = int(len(data)*test_ratio)
test_indices = shuffled_indices[:test_set_size]
train_indices = shuffled_indices[test_set_size:]
return data.iloc[train_indices], data.iloc[test_indices]
2. 데이터 전처리
레이블(y) 말고 특성치(x)는 정규화가 필요하다.
정규화는 X변수들의 단위가 다르기 때문에 생기는 문제를 해결하기 위해 모든 단위를 동일하게 만드는 것.
1) 표준화 (평균을 0, 표준편차 1)
from sklearn.preprocessing import StandardScaler
scaler_standard = StandardScaler()
scaler_standard.fit(X_train)
X_scaled_standard_train=scaler_standard.transform(X_train)
2) Min-Max (Min을 0, Max를 1)
from sklearn.preprocessing import MinMaxScaler
scaler_minmax=MinMaxScaler()
scaler_minmax.fit(X_train)
X_scaled_minmax_train=scaler_minmax.transform(X_train)
X_scaled_minmax_test=scaler_minmax.transform(X_test)
fit은 X_train 기준으로 되어있는데, 이건 학습데이터로 기준을 설정하는 것이다.
pd.DataFrame(X_scaled_minmax_train).describe() 으로 확인해보면, 학습데이터의 min이 0, max가 1임을 알 수 있음.
테스트 데이터는 확인해보면 min 0, max 1이 아님. 학습데이터가 기준이기 때문이다^^.
3) 범주형 데이터 : one-hot encoding 방법
binary data이거나, cluster 번호 등의 데이터일 때, 이는 one-hot encoding으로 변환한다.
이는 데이터셋을 나누기 전에 수행한다.
우선 범주형 데이터(X1)와 ratio data(XY)를 구별한다.
X1=data[['gender', 'region']]
XY = data[['edu', 'income', 'age', 'score_gov', 'score_progress', 'score_intention', 'vote', 'parties']]
pd.get_dummies(X1) 사용하면 빠르게 one-hot 인코딩 수행가능!
gender, region attribute가 현재 0,1 / 1,2,3,4,5 이런식으로 데이터가 있는데, 이걸 string으로 변환한 후,
X1_dum=pd.get_dummies(X1) 사용함.
변환된 X1_dum과 ratio data인 XY 데이터셋을 통합한다.
new_dataset = pd.concat([X1_dum, XY], axis=1)
'python, pyTorch' 카테고리의 다른 글
입력받기 input() 여러 개, 리스트 (0) | 2021.11.18 |
---|---|
torch_geometric.data format 전환하기 (0) | 2021.09.08 |
python) csv 파일 읽어오기/수정하기/쓰기 (0) | 2021.09.07 |
Pycharm 과 Anaconda 연동하기 (0) | 2021.09.02 |
그래프 예쁘게 그리기 2탄 : networkx.draw 함수 (0) | 2021.08.11 |