Python 来自sklearn'的非常大的日志概率;s BayesianGaussianMixture

Python 来自sklearn'的非常大的日志概率;s BayesianGaussianMixture,python,scikit-learn,mixture-model,Python,Scikit Learn,Mixture Model,我一直在使用python对sklearn(以及GaussianMixture)进行实验,它显示了相同的问题 我用从分布中提取的许多项来拟合模型,然后用保留的数据集(一些来自分布,一些在分布之外)测试模型 比如: 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

我一直在使用python对sklearn(以及GaussianMixture)进行实验,它显示了相同的问题

我用从分布中提取的许多项来拟合模型,然后用保留的数据集(一些来自分布,一些在分布之外)测试模型

比如:

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\u samples
方法返回给定数据的每个样本的对数可能性,“in”样本比“out”样本的可能性要大得多——我只是想知道为什么绝对值这么高

score\u样本的文档说明“计算每个样本的加权对数概率”——但我不清楚权重是基于什么


我需要先缩放输入吗?我的输入维度是否过高?我需要做一些额外的参数调整吗?或者我只是误解了该方法返回的结果?

权重是基于混合权重的

我需要先缩放输入吗

这通常不是一个坏主意,但我不能说不知道更多关于您的数据

我的输入维度是否过高

考虑到你拟合的数据量,它似乎太高了。记住维度的诅咒。您只有很少的数据行和312个特征,比例为1:4;这在实践中是行不通的

我需要做一些额外的参数调整吗?还是我只是 误解方法返回的内容

您的输出是非常负的日志概率。如果你把e提高到这么大的负量级,你得到的概率非常接近于零。从这个角度来看,你的结果是有意义的。您可能希望在您知道在该组件中存在较高概率的区域检查日志概率。您可能还希望检查每个组件的协方差,以确保没有退化解,这很可能是由于本例中的数据量和维度。在此之前,您可能需要获取更多数据或查看是否可以减少维度的数量

我忘了提到一个相当重要的点:输出是针对密度的,所以请记住这一点