box-coxについて
- 正の値を(正規分布状の)区間に圧縮する
- ロジット変換等と並列にある存在
0 < λ < 1
で右により、1 < λ
で左による
数式
λ != 0 \(\frac{x^\lambda - 1}{\lambda}\)
λ = 0 \(log x\)
実験
- 一様分布のデータに対してλのパラメータを変化させ、どのような特性になるか確認する
import seaborn as sns
import matplotlib
# matplotlib.use('agg') # python scriptのときは有効化する
import matplotlib.pyplot as plt
import matplotlib.dates as mdates # time seriesの描画
import importlib
if importlib.util.find_spec("japanize_matplotlib"):
import japanize_matplotlib # 日本語フォントが入っていないなど
plt.figure(figsize=(30, 30))
f, ax = plt.subplots(nrows=7, ncols=3, figsize=(30, 30))
import numpy as np
x = np.random.random((100000,)) * 1000
for i, l in enumerate(np.arange(0.0, 2, 0.1)):
if l == 0.0:
y = np.log(x)
else:
y = (x**l - 1)/l
sns.distplot(y, kde=False, ax=ax[i//3, i%3])
ax[i//3, i%3].set(title=f"lambda = {l:0.2f}")
出力結果