머신러닝(Machine Learning) 전반전 - 데이터 스케일링 실습

728x90
반응형
머신러닝 전반전 
탐색적 데이터 분석(EDA): 데이터 파악 → 데이터 전처리: 결측치, 이상치 수정 
→ 데이터 인코딩: 데이터 변환 → 데이터 스케일링: 데이터 정규화

 

 

서론

 

데이터 분석과 머신러닝의 세계에서, 원시 데이터를 그대로 사용하는 것은 여러 가지 문제를 야기할 수 있습니다. 각 특성의 스케일이 다르거나, 이상치가 포함되어 있는 경우, 모델의 성능을 저하시킬 수 있습니다. 이런 문제를 해결하기 위해 데이터 전처리 과정에서 데이터 스케일링이 중요한 역할을 합니다. 데이터 스케일링은 다양한 방법이 있지만, 이번 실습에서는 '정규화(Normalization)'에 초점을 맞추어 진행하려 합니다. 정규화는 데이터의 값이 0과 1 사이의 범위에 들어가도록 변환하는 방법으로, 이상치의 영향을 줄이고, 다양한 특성의 스케일 차이를 보정하는데 효과적입니다.

 

이 글에서는 Python의 대표적인 데이터 분석 라이브러리인 sklearn의 MinMaxScaler를 사용하여 데이터를 정규화하는 방법에 대해 실습하고자 합니다. 실제 데이터를 가지고 어떻게 정규화 과정을 진행하는지, 그리고 그 결과가 어떻게 변하는지를 살펴보며, 데이터 스케일링이 모델의 성능에 어떤 영향을 미치는지 이해해보려 합니다. 이해를 돕기 위해, 간단한 예제와 함께 그래프를 통해 변환 과정을 시각화하며, 또한 실제 머신러닝 모델에 적용해보며 스케일링 전후의 성능 차이를 비교해보겠습니다. 이를 통해 데이터 스케일링의 중요성과 그 효과를 체감할 수 있을 것입니다. 데이터 분석과 머신러닝의 성능을 높이는 핵심 요소 중 하나인 머신러닝(Machine Learning) 전반전 - 데이터 스케일링 실습, 그 중에서도 '정규화'에 대해 다뤄보겠습니다.

 

데이터 정규화

 

해당 실습은 캐글의 타이타닉 데이터에서 sklearn 라이브러리의 MinMaxScaler를 사용하여 'Age' 피처(컬럼)의 값을 변환하는 과정을 진행합니다.

 

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

temp = scaler.fit_transform(train.loc[:, ["Age"]])

train["Age"] = temp[:, 0]

train

 

1.

from sklearn.preprocessing import MinMaxScaler

 

sklearn.preprocessing 모듈에서 MinMaxScaler 클래스를 임포트합니다. MinMaxScaler는 데이터를 특정 범위(기본적으로 0과 1 사이)로 변환하는 방법을 제공합니다.

 

2.

scaler = MinMaxScaler()

 

MinMaxScaler 객체를 생성하여 'scaler' 변수에 할당합니다.

 

3.

temp = scaler.fit_transform(train.loc[:, ["Age"]])

 

'train' 데이터프레임에서 'Age' 컬럼을 선택하고, 이에 대해 MinMaxScaler의 'fit_transform' 메서드를 호출합니다. 'fit_transform' 메서드는 두 가지 작업을 한 번에 수행합니다

 

- 'fit': 데이터에 대한 최대값과 최소값을 계산합니다.

- 'transform': 최소값을 0, 최대값을 1로 설정하고, 다른 값들은 이 사이에 비례하게 변환합니다.

 

4.

train["Age"] = temp[:, 0]

train

 

'temp'의 결과(2차원 배열)를 'train' 데이터프레임의 'Age' 컬럼에 할당합니다. '[:, 0]'는 2차원 배열에서 첫 번째 열의 모든 행을 선택합니다.

 

이 과정을 통해 'Age' 컬럼의 모든 값들을 0과 1 사이의 값으로 변환하는 작업을 수행합니다. 이러한 방식의 스케일링은 데이터에 이상치가 많거나 특성 간의 스케일이 크게 다를 때 유용하게 사용됩니다. 이를 통해 모델의 학습 성능을 향상시킬 수 있습니다.

 

데이터 정규화 전, 후 비교

 

데이터 정규화 전 데이터 프레임
데이터 정규화 후 데이터 프레임
데이터 정규화 전 머신러닝 모델별 Accuracy
데이터 정규화 후 머신러닝 모델별 Accuracy

 

데이터 정규화의 효과는 사용하는 모델의 종류와 데이터의 특성에 따라 다르게 나타날 수 있습니다. Linear Classifier, Logistic Regression, Decision Tree, Random Forest 모델들은 각각 다른 알고리즘을 기반으로 하고 있으므로, 데이터 정규화에 대한 반응도 다를 수 있습니다.

 

1. Linear Classifier: 선형 분류기는 특성 간의 스케일 차이에 민감하게 반응합니다. 따라서 데이터를 정규화하면 모델의 성능이 향상될 확률이 높습니다.

2. Logistic Regression: 로지스틱 회귀 역시 선형 분류기와 비슷하게 특성 간의 스케일 차이에 민감한 편입니다. 하지만, 로지스틱 회귀의 경우, 최적의 가중치를 찾는 과정에서 사용하는 최적화 알고리즘이 스케일에 민감하지 않을 수 있습니다. 따라서, 정규화가 반드시 성능 향상을 가져오지는 않습니다.

3. Decision Tree와 Random Forest: 이들 모델은 특성을 개별적으로 처리하며, 특성의 스케일에 영향을 받지 않습니다. 따라서, 데이터 정규화가 성능에 별다른 영향을 미치지 않을 수 있습니다.

 

또한, 데이터의 특성에 따라 정규화의 효과가 달라질 수 있습니다. 예를 들어, 이상치가 많은 데이터에서는 Min-Max 정규화가 이상치에 크게 영향을 받아 오히려 성능을 저하시킬 수 있습니다. 이런 경우에는 이상치에 덜 민감한 스케일링 방법을 사용하거나, 이상치를 제거하거나 변환하는 등의 전처리가 필요할 수 있습니다. 따라서, 특정 모델의 성능이 정규화 후에 향상되지 않았다면, 해당 모델의 특성, 사용된 데이터의 특성, 그리고 정규화 방법 등을 종합적으로 고려해보아야 합니다.

 

결론

 

머신러닝(Machine Learning) 전반전 - 데이터 스케일링 실습에 대해 다뤄보았습니다. 데이터 분석과 머신러닝 수행 시 기존 데이터를 그대로 사용하기보다는 적절한 전처리 과정을 거치는 것이 중요합니다. 그 중 하나인 데이터 스케일링은 모델의 성능에 큰 영향을 미치며, 이번 글에서는 그 중 '정규화'에 대해 다뤘습니다. 정규화는 데이터를 특정 범위, 보통 0과 1 사이로 변환하는 방법으로, 이상치의 영향을 줄이고, 다양한 특성의 스케일 차이를 보정하는데 효과적입니다.

 

그러나 모든 모델에 대해 정규화가 성능 향상을 가져오는 것은 아닙니다. 각 모델의 특성과 데이터의 특성에 따라 적절한 전처리 방법을 선택해야 합니다. 이 글을 통해, 데이터 스케일링과 특히 정규화의 중요성을 이해하고, 실제로 어떻게 적용하는지에 대한 방법을 알게 되었기를 바랍니다. 이는 단지 한 가지 방법일 뿐, 데이터 전처리는 다양한 방법과 접근법이 필요한 분야입니다. 여러분께서도 다양한 데이터와 다양한 모델에 대해 적절한 전처리 방법을 찾아가는 과정에서 이 글이 조금이나마 도움이 되었기를 바랍니다.

반응형