본 포스팅은 [파이썬 머신러닝 완벽 가이드 - 권철민]을 참고하여 머신러닝 공부의 목적으로 작성되었습니다!
[스스로 공부하며 작성하는 글이기 때문에 잘못된 내용이 있을 수도 있습니다. 잘못된 부분을 발견하시거나 의견이 있으시면 피드백 부탁드립니다:D]
지난 장에 이어 사이킷런 라이브러리 중 데이터 전처리를 담당하는 sklearn.preprocessing에 대해 알아보도록 하겠습니다.
-sklearn.preprocessing
데이터를 전처리하는데 필요한 기능들을 제공하는 라이브러리입니다.
같은 값들은 머신러닝 알고리즘에 입력값으로 허용되지 않습니다.
1. 결손값 (NaN, Null)
-Null 값이 많을 때 : 해당 피처 드롭
-Null 값이 적을 때 : 평균값 등 다른 값으로 변환 (replace 이용)
2. 문자열 값 (카테고리형 피처, 텍스트형 피처)
-카테고리형 피처 : 숫자형 값이 아닌 피처, ex) 상품 데이터의 구분 : TV, 냉장고, 전자레인지
-텍스트형 피처 : 주민번호, 단순 문자열 아이디와 같은 식별자 피처는 중요한 요소 아니므로 삭제
1. 데이터 인코딩
1. 레이블 인코딩
: 카테고리 피처를 코드형 숫자 값으로 변환
상품 데이터의 상품 구분이 TV, 냉장고, 전자레인지, 컴퓨터, 선풍기, 믹서 값이라면
TV : 1, 냉장고 : 2, 전자레인지 : 3, 컴퓨터 : 4, 선풍기 : 5, 믹서 : 6과 같은 숫자 형 값으로 변환
레이블 인코딩은 연속적인 숫자 값으로 인코딩 됩니다.
이때 숫자 값의 크고 작음에 대한 특성 때문에 몇몇 머신러닝 알고리즘(선형 회귀)에서는 예측 성능이 떨어질 수 있습니다.
(단, 트리 계열은 별 문제 없음. 데이터 사전 가공의 영향이 적기 때문)
이러한 문제를 해결하기 위해 원 핫 인코딩을 사용합니다.
2. 원-핫-인코딩
: 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시
모든 피처가 0,1로 표현되므로 숫자의 크고 작음이 영향을 미치지 않습니다.
OneHotEncoder 코드 구현시 주의할 점은
1. OneHotEncoder로 변환 전 모든 문자열 값이 숫자형 값으로 변환되어야 한다. -> LabelEncoder이용
2. OneHotEncoder의 입력 값이 2차원 데이터이어야 한다.
* get_dummies()
판다스에서 OneHotEncoder와 다르게 문자열 카테고리 값을 숫자 형으로 변환할 필요 없이 바로 변환 가능하도록 하는 API
2. 피처 스케일링
서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업
대표적인 방법으로는 표준화(Standardization)와 정규화(Normalization)가 있다.
1. 표준화(Standardization)
: 데이터의 피처 각각이 평균이 0이고 분산이 1인 가우시안 정규 분포를 갖는 값으로 변환
데이터 값과 평균을 기준으로 어느 정도 떨어져있는지 나타내므로 이상치에 민감하다.
[서포트 벡터 머신, 선형 회귀, 로지스틱 회귀는 데이터가 가우시안 분포를 가지고 있다고 가정하고 구현됐기 때문에 표준화를 적용하는 것은 예측 성능 향상에 중요한 요소가 될 수 있다.]
- StandardScaler
: 표준화를 쉽게 지원하기 위한 클래스
2. 정규화(Normalization)
: 피처 마다 값들의 범위가 매우 다르기 때문에 서로 다른 피처의 크기를 통일하기 위해 크기를 변환
값을 모두 최소 0 ~ 최대 1의 값으로 변환
- MinMaxScaler
: 데이터값을 0과 1 사이의 범위 값으로 변환 (음수 값이 있으면 -1에서 1 값으로 변환)
데이터의 분포가 가우시안 분포가 아닐 경우에 적용해 볼 수 있다.
- 스케일링 변환 시 유의할 점!
: Scaler를 이용하여 테스트 데이터변환 시, fit()이나 fit_transform()은 적용하지 않고 이미 학습 데이터로 fit()된 Scaler를 이용하여 transform()만 적용해야 한다.
(머신러닝 모델은 학습 데이터를 기반으로 학습되기 때문에 반드시 테스트 데이터는 학습 데이터의 스케일링 기준에 따라야 하기 때문)
*가능하다면 전체 데이터의 스케일링 변환을 적용한 뒤 학습 데이터와 테스트 데이터로 분리한다.
- 테스트 데이터로 fit을 수행한 경우
- 이미 학습 데이터로 fit()된 Scaler를 이용하여 테스트 데이터를 변환한 경우
다음 장에서는 지금까지 알아본 사이킷런 라이브러리를 이용하여 타이타닉 생존자 예측을 수행해보도록 하겠습니다.
'파이썬 머신러닝 완벽가이드' 카테고리의 다른 글
2강 - 사이킷런으로 시작하는 머신러닝(1) (0) | 2020.09.02 |
---|---|
1강-Pandas(2) (0) | 2020.08.26 |
1강-Pandas (1) (2) | 2020.08.19 |
1강-Numpy (2) | 2020.08.12 |