【发布时间】:2021-09-21 07:26:34
【问题描述】:
我正在运行 Yeo Johnson Transform,并按照 Scipy 网站上给出的示例进行操作。 Scipy link 我还将它与 Sklearn 实现进行了比较。 这是代码: 我
import seaborn as sns
from sklearn.preprocessing import PowerTransformer
from scipy import stats
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure( figsize=(10,10))
ax1 = fig.add_subplot(421)
x = stats.loggamma.rvs(5, size=500) + 5
prob = stats.probplot(x, dist=stats.norm, plot=ax1)
ax1.set_xlabel('')
ax1.set_title('Probplot')
ax2 = fig.add_subplot(422)
sns.distplot(x, color="skyblue")
ax2.set_title('Distribution of Data')
ax3 = fig.add_subplot(423)
xt_scipy, lmbda = stats.yeojohnson(x)
prob = stats.probplot(xt_scipy, dist=stats.norm, plot=ax3)
ax3.set_xlabel('')
ax3.set_title('Probplot:Yeo-Johnson:Scipy')
ax4 = fig.add_subplot(424)
sns.distplot(xt_scipy, color="skyblue")
ax4.set_title('Distribution of Transformed Data')
ax5 = fig.add_subplot(425)
pt = PowerTransformer(method = 'yeo-johnson',standardize = True)
xt_sklearn = pt.fit_transform(x.reshape(-1,1))
prob = stats.probplot(xt_sklearn.flatten(), dist=stats.norm, plot=ax5)
ax5.set_xlabel('')
ax5.set_title('Probplot:Yeo-Johnson:Sklearn')
ax6 = fig.add_subplot(426)
sns.distplot(xt_sklearn, color="skyblue")
ax6.set_title('Distribution of Transformed Data')
plt.tight_layout(h_pad=0.9, w_pad=0.9)
plt.show()
查看附图,可以看出两种方法似乎都按预期对数据进行了归一化,从分位数可以看出。
但是,两个库的转换数据分布图虽然形状相同,但值范围不同。
为什么转换后的值不同?哪一个对应于真正的 Yeo Johnson 公式?
赛迪
【问题讨论】:
标签: python scipy normalization