我们有两个二维的、可分离的簇,如下图所示:
在该数据集上运行 sklearns GMM:
import numpy as np
from sklearn.mixture import GaussianMixture
gm = GaussianMixture(n_components=2, random_state=42, n_init= 100, init_params='random_from_data').fit(simpleblobs)
它学习两个适合/对应于我们数据集的“质心”的高斯分布:
gm.means_
array([[11.70833308, 13.83333333],
[29.52666641, 36.19 ]])
到目前为止,它似乎已经学会了应该学习的东西。
然而,如果我们添加一个大致位于两个集群之间之间的对象,事情就会变得有趣:
middle_guy = (25,25)
天真地我会期望这个中间人(那不是训练数据的一部分,它基本上是一个新样本)的概率大约是 [0.5,0.5],表明它被分配到两个集群的概率大致相等,或同样低的概率。然而,在调用(我认为是的)预期函数后我们得到的是:
gm.predict_proba([middle_guy])
array([[1.00000000e+00, 8.36394939e-66]])
这表明这个“中间”对象被分配到左下角的概率为 1,并且分配给右上角的概率接近于零。此时我的问题是:为什么结果显示的结果与我预期的不同?我监督或误解了什么?
感谢您的帮助!