데이터 인코딩
1. 레이블 인코딩
범주형 데이터를 숫자로 일대일 매핑해주는 인코딩 방식
범주형 데이터를 숫자로 치환하는 것
원본 | 레이블 인코딩 적용 후 |
사과 | 3 |
블루베리 | 2 |
바나나 | 1 |
귤 | 0 |
바나나 | 1 |
사과 | 3 |
원본데이터에 사전순으로 번호를 매김
단점: 명목형 데이터를 레이블 인코딩하면 모델 성능이 떨어질 수 있음
머신러닝모델이 서로 가까운 숫자를 비슷한 데이터로 판단하기 때문이다.
from sklearn.preprocessing import LabelEncoder # 레이블 인코더
fruits = ['사과', '블루베리', '바나나', '귤', '블루베리', '바나나', '바나나', '사과']
# 레이블 인코더 생성
label_encoder = LabelEncoder()
# 레이블 인코딩 적용
fruits_label_encoded = label_encoder.fit_transform(fruits)
print('레이블 인코딩 적용 후 데이터:', fruits_label_encoded)
레이블 인코딩 적용 후 데이터: [3 2 1 0 2 1 1 3]
2. 원-핫 인코딩
여러 값 중 하나(one)만 활성화(hot) 하는 인코딩
단점: 희소행렬 -> 메모리 공간 많이 소모
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
fruits = ['사과', '블루베리', '바나나', '귤', '블루베리', '바나나', '바나나', '사과']
# 레이블 인코더, 원-핫 인코더 생성
label_encoder = LabelEncoder()
onehot_encoder = OneHotEncoder()
# 레이블 인코딩 적용(문자 데이터 -> 숫자 데이터)
fruits_label_encoded = label_encoder.fit_transform(fruits)
# 원-핫 인코딩 적용
fruits_onehot_encoded = onehot_encoder.fit_transform(fruits_label_encoded.reshape(-1, 1))
print('원-핫 인코딩 적용 후 데이터:\n', fruits_onehot_encoded.toarray())
원-핫 인코딩 적용 후 데이터:
[[0. 0. 0. 1.]
[0. 0. 1. 0.]
[0. 1. 0. 0.]
[1. 0. 0. 0.]
[0. 0. 1. 0.]
[0. 1. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 0. 1.]]
피처 스케일링
서로 다른 파처 값의 범위가 일치하도록 조정하는 작업
값의 범위가 데이터마다 다르면 모델 훈련이 제대로 안 될 수 있다.
1. min-max 정규화
피처 값의 범위를 0~1로 조정하는 기법
조정 후 최솟값은 0, 최댓값은 1이 된다.
주의: 이상치가 너무 크거나 작을 때는 min-max정규화가 좋지 않은 결과를 낼 수도 있음
정규화 후 이상치는 0 또는 1, 그 외는 좁은 구간에 몰림
2. 표준화 standardization
평균이 0, 분산이 1이 되도록 피처값을 조정하는 기법
min-max정규화와 다르게 상한과 하한이 없다.
https://www.kaggle.com/werooring/ch5-feature-scaling
[ch5] Feature Scaling
Explore and run machine learning code with Kaggle Notebooks | Using data from No attached data sources
www.kaggle.com
'2022 K Data 청년 캠퍼스 > ML&DL' 카테고리의 다른 글
데이터 시각화 (0) | 2022.07.19 |
---|---|
[ML] 4. 주요 머신러닝 모델 (0) | 2022.07.19 |
[ML] 3. 교차 검증 (0) | 2022.07.19 |
[ML] 1. 분류와 회귀 (0) | 2022.07.19 |
[Pandas] 데이터 분석을 위한 판다스(1) (0) | 2022.07.15 |