728x90
1. 수치형 데이터 전처리
▶ 스케일링(Scaling)
: 머신러닝의 학습에 사용되는 서로 다른 단위의 데이터들을 보정해주기 위한 방법
1-1) 표준화 (Standardization)
▶ 표준화
: 각 데이터에 평균을 빼고 표준편차를 나누어 평균을 0, 표준편차를 1로 조정하는 방법
▶ 수식
▶ 사용 함수
- sklearn.preprocessing.StandardScaler
- 메소드
- fit : 데이터 학습 (평균과 표준편차를 계산)
- transform : 데이터 스케일링 진행
- 속성
- mean_ : 데이터의 평균 값
- scale_ , var_ : 데이터 표준 편차, 분산 값
- n_features_in_ : fit 할 때 들어간 변수 개수
- feature_names_in_ : fit 할 때 들어간 변수 이름
- n_samples_seen_ : fit 할 때 들어간 데이터의 개수
- 특징
- 장점
- 이상치가 있거나 분포가 치우쳐져 있을 때 유용
- 모든 특성의 스케일을 동일하게 맞춤. 많은 알고리즘에서 좋은 성능
- 단점
- 데이터의 최소-최대 값이 정해지지 않음
- 장점
1-2) 정규화 (Nomarlization)
▶ 정규화
: 데이터를0과 1 사이의 값으로 조정 (최솟값 0, 최댓값 1)
▶ 수식
▶ 사용 함수
- sklearn.preprocessing.MinMaxScaler
- (표준화와 공통인 것은 제외)
- 속성
- data_min_ : 원 데이터의 최솟값
- data_max_ : 원 데이터의 최댓값
- data_range_ : 원 데이터의 최대-최소 범위
- 특징
- 장점
- 모든 특성의 스케일을 동일하게 맞춤
- 최대-최소 범위가 명확
- 단점
- 이상치에 영향을 많이 받을 수 있기 때문에 이상치가 없을 때 유용함
- 장점
1-3) 로버스트 스케일링 (Robust Scaling)
▶ 로버스트 스케일링
: 중앙값과 IQR을 사용하여 스케일링
▶ 수식
▶ 사용 함수
- sklearn.preprocessing.RobustScaler
- 속성
- center_ : 훈련 데이터의 중앙값
▶ 특징
- 장점 : 이상치의 영향에 덜 민감함
- 단점 : 표준화와 정규화에 비해 덜 사용됨
2. 범주형 데이터 전처리
▶ 인코딩(Encoding)
: 어떤 정보를 정해진 규칙에 따라 변환하는 것
2-1) 레이블 인코딩 (Label Encoding)
▶ 레이블 인코딩
: 문자열 범주형 값을 고유한 숫자로 할당하는 것
- A등급 → 1
- B등급 → 2
- C등급 → 3
▶ 사용 함수
- sklearn.preprocessing.LabelEncoder
- 메소드
- fit : 데이터 학습
- transform : 정수형 데이터로 변환
- fit_transform : fit과 transform을 연결하여 한번에 실행
- inverse_transform : 인코딩된 데이터를 원래 문자열로 변환
- 속성
- classes_ : 인코더가 학습한 클래스 (범주)
▶ 특징
- 장점 : 모델이 처리하기 쉬운 수치형으로 데이터 변환
- 단점 : 실제로는 그렇지 않은데 순서 간 크기에 의미가 부여되어 모델이 잘못 해석할 수 있음
- 예를 들어, A등급은 1, B등급은 2라고 인코딩을 해줬을 때
실제로 A와 B등급의 차이가 1이 아닐 것임에도 모델이 잘못 해석할 여지가 있음
- 예를 들어, A등급은 1, B등급은 2라고 인코딩을 해줬을 때
2-2) 원핫인코딩 (OneHot Encoding)
▶ 원핫인코딩
: 각 범주를 이진 형식으로 변환하는 기법
- 봄 → [1,0,0,0]
- 여름 → [0,1,0,0]
- 가을 → [0,0,1,0]
- 겨울 → [0,0,0,1[
▶ 사용 함수
- pd.get_dummies
- sklearn.preprocessing.OneHotEncoder
- 메소드 (LabelEncoder와 동일)
- 속성
- categories_ : 인코더가 학습한 클래스 (범주)
- get_feature_names_out() : 학습한 클래스 이름 (리스트)
# CSR 데이터 데이터프레임으로 만들기
csr_df = pd.DataFrame(csr_data.toarray(), columns = oe.get_feature_names_out())
# 기존 데이터프레임에 붙이기(옆으로)
pd.DataFrame([df, csr_df], axis=1)
728x90
댓글