데이터 전처리란 무엇인가?
데이터 전처리는 머신러닝 알고리즘에 비해 알려져 있는 정도가 작지만,
중요도는 ML 알고리즘에 맞먹는 중요도를 가지고 있다.
왜냐하면 머신러닝을 통해서 예측을 한다는 것은 데이터 기반이기 때문에,
어떤 데이터를 입력으로 가지는가가 성능에 매우 중요하다.
그럼 어떤 데이터 처리가 필요할까?
1. "결손값", "NaN", "Null"값을 채워 넣는것이다.
머신러닝에 데이터를 입력으로 넣기 전에 해당 값들을 고정된 다른 변환 값으로 바꾸어야 한다.
다른 변환 값이라는 것은 또 무엇을 의미하는가?
이 값은 머신러닝을 제작하는 사람이 직접 고려해야 하는 부분이다.
예를 들어,
피처의 값이 얼마되지 않는 경우에는 피처의 평균값으로 결손값을 대체하는 경우가 있고,
결손값이 일정 수준의 비율 이상인 경우, 해당 피처의 중요도가 크고, 평균으로 대체했을 때 예측
성능이 많이 낮아지는 경우, 더욱 정밀한 값들을 넣어야 한다.
2. 사이킷 런 ML 알고리즘은 문자열 값을 데이터 입력으로 허용하지 않는다.
따라서 모든 문자열 값은 숫자형 데이터로 변환이 되거나
중요도가 낮거나, 필요가 없는 경우 삭제 해야 한다.
문자열 데이터의 종류에는
텍스트형 피처와 카테고리형 피처가 있다.
텍스트형 피처에는 주민번호나 단순 문자열 id처럼 되어 있는 데이터가 있다. 이런 경우, 삭제를 해주는 것이 좋다. 이런 단순 문자열 id 들이 예측성능을 떨어뜨리는 경우가 많기 때문이다. 또한, 신문 기사 본문처럼 텍스트로 되어있는 데이터의 경우, 피처 벡터화라는 기법을 사용한다.
카테고리형 피처는 카테고리의 의미대로 특정 분류에 쓰이는 경우이다.
예를들어 손님이 산 가전제품을 데이터로 제작한 경우,
손님 1 : 냉장고,
손님 2 : TV
손님 3 : 컴퓨터
손님 4 : TV
이런 형식으로 되어있는 경우 카테고리형 피처라고 이야기 한다.
카테고리형 피처 데이터 인코딩
위와 같은 카테고리형 피처를 인코딩하는 방법에는 레이블 인코딩(Label encoding)과 원-핫 인코딩(One-Hot encoding)이 있다.
레이블 인코딩(Label encoding)
위에서 예로 들었던 데이터에서 해당 가전 제품들을 특정한 숫자로 매핑시켜서 변환하는 것이다.
손님 1 : 냉장고 -> 1
손님 2 : TV -> 2
손님 3 : 컴퓨터 -> 3
손님 4 : TV -> 2
이렇게 문자열 데이터를 숫자형으로 바꾸는 것이다.
하지만, 여기에는 예측 성능을 떨어뜨리는 문제점이 있다.
우리가 냉장고, TV, 컴퓨터에 숫자를 대입하는 경우,
해당 숫자의 크기와는 아무 연관이 없지만, ML 알고리즘에 들어가 해당 모델이 학습을 진행하는 경우, 숫자의 크기에 의해서 예측이 잘못되는 경우들이 있다.
이런 문제점을 해결하기 위해서 원-핫 인코딩(One-Hot encoding)이 생겨났다.
원-핫 인코딩(One-Hot encoding)
원-핫이라는 단어의 의미는 여러 개의 속성 중 단 한 개의 속성 만 1로 표시한다는 뜻이다.
피처 값의 유형에 따라 새로운 피처를 추가해 고유 값에 해당하는 칼럼에만 1을 표시하고 나머지 칼럼에는 0을 표시하는 방식이다.
쉽게 풀어서 설명하자면,
특성 하나에 대한 표를 만드는 것이다.
냉장고 TV 컴퓨터
손님 1: 1 손님1 : 1 0 0
손님 2: 2 => 손님2 : 0 1 0
손님 3: 3 => 손님3 : 0 0 1
손님 4: 2 손님4 : 0 1 0
레이블 인코딩의 문제점을 일반적인 데이터의 관점에서 생각을 하면,
숫자형 데이터들도 피처에 따라서 단위가 다르기 떄문에, 분포가 다를 것이고, 이를 제대로 고려하지 않으면
예측 성능이 떨어지는 원인 중 하나가 된다.
이를 방지하기 위해서 피처 스케일링이라는 작업을 거친다.
피처 스케일링 (Feature Scaling)
서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업을 의미한다.
대표적인 방법으로는 표준화(Standardization)와 정규화(Normalization)이 있다.
표준화
데이터의 피처 각각이 평균이 0이고, 분산이 1인 가우시안 정규 분포를 가진 값으로 변환하는 것을 의미한다.
고등학교 통계 과정에서 처럼 각 데이터의 value들을 해당 피처의 평균을 뺸 다음, 표준 편차로 나누어 주는 과정을
표준화라고 한다.
정규화
분포보다는 서로 다른 피처의 크기를 통일해주는 데에 주목한다.
따라서 각 데이터의 value들을 해당 피처의 최솟값을 뺸 다음, (최댓값 - 최솟값)으로 나누어 준다.
이 과정을 거치면 양수만 있는 데이터는 0~1사이의 값을 가지며,
음수가 있는 데이터는 -1 ~ 1사이의 값을 가지게 된다.
사이킷 런의 정규화는 이와는 조금 다르게 작동한다. 일반적인 정규화는 한 피처를 고려하지만,
사이킷 런에서는 해당 데이터 값의 모든 피처를 고려한다.
일반적으로 피처 스케일에는 일반적인 의미의 표준화와 정규화가 있고, 위에서 얘기한 사이킷 런에서 작동하는 방식의
(선형 대수 개념이 들어간) 정규화는 벡터 정규화라고 이야기 한다.
'기계학습 > Machine Learning' 카테고리의 다른 글
[파이썬 머신러닝 완벽가이드] : 사이킷 런 평가지표 (정밀도, 재현율) (0) | 2020.08.06 |
---|---|
[파이썬 머신러닝 완벽가이드] : 사이킷 런 평가지표 (정확도 , 오차행렬) (0) | 2020.08.06 |
[파이썬 머신러닝 완벽가이드] : 사이킷 런 하이퍼 파라미터 & GridSearchCV - 3 (0) | 2020.08.04 |
[파이썬 머신러닝 완벽가이드] : 사이킷 런 교차 검증(K-Fold) - 2 (0) | 2020.08.03 |
[파이썬 머신러닝 완벽가이드] : 사이킷런 기본 - 1 (0) | 2020.07.29 |
최근댓글