제2회 Google Colaboratory에서 시작하는 기계 학습을 위한 특징량 엔지니어링 - 로그 및 Box-Cox 변환
소개
본 기사에서는
로그 변환과 Box-Cox 변환에 대해 설명합니다. 본 기사는 주로 「 기계 학습을 위한 특징량 엔지니어링
또 본 기사의 내용을 보다 자세하게 YouTube 로 해설하고 있으므로 이쪽도 신경이 쓰이는 분은 체크해 봐 주세요.
※본 기사에서 해설하는 프로그램은 모두 여기 에 있습니다.
로그 변환이란?
로그 변환은 주로 다음 목적으로 사용됩니다.
로그 함수는 아래 그림과 같은 함수이며 x가 [1,10]의 범위를 [0,1]에 나타내고 [10,100]의 범위를 [1,2]에 나타내므로 x의 값이 작습니다. 경우는 넓은 범위에 찍히고 x의 값이 큰 경우는 좁은 범위에 찍힌다는 것을 알 수 있다.
이 로그 변환을 사용하면 다음과 같이 밑단의 무거운 분포의 위쪽을 압축하고 아래쪽을 확대하여 정규 분포에 가깝게 만들 수 있습니다.
많은 기계 학습 기법에서는 모집단에 특히 가정을 두지 않는 비 파라 메트릭 모델이 많기 때문에 정규 분포에 접근 할 필요는 없지만 통계 모집단의 분포를 가정하고있는 파라 메트릭 모델을 사용하는 경우 데이터 분포는 정규 분포여야 합니다.
또한, 다음과 같은 큰 분산 데이터에 대수 변환을 사용하여 분산을 줄일 수 있습니다.
로그 변환 적용 전 (분산 : 5.0e + 06)
로그 변환 적용 후 (분산 : 0.332007)
로그 변환 적용 샘플 코드
log.py
import numpy as np
import pandas as pd
##乱数固定
np.random.seed(100)
data_array = []
for i in range(1, 10000):
max_num = i if i > 3000 else 1000
s = np.random.randint(0, max_num, 10)
data_array.extend(s)
data = pd.DataFrame({'Listen Count': data_array})
data_log = pd.DataFrame()
##0になるのを防ぐために1を足す
data_log['Listen Count'] = np.log10(data['Listen Count'] + 1)
Box-Cox 변환이란?
다음 식으로 정의할 수 있는 변환
y=\begin{eqnarray}
\left\{
\begin{array}{l}
\frac{x^\lambda - 1}{\lambda}~~~~~(if ~~ \lambda\neq0) \\
\log(x)~~~~~(if ~~ \lambda=0)
\end{array}
\right.
\end{eqnarray}
어느 정도 정규 분포에 따른 데이터로 하고 싶은 Box-Cox 변환을 이용함으로써 데이터를 정규 분포에 따르게 할 수 있다. (※ 단, 데이터가 양수인 경우에만 사용 가능.)
이 변환을 그래프로 나타내면 아래 그림과 같이 됩니다.
Box-Cox 변환을 사용하려면 람다의 값을 미리 결정해야 합니다. 여기서 가장 우도법을 이용하여 변환 후의 데이터가 정규 분포에 가장 가까워지도록 람다를 결정합니다.
실제로 아래 그림과 같은 분포를 한 데이터에 대해 Box-Cox 변환을 사용하면 정규 분포 같은 분포로 변환할 수 있다는 것을 알 수 있습니다.
Box-Cox 변환 적용 전
Box-Cox 변환 적용 후
Box-Cox 변환 적용 샘플 코드
from scipy import stats
import numpy as np
import pandas as pd
##乱数固定
np.random.seed(100)
##データ生成
data_array = []
for i in range(1, 1000):
s = np.random.randint(1, i * 100, 10)
data_array.extend(s)
data = pd.DataFrame({'Listen Count': data_array})
##Box-Cox変換
rc_bc, bc_params = stats.boxcox(data['Listen Count'])
print(bc_params) ##0.3419237117680786
Q-Q 플롯
Q-Q 플롯은 실측치와 이상값을 플롯한 것입니다. 즉, 직선이면 실측치는 정규 분포라고 말할 수 있습니다.
아래는 원본 데이터, 로그 변환 후 데이터, Box-Cox 변환 후 데이터를 플로팅한 것입니다.
원본 데이터
로그 변환 후
Box-Cox 변환 후
이러한 결과로부터 Box-Cox 변환으로 가장 정규 분포를 따를 수 있었던 것을 알 수 있습니다.
마지막으로
YouTube에서 기계 학습을 중심으로 기술서의 리뷰나 해설 동영상을 올려 가고 있습니다. 또 IT계에 가면 알아 두는 것이 좋은 기업의 소개도 하고 있습니다. Youtube와 Qiita 갱신의 동기 부여에 연결하기 때문에, 좋아, 채널 등록, 고평가를 잘 부탁드립니다.
YouTube : htps //w w. 요츠베. 코 m / 찬 l / 우 Cywlrxt0 dJGYtDBPW-ぺg
트위터 : htps : // 라고 해서 r. 코 m / 갓
참고
h tps : // / ぉ- 키요시. 이 m/2018/12/26/포 st-1037/
https://toukei-lab.com/box-cox%E5%A4%89%E6%8F%9B%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6% E6%AD%A3%E8%A6%8F%E5%88%86%E5%B8%83%E3%81%AB%E5%BE%93%E3%82%8F%E3%81%AA%E3% 81%84%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%A7%A3%E6%9E%90
h tps : // 토케이에 r. 하테나 bぉg. 코m/엔트리/2019/09/08/224346
h tps : // / g 마에 에이. 이 m/2018/09/23/ q-pぉt/
Reference
이 문제에 관하여(제2회 Google Colaboratory에서 시작하는 기계 학습을 위한 특징량 엔지니어링 - 로그 및 Box-Cox 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tatelabo/items/417c019997f235972ab1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)