본문 바로가기
AI/ML

[ML] 데이터셋 준비

by hyeok1235 2024. 8. 13.

이번 글의 목차는 다음과 같다.

- Test Set 만들기

- Data Visualization

 

- 상관관계 발견하기

- 데이터 전처리

 

◆ Test Set 만들기

머신러닝 모델의 성능을 평가하기 위해서 train-test (주로 train-validation-test) 방식을 사용한다. 전체 데이터셋을 train용과 test 용으로 분리할 때 가장 단순한 방법은 랜덤하게 뽑는 것이다. 이 방법은 데이터셋이 충분히 크다면 대부분 괜찮지만, 그렇지 않다면 sampling bias가 발생할 수 있다.

  ex) 전체 인구의 남녀 비율이 48.9:51.1이고 1000명을 sampling해야 할 때, 약 10.7%의 확률로 해당 여성 sample의 비율이 48.5% 이하이거나 53.5% 이상으로 test set이 편향(skewed)될 수 있다. 

가장 중요한 것은 test set data가 전체 데이터셋에 대해서 representative해야 한다는 것이다. 

→ 해당 문제를 방지하기 위해서 계층(strata) 몇 개를 정해서 추출한 데이터가 전체 데이터셋을 대표할 수 있도록 만들어준다.

 

다음 코드 예시는 0~1.5, 1.5~3.0, ... 등으로 카테고리를 만들어서 데이터셋을 잘 표현할 수 있도록 했다. 

housing["income_cat"] = pd.cut(housing["median_income"],
                               bins=[0., 1.5, 3.0, 4.5, 6., np.inf],
                               labels=[1, 2, 3, 4, 5])

 

코드 시각화한 결과

 

◆ Data Visualization

데이터셋 안에서 어떤 패턴이나 관계가 존재하는지를 쉽게 파악하기 위해서 데이터들을 시각화할 수 있다. 만약 데이터들을 plotting할 때 점들이 많이 겹치고 뭉쳐지게 되면, 자세한 정보를 파악하기 어렵다. 이때 쓸 수 있는 팁은 색상 정보에서 alpha 값을 0.2와 같은 값으로 설정하는 것이다. 점들이 살짝 투명해져서, 점들이 겹쳐있어도 그 밀도를 파악할 수 있다.

 

alpha 값 설정 전후

 

* 인구 크기에 따라 원 크기를 바꿀 수 있고, 가격에 따라서 색상을 바꿀 수 있다.

 

◆ 상관관계(Correlation) 발견하기

데이터들을 plotting한 뒤에 correlation을 찾아야 한다. linear한 경우에는 피어슨 상관계수(Pearson correlation coefficient)라는 값을 사용할 수 있다. 1에 가까울 수록 강한 양의 상관관계, -1에 가까울 수록 강한 음의 상관관계를 뜻한다.

주의해야 할 것은 correlation을 시각화 했을 때 기울기와 상관관계는 관련이 없다는 것이다. cm->mm처럼 단위를 바꾸면 기울기도 바뀌게 되지만 상관관계는 변하지 않기 때문이다. 결국 중요한 것은 값들이 얼마나 sparse지 아니면 뚜렷한 경향성을 나타내는지이다. 또한, non-linear한 경우에는 분명한 상관관계가 있어도 correlation coefficient로 포착해내지 못한다. 

 

◆ 데이터 전처리 과정 Pipeline

1) 누락된 값(=결측값) 처리

특정 feature에 대한 값 일부가 누락되어 있을 때, 선택할 수 있는 방법은 3가지이다.

① 해당하는 요소(row)를 삭제시키기

② 해당하는 특징(column)을 삭제시키기

③ 특정 값(0, 평균, 중앙값 등)을 집어넣기 = 대체 (imputation)

 

2) 텍스트, 범주형 데이터 처리

숫자로 된 데이터와 달리 텍스트나 범주형 데이터는 수치로 새롭게 표현해야 한다. 이때 임의로 연속된 값을 설정하게 되면, 머신러닝 모델이 예상치 못한 방향으로 의미를 부여할 수 있다. (값의 차이가 멀수록 상관 관계가 없다고 착각할 수 있다.) 이때 사용할 수 있는 것이 one-hot encoder이다. 특정 feature에만 1을 설정하고 나머지에는 0을 설정하는 방법이다. 

 

3) Feature Scaling

feature들의 단위가 많이 다르면 학습에 좋지 않기 때문에 feature scaling을 해야한다. 주로 사용되는 방법에는 1) min-max scaling(normalization)2) standardization이 있다. min-max scaling은 무조건 0과 1 사이의 값으로 맞추는 것이고, standardization은 평균 값을 뺀 뒤 표준 편차를 나누어서 정해진 range가 없다. min-max scaling이 outlier 값에 대해 더 취약하다. 

 

만약 그래프가 특정 방향으로 쏠려 있다면, 다음과 같은 방법들을 사용해서 대칭적으로 만들어 주는 것이 좋다.

1) feature square root log를 취하는 것.

2) bucketizing : bucket과 비슷하게 range별로 카테고리를 만들어서 index를 붙이는 것.

3) 각 노드별로 특정 값과 비교해서 input과의 유사도 값으로 새로운 특징을 추가하는 것. 보통 Radial Basis Function(RBF)을 사용한다. 

 

로그를 취해서 가우스 정규분포와 유사하게 설정한 예시

 

RBF 사용 예시

 

※ 데이터셋에 대해서 여러 개의 처리를 중첩해서 사용한다면 Pipeline 코드를 활용해서 아예 묶어 놓을 수 있다.

from sklearn.pipeline import Pipeline

num_pipeline = Pipeline([
    ("impute", SimpleImputer(strategy="median")),
    ("standardize", StandardScaler()),
])

 

728x90
반응형

'AI > ML' 카테고리의 다른 글

[ML] 분류 (Classification)  (0) 2024.08.16
[ML] 모델 파인튜닝  (0) 2024.08.14
[ML] 모델의 평가와 검증 (Test, Evaluation)  (0) 2024.07.26
[ML] 머신 러닝의 성능 저하 요인  (1) 2024.07.24
[ML] 머신 러닝 유형  (1) 2024.07.23