predict_proba 不适用于我的高斯混合模型(sklearn,python)

Posted

技术标签:

【中文标题】predict_proba 不适用于我的高斯混合模型(sklearn,python)【英文标题】:predict_proba is not working for my gaussian mixture model (sklearn, python) 【发布时间】:2019-11-21 09:37:45 【问题描述】:

运行 Python 3.7.3

我制作了一个简单的 GMM 并将其拟合到一些数据中。使用 predict_proba 方法,返回值是 1 和 0,而不是属于每个高斯的输入的概率。

我最初在一个更大的数据集上尝试了这个,然后试图获得一个最小的例子。

from sklearn.mixture import GaussianMixture
import pandas as pd

feat_1 = [1,1.8,4,4.1, 2.2]
feat_2 = [1.4,.9,4,3.9, 2.3]
test_df = pd.DataFrame('feat_1': feat_1, 'feat_2': feat_2)

gmm_test = GaussianMixture(n_components =2 ).fit(test_df)

gmm_test.predict_proba(test_df) 
gmm_test.predict_proba(np.array([[8,-1]]))

我得到的数组只有 1 和 0,或者几乎是(10^-30 或其他)。

除非我解释不正确,否则返回应该是每个的概率,例如,

gmm_test.predict_proba(np.array([[8,-1]])) 

当然不应该是 [1,0] 或 [0,1]。

【问题讨论】:

你也可以尝试做GaussianMixture(n_components =2, covariance_type='diag')来防止过拟合。 【参考方案1】:

您给出的示例给出了奇怪的结果,因为您只有 5 个数据点,而您仍然使用 2 个混合分量,这基本上会导致过度拟合。

如果您确实检查了组件的均值和协方差:

print(gmm_test.means_)
>>> [[4.05       3.95      ]
     [1.66666667 1.53333333]]

print(gmm_test.covariances_)
>>> [[[ 0.002501   -0.0025    ]
      [-0.0025      0.002501  ]]
     [[ 0.24888989  0.13777778]
      [ 0.13777778  0.33555656]]]

由此可以看出,第一个高斯基本上拟合了一个很小的协方差矩阵,这意味着除非一个点非常靠近它的中心(4.05,3.95),否则属于这个高斯的概率总是可以忽略不计.

为了让您相信尽管如此,您的模型仍按预期工作,请尝试以下操作:

epsilon = 0.005    
print(gmm_test.predict_proba([gmm_test.means_[0]+epsilon]))
>>> array([[0.03142181, 0.96857819]])

一旦你增加epsilon,它只会返回array([[0., 1.]]),就像你观察到的那样。

【讨论】:

哦!从来没有看到我得到回应。谢谢你。 feat_1 = [1,1.8,4,6.1, 2.2, 5, 7,9] feat_2 = [1.4,.9,4,12.9, 2.3, 5, 7, 9] test_df = pd .DataFrame('feat_1': feat_1, 'feat_2': feat_2) gmm_test = GaussianMixture(n_components =2).fit(test_df) gmm_test.predict_proba(test_df) gmm_test.predict_proba(np.array([[4,7] ])) 这也给出了相同的响应,所以我认为这不是问题所在。在这里,协方差不是那么小,预测点在两个高斯之间。

以上是关于predict_proba 不适用于我的高斯混合模型(sklearn,python)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的使用“for-each 循环”的线性搜索代码不适用于混合输入?

在我的模型中,flask-restless 不适用于混合属性

用于像素聚类的高斯混合模型

在 MATLAB 中可视化高斯混合模型集群

05 EM算法 - 高斯混合模型 - GMM

EM算法和混合高斯模型(一)