使用python在我的数据上拟合高斯(或其他发行版)

时间:2017-06-20 09:35:51

标签: python database gaussian

我有一个特征数据库,一个2D np.array(2000个样本,每个样本包含100个特征,2000 X 100)。我想使用python将高斯分布拟合到我的数据库中。我的代码如下:

data = load_my_data() # loads a np.array with size 2000x200
clf = mixture.GaussianMixture(n_components= 50, covariance_type='full')
clf.fit(data)

我不确定参数,例如covariance_type,我如何调查是否成功发生了拟合。

编辑:我调试代码以调查clf.means_正在发生的事情,并且显然它产生了一个矩阵n_components X size_of_features 50 X 20)。有没有办法可以检查拟合是否成功,还是绘制数据?有什么高斯混合的替代品(指数混合物,例如,我找不到任何可用的实现)?

4 个答案:

答案 0 :(得分:3)

我认为你正在使用sklearn包。

一旦你适合,然后输入

print clf.means_

如果有输出,那么数据是否适合,如果它引起错误,则不适合。

希望这会对你有所帮助。

答案 1 :(得分:1)

您可以使用PCA到3D空间进行降维(让我们说),然后绘制平均值和数据。

答案 2 :(得分:1)

在尝试识别分布之前选择一组简化的候选者总是优先选择(换句话说,使用Cullen&amp; Frey拒绝不太可能的候选人)然后选择合适的优秀选择最佳结果,< / p>

您可以在scipy中创建所有可用分布的列表。一个包含两个分布和随机数据的示例:

import numpy as np
import scipy.stats as st

data = np.random.random(10000)
#Specify all distributions here
distributions = [st.laplace, st.norm]
mles = []

for distribution in distributions:
    pars = distribution.fit(data)
    mle = distribution.nnlf(pars, data)
    mles.append(mle)

results = [(distribution.name, mle) for distribution, mle in 
zip(distributions, mles)]
best_fit = sorted(zip(distributions, mles), key=lambda d: d[1])[0]
print 'Best fit reached using {}, MLE value: {}'.format(best_fit[0].name, best_fit[1])

答案 3 :(得分:0)

据我所知,您可能希望对两种不同的分布进行回归,而不是将它们拟合为算术曲线。如果是这种情况,您可能有兴趣将一个绘制为另一个,并进行线性(或多项式)回归,检查系数 如果是这种情况,两个分布的线性回归可能会告诉您是否存在线性相关性。 Linear Regression using Scipy documentation