머신러닝 전 데이터 전처리 방법
Data Analyst

빅데이터 관련 자료/Machine Learning

머신러닝 전 데이터 전처리 방법

carpe08 2024. 1. 22. 18:06
320x100
320x100

데이터 전처리는 데이터를 분석이나 머신러닝 모델에 적용하기 전에 데이터를 정리하고 가공하는 과정을 말합니다. 이를 통해 데이터의 품질을 향상시키고 모델의 성능을 향상시킬 수 있습니다. 아래는 데이터 전처리를 잘 할 수 있는 몇 가지 방법과 주의할 점을 제시합니다.

  • 데이터 이해하기:
    • 데이터의 특성과 분포를 잘 이해하는 것이 중요합니다. 이를 통해 어떤 전처리가 필요한지 판단할 수 있습니다.
  • 데이터 누락 확인:
    • 결측치(Missing values)를 확인하고 적절한 대체나 제거를 수행하세요. pandas 라이브러리를 사용하면 결측치 처리가 용이합니다.
import pandas as pd

# 결측치 확인
df.isnull().sum()

# 결측치 대체
df.fillna(value, inplace=True)
  • 이상치 다루기:
    • 이상치는 모델의 학습을 방해할 수 있습니다. 박스 플롯 등을 이용해 이상치를 확인하고 필요하면 처리하세요.
# 이상치 확인
sns.boxplot(x=df['feature'])

# 이상치 제거
Q1 = df['feature'].quantile(0.25)
Q3 = df['feature'].quantile(0.75)
IQR = Q3 - Q1
df = df[(df['feature'] >= Q1 - 1.5 * IQR) & (df['feature'] <= Q3 + 1.5 * IQR)]
  • 범주형 데이터 처리:
    • 머신러닝 모델은 숫자를 다루기 때문에 범주형 데이터를 숫자로 변환해야 합니다. 원-핫 인코딩이나 레이블 인코딩을 사용하세요.
# 원-핫 인코딩
df = pd.get_dummies(df, columns=['categorical_column'])

# 레이블 인코딩
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['categorical_column'] = le.fit_transform(df['categorical_column'])
  • 표준화 또는 정규화:
    • 데이터의 스케일을 조절하여 모델의 성능을 향상시킬 수 있습니다. 특히, 신경망 모델 같은 경우에는 입력 데이터를 표준화 또는 정규화하는 것이 중요합니다.
from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 표준화
scaler = StandardScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])

# 정규화
scaler = MinMaxScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])
  • 시계열 데이터 다루기:
    • 시계열 데이터의 경우 날짜 및 시간 관련 특성을 추출하고, 주기성을 고려하여 데이터를 전처리해야 합니다.
# 날짜 및 시간 특성 추출
df['datetime'] = pd.to_datetime(df['datetime_column'])
df['year'] = df['datetime'].dt.year
df['month'] = df['datetime'].dt.month
  • 차원 축소:
    • 높은 차원의 데이터를 효과적으로 다루기 위해 주성분 분석(PCA) 등의 차원 축소 기법을 활용할 수 있습니다.
from sklearn.decomposition import PCA

pca = PCA(n_components=2)
df_pca = pca.fit_transform(df)
  • 적절한 데이터 분할:
    • 데이터를 훈련, 검증, 테스트 세트로 나누는 것은 모델의 일반화 성능을 평가하는 데 중요합니다.
from sklearn.model_selection import train_test_split

train_data, test_data = train_test_split(df, test_size=0.2, random_state=42)
  • 문자열 처리:
    • 텍스트 데이터를 다룰 때는 토큰화, 불용어 제거, 어간 추출 등을 수행하여 특징을 추출하세요.
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

stop_words = set(stopwords.words('english'))

df['text'] = df['text'].apply(lambda x: ' '.join([word for word in word_tokenize(x) if word.lower() not in stop_words]))
  • 기타 데이터 전처리 작업:
    • 데이터에 특화된 전처리 작업이 필요할 수 있습니다. 예를 들어, 이미지 데이터의 경우 크기 조정, 색상 변환 등을 수행할 수 있습니다.
from skimage import io, color

# 이미지 크기 조정
img_resized = io.resize(img, (100, 100))

# 이미지 색상 변환
img_gray = color.rgb2gray(img)

 

종합적으로, 데이터 전처리는 데이터의 특성과 목적에 따라 다양한 기법을 적용해야 합니다. 데이터를 잘 이해하고 적절한 전처리를 수행함으로써 모델의 성능을 향상시킬 수 있습니다.

320x100
320x100