来自 sklearn 贝叶斯高斯混合物的非常大的对数概率



我一直在使用python尝试Sklearn's BayesiangaussianMixture(以及使用GaussianMixture,它显示同样的问题)。

i与从分布中绘制的许多项目一起拟合模型,然后用固定数据集测试了该模型(一些来自分布的数据集,有些是外部的)。

类似:

X_train = ... # 70x321 matrix
X_in = ... # 20x321 matrix of held out data points from X
X_out = ... # 20x321 matrix of data points drawn from a different distribution
model = BayesianGaussianMixture(n_components=1)
model.fit(X_train)
print(model.score_samples(X_in).mean())
print(model.score_samples(X_out).mean())

输出:

-1334380148.57
-2953544628.45

score_samples方法返回给定数据的每个样本日志可能性,并且"在"样本中比" OUT"样本更有可能 - 我只是想知道为什么绝对值如此之高?<<<</p>

score_samples的文档指出"计算每个样本的加权日志概率" - 但我不清楚基于什么权重。

我需要先扩展输入吗?我的输入维度太高了吗?我需要做一些其他参数调整吗?还是我只是误解了该方法返回的内容?

权重基于混合物。

我需要先扩展输入吗?

这通常不是一个坏主意,但我不能说对您的数据不了解。

我的输入维度太高了?

鉴于您所符合的数据的量实际上太高了。记住维度的诅咒。您的数据排和312个功能很少,1:4比率;这并不是在实践中真正工作。

我需要进行一些其他参数调整吗?还是我只是误解该方法返回什么?

您的输出是非常负面的对数 - 贝型物。如果将E提高到如此巨大的负数,您将获得非常接近零的概率。从这个角度来看,您的结果实际上是有意义的。您可能需要在知道该组件中存在较高可能性的区域中检查对数概率。您可能还需要检查每个组件的协方差,以确保您没有退化解决方案,在这种情况下,鉴于数据和维度的量很可能。在此之前,您可能需要获取更多数据或查看是否可以减少尺寸的数量。

我忘了提到一个相当重要的一点:输出是针对密度的,因此也要记住这一点。

最新更新