[5일차] 표준화, 정규화 시도[2021 추가 달력]


2021년 1인 특정 달력(기계학습)은 5일차 기사다.
https://qiita.com/advent-calendar/2021/solo_advent_calendar
주제는 표준화와 정규화이다.
표준화, 정규화는 특징량이 가지고 있는 값의 권중평등을 위한 방법이다.
https://www.codexa.net/normalization-python/
결정목은 각 특징량 내의 반복 분할의 특성 때문에 표준화, 정규화의 영향을 받기 어려운 경향이 있다.
「分類問題を解く教師あり機械学習のアルゴリズム」 より
https://axa.biopapyrus.jp/machine-learning/decision-tree/
Colab의 코드는 여기.Open In Colab입니다.

일반 라이트GBM 평가 결과(이하 동일)


rmse = mean_squared_error(y_test, y_pred, squared=False)
print(rmse)
출력:
0.24290787668071306

표준화


표준화는 각 특징량의 평균치를 0으로 바꾸고 방차를 1로 바꾸는 처리다.
아래와 같이 평균치와의 차액을 표준 편차로 나누어 계산한다.
\begin{aligned}
\frac{x^i -\bar{x}}{σ}
\end{aligned}
sc = StandardScaler()

X_train_sc = pd.DataFrame(
                            sc.fit_transform(X_train),
                            columns=X_train.columns
                            )

X_test_sc = pd.DataFrame(
                            sc.transform(X_test),
                            columns=X_test.columns
                            )
rmse_sc = mean_squared_error(y_test, y_pred, squared=False)
print(rmse_sc)
출력:
0.24239129822702232
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

귀일화


정규화는 각 특징량을 0~1로 제어하는 처리다.
아래와 같이 최소치의 차액을 최대치와 최소치의 차액으로 나누어 계산한다.
\begin{aligned}
\frac{x^i - x^{min}}{x^{max} - x^{min}}
\end{aligned}
nl = MinMaxScaler()

X_train_mm = pd.DataFrame(
                            nl.fit_transform(X_train),
                            columns=X_train.columns
                            )

X_test_mm = pd.DataFrame(
                            nl.transform(X_test),
                            columns=X_test.columns
                            )

rmse_mm = mean_squared_error(y_test, y_pred, squared=False)
print(rmse_mm)
출력:
0.25470676902648787
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html
표준화는 정규화보다 정밀도가 더 좋다.
분산을 계산에 넣어 데이터의 분포를 반영했기 때문이겠지.
RMSE
표준화/귀일화 전
0.2429
표준화 후
0.2424
귀일화 후
0.2547
5일째가 여기까지입니다. 끝까지 읽어주셔서 감사합니다.

좋은 웹페이지 즐겨찾기