본문 바로가기

파이썬 머신러닝 완벽가이드

2강 - 사이킷런으로 시작하는 머신러닝 (2)

본 포스팅은 [파이썬 머신러닝 완벽 가이드 - 권철민]을 참고하여 머신러닝 공부의 목적으로 작성되었습니다!

[스스로 공부하며 작성하는 글이기 때문에 잘못된 내용이 있을 수도 있습니다. 잘못된 부분을 발견하시거나 의견이 있으시면 피드백 부탁드립니다:D]

 

지난 장에 이어 사이킷런 라이브러리 중 데이터 전처리를 담당하는 sklearn.preprocessing에 대해 알아보도록 하겠습니다.

 

-sklearn.preprocessing

데이터를 전처리하는데 필요한 기능들을 제공하는 라이브러리입니다.

같은 값들은 머신러닝 알고리즘에 입력값으로 허용되지 않습니다.

 

1. 결손값 (NaN, Null)

-Null 값이 많을 때 : 해당 피처 드롭

-Null 값이 적을 때 : 평균값 등 다른 값으로 변환 (replace 이용)

 

2. 문자열 값 (카테고리형 피처, 텍스트형 피처)

-카테고리형 피처 : 숫자형 값이 아닌 피처, ex) 상품 데이터의 구분 : TV, 냉장고, 전자레인지

-텍스트형 피처 : 주민번호, 단순 문자열 아이디와 같은 식별자 피처는 중요한 요소 아니므로 삭제

 

 

1. 데이터 인코딩

1. 레이블 인코딩

: 카테고리 피처를 코드형 숫자 값으로 변환

상품 데이터의 상품 구분이 TV, 냉장고, 전자레인지, 컴퓨터, 선풍기, 믹서 값이라면

TV : 1, 냉장고 : 2, 전자레인지 : 3, 컴퓨터 : 4, 선풍기 : 5, 믹서 : 6과 같은 숫자 형 값으로 변환

왼쪽부터 시작하여 TV : 0, 냉장고 : 1, 믹서 : 2, 선풍기 : 3, 전자레인지 : 4, 컴퓨터 : 5 로 인코딩

 

레이블 인코딩은 연속적인 숫자 값으로 인코딩 됩니다.

이때 숫자 값의 크고 작음에 대한 특성 때문에 몇몇 머신러닝 알고리즘(선형 회귀)에서는 예측 성능이 떨어질 수 있습니다.

(단, 트리 계열은 별 문제 없음. 데이터 사전 가공의 영향이 적기 때문)

 

이러한 문제를 해결하기 위해 원 핫 인코딩을 사용합니다.

 

 

2. 원-핫-인코딩

: 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시

모든 피처가 0,1로 표현되므로 숫자의 크고 작음이 영향을 미치지 않습니다.

OneHotEncoder 코드 구현시 주의할 점은

1. OneHotEncoder로 변환 전 모든 문자열 값이 숫자형 값으로 변환되어야 한다. -> LabelEncoder이용

2. OneHotEncoder의 입력 값이 2차원 데이터이어야 한다.

 

* get_dummies()

판다스에서 OneHotEncoder와 다르게 문자열 카테고리 값을 숫자 형으로 변환할 필요 없이 바로 변환 가능하도록 하는 API

 

 

2. 피처 스케일링

서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업

대표적인 방법으로는 표준화(Standardization)와 정규화(Normalization)가 있다.

 

1. 표준화(Standardization)

: 데이터의 피처 각각이 평균이 0이고 분산이 1인 가우시안 정규 분포를 갖는 값으로 변환

데이터 값과 평균을 기준으로 어느 정도 떨어져있는지 나타내므로 이상치에 민감하다.

 

[서포트 벡터 머신, 선형 회귀, 로지스틱 회귀는 데이터가 가우시안 분포를 가지고 있다고 가정하고 구현됐기 때문에 표준화를 적용하는 것은 예측 성능 향상에 중요한 요소가 될 수 있다.]

 

 

- StandardScaler

: 표준화를 쉽게 지원하기 위한 클래스

표준화 전
표준화 후 -> 모든 칼럼 값의 평균이 0에 가깝게, 분산은 1에 가깝게 변환

 

2. 정규화(Normalization)

: 피처 마다 값들의 범위가 매우 다르기 때문에 서로 다른 피처의 크기를 통일하기 위해 크기를 변환

값을 모두 최소 0 ~ 최대 1의 값으로 변환

- MinMaxScaler

: 데이터값을 0과 1 사이의 범위 값으로 변환 (음수 값이 있으면 -1에서 1 값으로 변환)

데이터의 분포가 가우시안 분포가 아닐 경우에 적용해 볼 수 있다.

 

- 스케일링 변환 시 유의할 점!

: Scaler를 이용하여 테스트 데이터변환 시, fit()이나 fit_transform()은 적용하지 않고 이미 학습 데이터로 fit()된 Scaler를 이용하여 transform()만 적용해야 한다.

(머신러닝 모델은 학습 데이터를 기반으로 학습되기 때문에 반드시 테스트 데이터는 학습 데이터의 스케일링 기준에 따라야 하기 때문)

 

*가능하다면 전체 데이터의 스케일링 변환을 적용한 뒤 학습 데이터와 테스트 데이터로 분리한다.

 

- 테스트 데이터로 fit을 수행한 경우

train_array와 test_array의 scale이 다르다.

 

- 이미 학습 데이터로 fit()된 Scaler를 이용하여 테스트 데이터를 변환한 경우

scale이 0.1로 같아졌다.

 

다음 장에서는 지금까지 알아본 사이킷런 라이브러리를 이용하여 타이타닉 생존자 예측을 수행해보도록 하겠습니다.

'파이썬 머신러닝 완벽가이드' 카테고리의 다른 글

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