hyeori
범주형 데이터 다루기 본문
4.2.1 판다스를 사용한 범주형 데이터 인코딩
- color : 순서 X
- size : 순서 O
- price : 수치형 특성
4.2.2 순서가 있는 특성 매핑
- 학습 알고리즘이 순서 특성을 올바르게 인식하려면
- → 범주형의 문자열 값 → 정수로 변환
size_mapping = {'XL': 3,
'L': 2,
'M': 1}
df['size'] = df['size'].map(size_mapping)
df
- 정수 → 원래 문자열 표현 : inv_size_mapping = {v: k for k, v in size_mapping.items()}
inv_size_mapping = {v: k for k, v in size_mapping.items()}
df['size'].map(inv_size_mapping)
4.2.3 클래스 레이블 인코딩
- 클래스 레이블은 순서가 없다.
- 특정 레이블에 할당한 정수는 아무런 의미가 없다.
- enumerate 함수를 사용하여 클래스 레이블을 0부터 할당
- map 딕셔너리 사용하여 클래스 레이블을 정수로 변환
- sklearn에 구현된 LabelEncoder 클래스 사용 ← 편리inverse_transform : 정수 클래스 레이블 → 원본 문자열
- fit_transform : fit + transform
4.2.4 순서가 없는 특성에 원-핫 인코딩 적용
- color 열에 적용
X = df[['color', 'size', 'price']].values
color_le = LabelEncoder()
X[:, 0] = color_le.fit_transform(X[:, 0]) #le.fit?
X
# blue = 0, green = 1, red = 2
- ColumnTransformer → 여러개의 열을 한번에 정수로 변환 가능
이 배열을 분류기에 주입하면 X → color 값에 순서가 없는데, 있다고 간주하게 된다.
해결하기 위해 One-hot encoding 원-핫 인코딩 , 순서 없는 특성에 들어 있는 고유한 값마다 dummy 더미 특성 생성
ex) blue = 1, green = 0, red = 0 알파벳 순으로
from sklearn.preprocessing import OneHotEncoder
X = df[['color', 'size', 'price']].values
color_ohe = OneHotEncoder()
color_ohe.fit_transform(X[:, 0].reshape(-1, 1)).toarray() # 배열의 다른 두 열 수정X, 여러개의 특성이 있는 배열에서 특정 열만 변환하려면 ColumnTransformer 사용
from sklearn.composeimport ColumnTransformer
X= df[['color', 'size', 'price']].values
c_transf= ColumnTransformer([ ('onehot', OneHotEncoder(), [0]),
('nothing', 'passthrough', [1, 2])])
c_transf.fit_transform(X)
- get_dummies 가 더 편리한 방법 이다.
pd.get_dummies(df[['price', 'color', 'size']], columns=['size'])
→ 다중 공선성 (multicolinearity) 문제 유념, 변수 간의 상관관계 높게 나타나는 것 주의
→ 변수 간의 상관관계를 감소하기 위해, 원-핫 인코딩된 배열에서 특성 열 하나를 삭제한다.
pd.get_dummies(df[['price','color','size']], drop_first = True) # 첫 번째 열 삭제
# OneHotEncoder에서 다중 공선성 문제 처리
color_ohe = OneHotEncoder(categories='auto', drop='first') # OneHotEncoder 에서 중복된 열 삭제하기
c_transf = ColumnTransformer([ ('onehot', color_ohe, [0]),
('nothing', 'passthrough', [1, 2])])
c_transf.fit_transform(X)
'머신러닝' 카테고리의 다른 글
특성 스케일 맞추기 (0) | 2024.05.08 |
---|---|
데이터셋을 훈련 데이터셋과 테스트 데이터 셋으로 나누기 (0) | 2024.05.08 |
누락된 데이터 다루기 (0) | 2024.05.08 |
적응형 선형 뉴런과 학습의 수렴 (0) | 2024.05.08 |
파이썬으로 퍼셉트론 학습 알고리즘 구현 (0) | 2024.05.08 |