[데이터사이언스기초] Data Preprocessing in Scikit-learn

 

Data Preprocessing using Scikit-learn: 머신러닝 모델 성능 향상의 핵심

저번에 데이터 전처리(Data Preprocessing)에 대해 간략히 소개한 적이 있다. 특히, Standardization(표준화) 기법을 중심으로 설명했었다. 이번에는 Scikit-learn 라이브러리가 제공하는 다양한 데이터 전처리 기법들을 깊이 있게 살펴보고, 실제 데이터 분석 과정에서 어떻게 활용되는지 알아보겠다.

1. 데이터 전처리 (Data Preprocessing) 란?

지난번에 얘기했듯, 데이터 전처리는 Raw Data를 머신러닝 모델 학습에 적합한 형태로 변환하는 과정이다. 현실 세계의 데이터는 종종 결측치, 이상치, 불균형한 분포 등 다양한 문제를 가지고 있기 때문에, 이러한 문제들을 해결하고 데이터의 품질을 높이는 것이 매우 중요하다.

2. Scikit-learn의 다양한 Data Preprocessing 기법

Scikit-learn은 데이터 전처리를 위한 다양한 기능을 제공하며, 이를 통해 데이터 분석 과정을 효율적으로 진행할 수 있다.

2.1. Encoding Categorical Features (범주형 특징 인코딩)

범주형 특징(Categorical Feature)은 숫자가 아닌 범주(예: 성별, 색상, 지역)로 표현되는 특징이다. 머신러닝 알고리즘은 일반적으로 숫자 형태의 입력을 요구하기 때문에, 범주형 특징을 숫자로 변환하는 과정이 필요하다.

  • OrdinalEncoder: 범주형 특징을 정수로 변환한다. 각 범주에는 0부터 시작하는 고유한 정수가 할당된다.
  • OneHotEncoder: 범주형 특징을 binary vector로 변환한다. 각 범주는 벡터의 한 요소에 해당하며, 해당 범주에 속하는 경우 1, 그렇지 않은 경우 0으로 표시된다.
Ordinal vs OneHot

2.2. Feature Binarization (특징 이진화)

Feature Binarization은 연속형 특징(Continuous Feature)을 임계값(threshold)을 기준으로 0 또는 1의 이진 값으로 변환하는 과정이다. 이는 특정 임계값을 기준으로 데이터를 분류하거나 특징의 중요도를 강조하는 데 유용하다.

  • Binarizer: 사용자가 지정한 임계값을 기준으로 특징을 이진화
    default : 0, Binarizer에 threshold 인자를 지정할 수 있음
binarizer

2.3. Custom Transformer (사용자 정의 변환기)

Scikit-learn은 FunctionTransformer 클래스를 통해 사용자 정의 함수를 변환기로 사용할 수 있도록 지원한다. 이를 통해 복잡한 데이터 전처리 과정을 사용자 정의 함수로 정의하고, 파이프라인에 통합하여 관리할 수 있다.

custom transformer example

2.4. Label Binarization & Encoding (레이블 이진화 및 인코딩)

Label Binarization은 여러 클래스(multi-class) 레이블을 binary matrix 형태로 변환하는 과정이다. 예를 들어, 3개의 클래스(0, 1, 2)를 가진 레이블은 다음과 같이 변환될 수 있다.

0 -> [1, 0, 0]
1 -> [0, 1, 0]
2 -> [0, 0, 1]
  • LabelBinarizer: 여러 클래스 레이블을 binary matrix로 변환
  • MultiLabelBinarizer: 여러 개의 레이블을 가진 데이터를 binary matrix로 변환
MultiLabelBinarizer

Label Encoding은 범주형 레이블을 0부터 시작하는 정수로 변환하는 과정이다.

  • LabelEncoder: 범주형 레이블을 정수로 변환
    LabelEncoder

2.5. Imputation of Missing Values (결측치 처리)

결측치(Missing Value)는 데이터 분석 과정에서 자주 발생하는 문제다. 결측치를 처리하는 가장 기본적인 방법은 결측치를 포함한 행/열 전체를 지우는 것이다. 하지만 이는 모델 학습에 좋지 않은 행동이다. 따라서 결측값을 채워 넣는 방법이 더 나은데, Scikit-learn은 다양한 결측치 처리 기법을 제공한다.

  • SimpleImputer: 상수, 평균, 중앙값, 최빈값 등으로 결측치를 대체

  • IterativeImputer: 다른 특징들을 사용하여 결측치를 예측하고 대체
  • KNNImputer: K-Nearest Neighbors 알고리즘을 사용하여 결측치를 대체
  • MissingIndicator: 결측치가 있는 위치를 나타내는 새로운 특징을 생성

마무리

이번 포스팅에서는 Scikit-learn을 사용한 다양한 데이터 전처리 기법에 대해 알아보았다. 데이터 전처리는 머신러닝 모델 구축 과정에서 매우 중요한 단계이므로, 데이터의 특성과 문제에 맞는 적절한 기법을 선택하고 적용하는 것이 중요하다. 다음 포스팅에서는 또 새로운 주제로 비지도학습인 clustering에 대해 알아보겠다.

추천글 :
[데이터사이언스기초] Introduction to Machine learning
(https://hyeonb.blogspot.com/2024/06/introduction-to-machine-learning.html)

[데이터사이언스기초] Machine learning process
(
https://hyeonb.blogspot.com/2024/06/machine-learning-process.html)
hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2