我一直在使用python来试验sklearn的BayesianGaussianMixture(以及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_samples
方法返回给定数据的每样本对数可能性,并且"在"样本比'" out"样本按预期 - 我只是想知道为什么绝对值如此之高?
score_samples
州的文档"计算每个样本的加权对数概率" - 但我不清楚权重是基于什么的。
我是否需要先扩展输入?我的输入维度是否太高?我是否需要进行一些额外的参数调整?或者我只是误解了该方法返回的内容?
答案 0 :(得分:2)
我可能迟到了,但我想我会添加我的答案,万一有人发现它有用。重量基于混合物重量。
我是否需要先扩展输入?
这通常不是一个坏主意,但我不能说你对数据的了解不多。
我的输入维度是否过高?
看来你给它拟合的数据量实际上太高了。记住维度的诅咒。您拥有非常少的数据行和312个功能,比例为1:4;这在实践中并没有真正发挥作用。
我是否需要进行一些额外的参数调整?或者我只是 误解了该方法返回的内容?
您的输出是非常消极的对数概率。如果将e提高到如此大的负值,则得到的概率非常接近于零。从这个角度来看,你的结果确实有意义您可能希望检查您知道该组件存在概率较高的区域中的对数概率。您可能还想检查每个组件的协方差,以确保您没有退化解决方案,这很可能是在这种情况下给定的数据量和维度。在此之前,您可能希望获得更多数据或查看是否可以减少维数。
我忘了提到一个相当重要的一点:输出是密度,所以请记住这一点。