Categorical : 범주형
- 대상값들이 서로 떨어진 값을 가지는 변수. 대부분 몇 개의 범주 중 하나에 속하는 값들로 구성되어 어떤 분류에 대한 속성을 가진다
- 종류
- 명목(Norminal)/비서열(Unordered)
- 순위(Ordinal)/서열(Ordered)
Continuous : 연속형
- 대상 값들이 서로 연속된 값을 가지는 변수
- 종류
- 등간(Interval)
- 비율(Ratio)
- ML 알고리즘은 숫자(정수/실수)만 처리 가능
- 범주형인 경우 숫자형으로 변환
- 단순 문자열인 경우 일반적으로 제거
- 종류
- Label Encoding
- 숫자의 차이가 모델에 영향을 주지 않는 경우
- 변환 대상이 같은 경우는 같은 모델 객체로 학습 가능
from sklearn.preprocessing import LabelEncoder # 변환기(Transformer) 객체 생성 -> LabelEncoder(), 객체에 Label Encoding 결과 저장 encoder = LabelEncoder() # 어떻게 변환할지 학습 - fit(학습(=변환)할 대상), labeling = 학습 encoder.fit(items) # 변환 - transform(변환대상) labels = encoder.transform(items)
fit() # 어떻게 변환할 지 학습, 내 생각에는 변환할 대상이라 생각하면 될 것 같다 transform() # 문자열를 숫자로 변환 fit_transform() # 학습과 변환을 한번에 처리 inverse_transform() # 숫자를 문자열로 변환 classes_ # 인코딩한 클래스 조회
- One-Hot Encoding
- N개의 클래스를 N 차원의 One-Hot 벡터로 표현되도록 변환
- 고유값들을 피처(컬럼)로 만들고 정답에 해당하는 열은 1로 나머진 0으로 표시
- Sparse Matrix : DecisionTree 계열의 알고리즘에서 Feature에 0이 많은 경우
from sklearn.preprocesing import OneHotEncoder oh_encoder = OneHotEncoder(sparse=False) # sparse=True : 1인 index들만 반환 # sparse=False : ndarray형태로 2차원 형태(0과 1 모두 표시되어있는)로 반환 oh_encoder.fit(items[...,np.newaxis]) # 2차원 형태로 입력해줘야하기 때문 r = oh_encoder.transform(items[...,np.newaxis]) get_feature_names_out() # 원핫인코딩으로 변환된 컬럼의 이름을 반환
- pandas get_dummies()이용해서 Encoding한 경우
pd.get_dummies(dataframe) # df 전체 pd.get_dummies(dataframe, columns=['A', 'B']) # 특정 열 선택해서 encoding
- 학습하는데 있어 각 Feature들의 값의 범위가 다를 경우 가중치 영향력이 상이해 학습에 적절하지 않은 영향 있을 수 있다. 대부분의 모델이 영향을 받기 때문에 각 Feature들의 범위를 일정한 범위로 맞추는 작업이 필요하다
- Feature Scaling(정규화) : 위에서 언급한 작업
- 두 가지 중 선택에 대해 결정 조건 미비, data보고 확인해야되는데 처리 이전에 data를 볼 수 없기에 둘 다 해보고 비교를 통해 선정
- 종류
- Standardization : 표준화
- 평균 0, 표준편차 1인 범위에 있도록 변환 ==> 0을 기준으로 모든 데이터들이 모여있게 된다
from sklearn.preprocessing import StandardScaler # standardScaler 객체 생성 stn_scaler = StandardScaler() # 학습시키기 -> data의 평균과 표준편차 stn_scaler.fit(data) result = stn_scaler.transform(data)
- Min Max Scaling
- Dataset의 값들을 0(Min value)~1(Max value) 사이의 값으로 변환
from sklearn.preprocessing import MinMaxScaler # 객체 생성 mm_scaler = MinMaxScaler() # 학습 - 최소/최대값을 계산 mm_scaler.fit(data) # 변환 result = mm_scaler.transform(data) # 학습, 변환 한번에 result2 = mm_scaler.fit_transform(data)