我有一个特征数据库,一个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)。有没有办法可以检查拟合是否成功,还是绘制数据?有什么高斯混合的替代品(指数混合物,例如,我找不到任何可用的实现)?
答案 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