一、何时使用?
答:在线性回归中使用
二、为何使用?
答:线性回归的前提是,数据服从正态分布。如果不服从正态分布,则必须经过Box-Cox变化,使得数据服从正态分布。
三、Box-Cox公式
3.1 传统形式
其中:
lambda (λ) 的范围是 [ -5,5 ],所有的 λ 会被尝试,直到找到最佳的近似曲线(即正态曲线)
“y”是target variable(you want to transform),“y(λ)”是transformed variable
y的取值必须 >= 0,不能为负数。(因为logy,y的取值不为负)
3.2 改进格式
其中:
y的取值可以为负数
四、λ 取不同值
五、代码实现
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from scipy import stats
# Draw samples from a Beta distribution.
data = np.random.beta(1, 3, 5000)
fig = plt.figure(figsize=(15,8))
plt.subplot(1,2,1)
sns.distplot(data,fit=stats.norm)
# sns.displot(data,kde=True)
plt.legend(["data","stats.norm"])
plt.subplot(1,2,2)
transformed_data = stats.boxcox(data)[0]
sns.distplot(transformed_data,fit=stats.norm)
plt.legend(["transformed_data","stats.norm"])
plt.show()