html
머신러닝에서 데이터 분할 및 특성 스케일링 이해하기
목차
- 데이터 분할: 학습 세트와 테스트 세트
- 테스트 세트란 무엇인가?
- 학습 세트란 무엇인가?
- 일반적인 분할 비율
- scikit-learn을 사용한 데이터 분할 구현
- 특성 스케일링: 표준화와 정규화
- 왜 특성 스케일링이 필요한가?
- 표준화 vs. 정규화
- 권장되는 접근 방식
- scikit-learn을 사용한 특성 스케일링 구현
- 단계 요약
- 결론
데이터 분할: 학습 세트와 테스트 세트
테스트 세트란 무엇인가?
테스트 세트는 머신러닝 모델의 성능을 평가하기 위해 예약된 데이터셋의 하위 집합입니다. 이 보류된 데이터를 모델에 제공함으로써 모델이 새롭고 보지 않은 데이터를 얼마나 정확하게 예측하는지 평가할 수 있으며, 이를 통해 모델의 실제 성능을 이해할 수 있습니다.
학습 세트란 무엇인가?
반대로, 학습 세트는 모델을 학습시키는 데 사용되는 데이터의 부분입니다. 모델은 이 데이터 내의 패턴, 관계 및 구조를 학습하여 새로운 데이터에 대한 예측이나 분류를 수행합니다.
일반적인 분할 비율
일반적인 관행은 데이터를 80%는 학습용으로, 20%는 테스트용으로 분할하는 것입니다. 이 비율은 모델이 학습할 충분한 데이터를 확보하면서도 성능을 견고하게 평가할 수 있는 충분한 데이터를 유지하는 균형을 제공합니다.
scikit-learn을 사용한 데이터 분할 구현
다음은 scikit-learn의 train_test_split
함수를 사용하여 데이터를 분할하는 단계별 가이드입니다:
- 필요한 라이브러리 불러오기
1
from sklearn.model_selection import train_test_split
- 데이터 준비하기
특성이 X
에 저장되고 타겟 변수가 Y
에 저장되어 있다고 가정합니다:
12
X = data.drop('target', axis=1) # FeaturesY = data['target'] # Target variable
- 데이터 분할하기
123
X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size=0.2, random_state=42)
- test_size=0.2: 데이터의 20%를 테스트용으로 할당합니다.
- random_state=42: 셔플링 과정을 제어하여 재현성을 보장합니다. 고정된
random_state
를 사용하면 코드를 실행할 때마다 동일한 분할을 얻을 수 있어 일관된 모델 평가에 중요합니다.
- 분할 확인하기
각 세트의 레코드 수를 확인할 수 있습니다:
12
print(len(X_train)) # 전체 데이터의 80%여야 함print(len(X_test)) # 전체 데이터의 20%여야 함
특성 스케일링: 표준화와 정규화
왜 특성 스케일링이 필요한가?
머신러닝 알고리즘은 수치형 입력 특성이 비슷한 규모일 때 더 잘 작동합니다. 범위가 큰 특성은 모델에 불균형적으로 영향을 미쳐 최적 이하의 성능을 초래할 수 있습니다. 특성 스케일링은 특성의 범위를 표준화하여 모델의 효율성과 정확성을 향상시킵니다.
표준화 vs. 정규화
- 표준화:
- 공식: \( z = \frac{(X - \mu)}{\sigma} \)
- 데이터를 평균 0과 표준 편차 1을 갖도록 변환합니다.
- 가우시안(정규) 분포를 가진 특성에 적합합니다.
- 데이터가 완벽하게 정규 분포를 따르지 않아도 널리 사용되며 일반적으로 효과적입니다.
- 정규화:
- 공식: \( X_{norm} = \frac{(X - X_{min})}{(X_{max} - X_{min})} \)
- 데이터를 고정된 범위, 일반적으로 0에서 1까지 스케일링합니다.
- 데이터가 알려진 분포를 따르거나 경계가 필요할 때 가장 잘 사용됩니다.
권장되는 접근 방식
일반적으로 특성 스케일링을 수행하기 전에 데이터를 분할하는 것을 권장합니다. 이 방법은 스케일링 매개변수(예: 평균 및 표준 편차)가 오직 학습 데이터에서만 도출되도록 보장하여 데이터 유출을 방지하고 테스트 데이터가 진정한 보류 세트로 남아 있도록 합니다.
scikit-learn을 사용한 특성 스케일링 구현
- StandardScaler 불러오기
1
from sklearn.preprocessing import StandardScaler
- 스케일러 초기화
1
scaler = StandardScaler()
- 학습 데이터에 스케일러 적용 및 변환
1
X_train_scaled = scaler.fit_transform(X_train)
- 테스트 데이터 변환
1
X_test_scaled = scaler.transform(X_test)
- 중요: 스케일러는 학습 데이터에만 적합시킵니다. 동일한 변환이 테스트 데이터에 적용됩니다. 이는 테스트 데이터가 일관되게 스케일링되며, 테스트 세트에서의 정보가 학습 과정에 유입되지 않도록 보장합니다.
- 범주형 변수 처리
데이터셋에 수치 값으로 인코딩된 범주형 변수가 포함된 경우(예: 0, 1, 2), 이러한 열에 스케일링을 적용하지 않도록 하십시오. 이는 의미를 왜곡할 수 있습니다. 연속적인 수치형 특성만 스케일링되도록 하십시오.
단계 요약
- 데이터 불러오기: 데이터셋을 적절한 형식(예: pandas DataFrame)으로 로드합니다.
- 데이터 분할: 데이터셋을 특성(
X
)과 타겟(Y
)으로 나눈 후, 80/20 학습-테스트 분할을 수행합니다.
- 누락된 데이터 처리: 보간 또는 제거를 통해 데이터의 누락된 부분을 해결합니다.
- 특성 선택: 모델 성능을 향상시키기 위해 관련 없거나 중복된 특성을 제거합니다.
- 데이터 인코딩: 필요에 따라 범주형 변수를 수치 형식으로 변환합니다.
- 특성 스케일링: 모든 특성이 모델에 동등하게 기여하도록 표준화 또는 정규화를 적용합니다.
결론
적절한 데이터 준비는 성공적인 머신러닝 프로젝트의 초석입니다. 데이터를 꼼꼼하게 분할하고 적절한 특성 스케일링을 적용함으로써 정확하고 신뢰할 수 있는 모델을 구축할 수 있는 기반을 마련하게 됩니다. 머신러닝을 계속 탐구함에 따라 이러한 기본적인 실습은 더 복잡한 문제를 해결하는 데 큰 도움이 될 것입니다.
다음 기사에서도 전처리 기술 및 강력한 머신러닝 모델 구축에 필수적인 다른 중요한 측면에 대해 더 깊이 다룰 예정이니, 많은 기대 부탁드립니다.