[AIS7] ML 개념 정리

BBakHye·2022년 11월 10일
0

🦁 AI SCHOOL 7기

목록 보기
23/52
post-thumbnail

Feature Engineering

Feature Scaling

: feature의 범위를 조정해서 정규화

💡 목표: feature의 분산과 표준편차를 조정해서 정규분포 형채를 띄게 하는 것

🤔 스케일링은 왜 하는걸까?
1) 서로 다른 변수끼리 비교하는 것이 편리
2) feature scaling 없이 작동하는 알고리즘에서 더 빨리 작동
3) 머신러닝 성능이 상승
4) 이상치에 대한 강점이 있음.

일반적으로 쓰이는 스케일링의 3가지 기법:

from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import RobustScaler

1) StandardScaler (Z-score scaling)

z=(XX.mean)/stdz=(X-X.mean)/std
  • 정의: 평균 0, 표준편차 1의 표준 정규분포 형태로 만들어주는 방식
  • 특징: 최솟값과 최댓값의 크기를 제한하지 않는다.
  • 이상치: 평균을 이용하여 계산해주기 때문에 이상치에 민감 (평균: 이상치의 값에 크게 영향을 받기 때문)
from sklearn.preprocessing import StandardScaler

# Standardization 평균 0 / 분산 1
ss = StandardScaler()   
ss = scaler.fit_transform(DataFrame)

# 교차검증시
ss.fit(X_train)
X_train = ss.transform(X_train)
X_test = ss.transform(X_test)

2) MinMaxScaler

Xscaled=(XX.min)/(X.maxX.min)X_scaled=(X-X.min)/(X.max-X.min)
  • 정의: 변수 범위를 0과 1사이로 압축해주는 개념 (최솟값이 0, 최댓값이 1)
  • 특징: 정규분포가 아니거나 표준편차가 작을 때 효과적
  • 이상치: 이상치를 포함하고 있으면 범위설정에 영향이 가기 때문에 이상치에 민감.
from sklearn.preprocessing import MinMaxScaler

# Normalization 최소값 0 / 최대값 1
mms = MinMaxScaler()
mms = scaler.fit_transform(DataFrame)

# 교차검증시
mms.fit(X_train)
X_train = mms.transform(X_train)
X_test = mms.transform(X_test)

3) RobustScaler

Xscaled=(XX.median)/IQRX_scaled=(X-X.median)/IQR
  • 정의: 중앙값을 0으로 만들고 사분위 수(IQR)를 1로 만들어주는 방식
  • 특징: 데이터가 넓게 분포할 수 있다.
  • 이상치: 중앙값(median)을 이용하기 때문에 StandardScaler, MinMaxScaler에 비해서 이상치에 강함
from sklearn.preprocessing import RobusterScaler

# 중앙값 0 / IQR 1
rs = RobusterScaler()
rs = rs.fit_transform(DataFrame)

# 교차검증시
rs.fit(X_train)
X_train = rs.transform(X_train)
X_test = rs.transform(X_test)

Encoding

1) One-Hot-Encoding

: Categorical Feature를 다른 bool변수로 대체하여 특정 레이블이 참인지 여부를 나타냄.

  • 변수 값들을 0과 1로 매핑
  • 변수 값만큼 컬럼이 생기기 때문에 학습속도가 느림
  • 너무 많은 컬럼이 생기면 중요하지 않은 특성이 많이 생길 수 있기 때문에 성능 저하
  • 접근 방식에 순서가 없기 때문에 고유한 값을 갖는 열을 인코딩하기엔 적합하지 않음

분류: n개 모두 인코딩
회귀: n-1개 인코딩

2) Binary Encoding

: 범주형 변수값을 이진법으로 변환

장점: feature 개수 만큼 추가적인 변수 생성한다는 부분에서 One-Hot-Encoding 과 비슷하다고 생각할 수 있지만 One-Hot-Encoding 에 비해 훨씬 더 적은 개수의 추가 변수가 생성된다.
e.g. 100개의 범주로 One Hot Encoding을 할 경우 100개의 변수가 추가로 생기지만, Binary Encoding으로는 7개의 변수가 생긴다.

단점: 인코딩한 변수만 봤을때에는 이 데이터가 무엇을 의미하는지를 잘 알지 못한다.

3) Label Encoding

  • 순서에 의미가 없는 데이터에 사용
    e.g. 지역코드

사이킷런을 이용해 인코딩을 진행하면 알파벳 순서대로 인코딩이 진행된다.
Pandas의 factorize를 이용하면 데이터 순서대로 인코딩이 진행된다.

4) Ordinal Encoding

: Categorical Feature를 Numerical Feature 중 Ordinal Feature로 변환

  • 사용자가 딕셔너리에 지정한 순서에 따라 인코딩
  • 순서가 있는 범주형 변수를 숫자로 변환하는 인코딩
  • 숫자들 사이에 관계가 존재하기 때문에 순서형 자료에 적합
    e.g. 등급, 학점

💡 범주가 너무 많을 때 one-hot-encoding을 사용하면 중요하지 않은 특성이 많아지기 때문에 성능이 저하될 수 있다. 그럴 경우앤 ordinal encoding을 이용하는 것이 좋다.

Ordinal Encoding과 Label Encoding은 범주형 자료를 숫자형 자료로 바꿔주기에 결과적으로 큰 차이가 존재하지 않는다.

profile
데이터 분석가가 되기 위한 기록 ✏️

0개의 댓글