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

时间:2019-07-11 15:52:15

标签: python scikit-learn mixture-model gmm

运行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]。

1 个答案:

答案 0 :(得分:0)

您给出的示例给您一个奇怪的结果,因为您只有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.]])