将指数转换为正态分布
数据挖掘
机器学习
预处理
正常化
2021-09-16 12:11:21
2个回答
您可以使用sklearn.preprocessing.QuantileTransformer
(or sklearn.preprocessing.PowerTransformer
) 来满足您的需求:
from sklearn.preprocessing import QuantileTransformer
import numpy as np
ey = np.random.exponential(size=100)
qt = QuantileTransformer(output_distribution='normal')
no = qt.fit_transform(ey.reshape(-1, 1))
您可以绘制直方图来比较“之前”和“之后”:
# Plot histograms to see before vs after.
import matplotlib.pyplot as plt
%matplotlib inline
plt.subplot(2, 2, 1)
plt.hist(ey, bins='auto')
plt.subplot(2, 2, 2)
plt.hist(no, bins='auto')
plt.show()
这种方法的优点是它也适用于其他输入分布,而不仅仅是指数分布。
以下代码有效:
import scipy
import numpy as np
ey = np.random.exponential(size=100)
cdfy = scipy.stats.expon.cdf(np.sort(ey))
invcdf = scipy.stats.norm.ppf(cdfy) # a normal distribution
希望这可以帮助
其它你可能感兴趣的问题