본문 바로가기
Python/ML&DL

[파이썬, Python] 머신러닝을 위한 데이터 전처리 연습하기!

by coding-choonsik 2023. 6. 14.
728x90
반응형
SMALL

1. 타이타닉 데이터셋 살펴보기

📄 타이타닉 데이터셋(csv)

titanic.csv
0.06MB

 

import numpy as np
import pandas as pd

df = pd.read_csv('https://bit.ly/fc-ml-titanic')
df.head()

 

✅ 각 피쳐들의 뜻 알아보기

 

데이터셋 정보 한눈에 보기

df.info()

▲ null 값 여부와 각 컬럼의 dtypes를 알 수 있음


2. 데이터 전처리

  • 넓은 범위의 데이터 정제 작업을 뜻함
  • 필요 없는 데이터를 삭제하고, 필요한 데이터만 취하는 것, null 값이 있는 행을 삭제하는 것, 정규화, 표준화 등의 많은 작업들을 포함하고 있음
  • 머신러닝, 딥러닝 실무에서도 전처리가 50% 이상의 중요도를 차지함

 

2-1. 독립변수와 종속변수 나누기

# 독립변수: 성별, 가격, 나이, 좌석등급
# 종속변수: Survived(생존여부)
feature = ['Sex', 'Fare', 'Age', 'Pclass']
label = ['Survived']

df[feature].head()

df[label].head()

 

# 종속변수의 종류와 개수 알아보기
df[label].value_counts()  # 0: 사망, 1: 생존


 

2-2. 결측치 처리

df.info()

▲ null 값 여부와 각 컬럼의 dtypes를 알 수 있음

 

# null값의 합계
df.isnull().sum()

 

# 나이 결측치를 평균으로 처리
df['Age'] = df['Age'].fillna(df['Age'].mean())

df['Age']

 


2-3. 라벨 인코딩(Label Encoding)

  • 문자(Categorical)를 수치(Numerical)로 변환
df['Sex'].value_counts()

 

# 성별을 남자면 1, 여자면 0을 반환하는 함수 만들기
def convert_sex(data):
  if data == 'male':
    return 1
  elif data == 'female':
    return 0

 

# apply 를 통해 해당 열에 함수 적용
df['Sex'] = df['Sex'].apply(convert_sex)

df.head()

 


✅ LabelEncoder로 라벨 인코딩 하기

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder() # 객체 생성

# 라벨 인코딩 할 피쳐의 종류와 개수 알아보기
df['Embarked'].value_counts()


le.fit_transform(df['Embarked'])  # 항구에 해당하는 데이터를 숫자로 바꿔줌

 

# 라벨인코딩의 정보를 보고싶을때
le.classes_   # 0: 'C', 1: 'Q', 2: 'S', 3: NaN

>>> array(['C', 'Q', 'S', nan], dtype=object)

2-4. 원 핫 인코딩(One Hot Encoding)

  • 독립적인 데이터는 별도의 컬럼으로 분리하고 각각 컬럼에 해당 값에만 1, 나머지는 0 값을 갖게 하는 방법
  • 예) 머신러닝 알고리즘은 'C:0, Q:1, S:2, Nan:3' 데이터의 관계성을 찾아 'Q + Q = S'라고 학습을 할 수 있음 -> 관계성을 끊어주기 위해 원 핫 인코딩을 사용
  • pd.get_dummies()
# df['Embarked']를 수치로 바꾸어 새로운 파생변수로 저장
df['Embarked_num'] = le.fit_transform(df['Embarked'])

df.head()

 

✅ 원 핫 인코딩 하기

pd.get_dummies(df['Embarked_num'])

 

 

✅ 학습데이터와 검증데이터를 분할

# 학습데이터(80%), 검증데이터(20%)
from sklearn.model_selection import train_test_split


X_train, X_test, y_train, y_test = train_test_split(df[feature], df[label], test_size = 0.2, random_state=10)

X_train.shape, X_test.shape
>>> ((712, 4), (179, 4))

y_train.shape, y_test.shape
>>> ((712, 1), (179, 1))

📍 머신러닝에 있어서 데이터셋 전처리가 중요한 이유!

1️⃣ 불완전한 데이터 처리

  • 실제 데이터는 불완전하고 누락된 값, 이상치, 잡음 등이 포함될 수 있음
  • 전처리를 통해 이러한 불완전한 데이터를 처리하고, 누락된 값에 대한 적절한 대체나 제거를 수행함으로써 모델의 성능을 향상시킬 수 있음

 

2️⃣ 데이터 변환 및 정규화

  • 머신 러닝 모델은 일반적으로 수치형 데이터를 다루기 때문에, 범주형 데이터나 텍스트 데이터를 수치형으로 변환해야 할 때가 있습음
  • 변수들의 범위가 서로 다른 경우에는 정규화나 표준화를 통해 변수들을 동일한 범위로 조정하는 작업이 필요
  • 데이터 변환 및 정규화를 통해 모델의 수렴 속도를 개선하고, 모델의 성능을 일관되게 유지

 

3️⃣ 차원 축소

  • 고차원 데이터셋에서는 변수의 수가 많아서 모델의 학습이 어려울 수 있음
  • 차원 축소 기법을 사용하여 데이터의 차원을 줄여주는 전처리 작업이 필요
  • 차원 축소를 통해 모델의 복잡도를 감소시키고, 학습과 예측 효율성 증대

 

4️⃣ 데이터의 일반화

  • 전처리는 모델이 훈련 데이터에서 학습한 특정 패턴에 지나치게 의존하지 않고, 새로운 데이터에도 일반화할 수 있도록 도와줌
  • 데이터셋 전처리를 통해 모델의 일반화 성능을 향상시킬 수 있으며, 과적합을 방지할 수 있음

 

728x90
반응형
LIST