[빅데이터분석기사] 작업형2 머신러닝 - 데이터 전처리(인코딩, 스케일링), 검증 데이터 분할

2025. 6. 15. 21:56·Data/빅데이터분석기사
728x90

인코딩(필수⭐️ 반드시 해야한다)

문자열데이터를 숫자형데이터로 변경해줘야한다!

1. 타겟 값을 별도의 변수에 저장한다.

인코딩 전 가장 먼저 해야할 일은 타겟 값을 별도의 변수에 담아놓는 것.

문자형 변수가 아니고 숫자형 변수더라도 꼭 타겟값을 별도의 변수에 저장해놓아야 나중에 변경되지 않는다!

y_train = train.pop("income")

 

이후, 원핫인코딩과 레이블인코딩 중 원하는 인코딩 방법을 사용해 인코딩하면 된다.

2-1. 원핫인코딩

원핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 만들어 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식이다. 문자 데이터를 컬럼으로 바꾸고 0이나 1 혹은 True나 False로 값을 지정하는 방식이다.

https://wikidocs.net/22647

pandas에서는 get_dummies(데이터프레임명)라는 함수를 제공해 데이터프레임을 자동으로 원핫인코딩으로 변경할 수 있다.

train_oh = pd.get_dummies(train)
test_oh = pd.get_dummies(test)
print(train.shape, test.shape, train_oh.shape, test_oh.shape)

다만 이런 경우 주의해야할 점이 있는데, 원핫인코딩으로 변경한 train데이터와 teste데이터의 컬럼 수가 같아야 한다는 점이다.

대부분 원핫인코딩 후 데이터 컬럼 수가 같은 문제를 제공해주기 때문에 걱정하지 않아도 된다.

하지만, 위처럼 컬럼의 유니크 수가 다를 경우 맞춰줘야 한다.

원핫인코딩 유니크 수가 다를 때

  1. train데이터와 test데이터를 concat으로 위아래 연결을 해준다(axis=0)
  2. 합친 데이터를 get_dummes로 원핫인코딩한다.
  3. 원핫인코딩한 데이터를 다시 train데이터와 test데이터로 나눈다. (이때 train데이터의 len(train)을 사용해서 iloc로 잘라낸다.)
  4. 많은 쪽에 맞춰서 컬럼의 유니크 수가 맞춰진다.
print(train.shape, test.shape)

data = pd.concat([train, test], axis=0)
data_oh = pd.get_dummies(data)

train_oh = data_oh.iloc[:len(train)].copy()
test_oh = data_oh.iloc[len(train):].copy()

print(train_oh.shape, test_oh.shape)

2-2. 레이블 인코딩

라벨인코딩은 문자열로 된 범주형 변수를 코드형 숫자 값으로 변환하는 방법.

우선 타겟컬럼을 제외한 타입이 object인 컬럼들을 골라내준다.

방법1이나 방법2를 많이 사용할듯. select_dtypes(include='object') 나 columns[train.dtypes == object]

# cols = train.select_dtypes(include='object').columns #방법1
# cols = train.columns[train.dtypes == object] #방법2
cols = ['workclass', 'education', 'marital.status', 'occupation', 'relationship', 'race', 'sex','native.country']
cols

 

레이블인코딩은 원핫인코딩처럼 제공해주는 함수가 없기 때문에 코드를 외워줘야 한다.

 

  1. sklearn.preprocessing안의 LabelEncoder를 import 해주고
  2. for문을 돌면서 위의 cols 컬럼들에 인코딩을 적용해주면 된다.
    • 이때 LabelEncoder()를 변수에 선언해서 함수들을 가져다 사용해야 한다. ex) le = LabelEncoder()
    • le.fit_trainsform(): 사전을 만들어서 적용시키는 함수
    • le.transform(): 만들어진 사전을 적용시키는 함수
from sklearn.preprocessing import LabelEncoder

for col in cols:
    le = LabelEncoder()
    train[col] = le.fit_transform(train[col])
    test[col] = le.transform(test[col])

train.head()

스케일링(선택사항)

  • Scaling은 값을 조정하는 과정이기 때문에 수치형 변수에만 적용된다.

작업형2에서는 필수사항은 아니지만, 작업형1에서 스케일링을 진행하라는 문제가 나올 수도 있다.

# 수치형 컬럼명
# cols = train.select_dtypes(exclude='object').columns 
# 이걸 지금 사용하게 되면 이미 위에서 object 타입이 숫자형으로 변경된 뒤이기 때문에 직접 작성해주는게 좋다.
cols = ['age', 'fnlwgt', 'education.num', 'capital.gain', 'capital.loss', 'hours.per.week']

1. Min-Max Scaler (민맥스 스케일링): 모든 값을 0과 1 사이로 변경

  1. sklearn.preprocessing안의 LabelEncoder를 import 해주고
  2. 위에서 진행했던 라벨인코딩처럼 fit_transfrom과 transfrom을 적용해주면 된다.
  3. 라벨인코딩과의 다른점은, 라벨인코딩은 컬럼 하나하나를 따로 적용해야해서 for문을 사용했고 MinMaxScaler는 컬럼 리스트가 있다면 한 번에 적용시킬 수 있다는 점이다.
# 민-맥스 스케일링 MinMaxScaler (모든 값이 0과 1사이)
train_copy, test_copy = get_data()

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()

display(train_copy[cols].head(2))
train_copy[cols] = scaler.fit_transform(train_copy[cols])
test_copy[cols] = scaler.transform(test_copy[cols])
display(train_copy[cols].head(2))

2. Standard Scaler (표준화)

데이터의 feature가 각각 평균이 0, 분산이 1인 정규분포를 가진 값으로 변환한다. 즉, 피처가 표준정규분포의 속성을 갖도록 조정되는 것

  1. sklearn.preprocessing안의 StandardScaler를 import 해주고
  2. 위에서 진행했던 MinMaxScaler처럼 fit_transfrom과 transfrom을 적용해주면 된다.
# 표준화 StandardScaler (Z-score 정규화, 평균이 0 표준편차가 1인 표준 정규분포로 변경)
train_copy, test_copy = get_data()

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
display(train_copy[cols].head(2))
train_copy[cols] = scaler.fit_transform(train_copy[cols])
test_copy[cols] = scaler.transform(test_copy[cols])
display(train_copy[cols].head(2))

3. Robust Scaler (로버스트 스케일링)

중앙값과 사분위 값을 활용하는 스케일링 방법으로, 이상치 영향을 최소화한다는 장점이 있다.

  1. sklearn.preprocessing안의 RobustScaler를 import 해주고
  2. 위에서 진행했던 StandardScaler처럼 fit_transfrom과 transfrom을 적용해주면 된다.
# 로버스트 스케일링 : 중앙값과 사분위 값 활용, 이상치 영향 최소화 장점
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
display(train[cols].head(2))
train[cols] = scaler.fit_transform(train[cols])
test[cols] = scaler.transform(test[cols])
display(train[cols].head(2))

검증 데이터 분할

from sklearn.model_selection import train_test_split

X/X/y/y | test/val/test/val

# 검증 데이터 분할
from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(train,
                                            y_train,
                                            test_size=0.2,
                                            random_state=0)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape

 

 

728x90

'Data > 빅데이터분석기사' 카테고리의 다른 글

[빅데이터분석기사] 데이터전처리 100제  (0) 2025.06.30
[빅데이터분석기사] 작업형2 머신러닝 - 머신러닝 학습 및 평가(분류/회귀)  (0) 2025.06.16
[빅데이터분석기사] 작업형2 머신러닝 - 데이터 전처리(결측치, 이상치)  (0) 2025.06.15
[빅데이터분석기사] 작업형1 모의문제3+4  (0) 2025.06.13
[빅데이터분석기사] 작업형1 모의문제1+2  (0) 2025.06.13
'Data/빅데이터분석기사' 카테고리의 다른 글
  • [빅데이터분석기사] 데이터전처리 100제
  • [빅데이터분석기사] 작업형2 머신러닝 - 머신러닝 학습 및 평가(분류/회귀)
  • [빅데이터분석기사] 작업형2 머신러닝 - 데이터 전처리(결측치, 이상치)
  • [빅데이터분석기사] 작업형1 모의문제3+4
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (443)
      • App·Android (1)
      • BE (50)
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (11)
        • 스프링부트 시큐리티 & JWT (0)
        • 실전 자바 기본, 중급 (1)
        • PHP (11)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (28)
        • AI (7)
        • Bigdata (6)
        • Database (1)
        • Python (0)
        • 빅데이터분석기사 (13)
      • Infra (1)
      • Activity (9)
        • Intern (0)
        • SK AI Dream Camp (2)
        • 구름톤 유니브 4기 (1)
        • 리모트 인턴십 6기 (3)
        • 봉사활동 (0)
        • 부스트캠프 AI Tech 8기 (3)
      • CS (8)
      • 취준 (12)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (2)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다이나믹프로그래밍
    정렬
    자료구조
    누적합
    문자열
    백준
    그리디알고리즘
    최단경로
    브루트포스 알고리즘
    매개변수탐색
    구현
    이분탐색
    오블완
    수학
    그래프탐색
    시뮬레이션
    그래프이론
    티스토리챌린지
    투포인터
    너비우선탐색
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[빅데이터분석기사] 작업형2 머신러닝 - 데이터 전처리(인코딩, 스케일링), 검증 데이터 분할
상단으로

티스토리툴바