微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 KMeans 中手动设置聚类中心并预测概率而不是类别? 或 GMM

如何解决如何在 KMeans 中手动设置聚类中心并预测概率而不是类别? 或 GMM

我在此处遵循此示例:

https://www.stackoverflow.com/questions/60205100/define-cluster-centers-manually

他设置质心的初始位置并只运行一次迭代,因此质心最终成为初始设置的质心。我能够在我的代码中重现。

我也在寻找结果的概率,我能够使用:

https://scikit-learn.org/0.16/modules/generated/sklearn.mixture.GMM.html

我尝试使用在 KMeans 上使用的相同方法 (init),但我认为没有使用 GMM 的方法

那我该怎么办呢?还有其他算法/方法吗?

PS:我知道它们是不同的算法,我只是想更好地解释数据。

解决方法

您在这里尝试实现的目标不是很清楚。 Kmeans 通过最小化集群内的清晰距离来工作,所以这里的概率不大。要计算概率,您需要做出某些假设,例如,集群内的数据遵循多元高斯分布。以下是粗略估计,具体取决于您的数据。

请注意,在 1 次迭代中,均值可能会因您的数据集而略有变化,例如:

from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture
import matplotlib.pyplot as plt

cts = np.array([[1,1],[2,2],[3,3]])

X,y_true = datasets.make_blobs(n_samples=100,centers=cts,cluster_std=0.30,random_state=0)

plt.scatter(X[:,0],X[:,c=y_true)

enter image description here

现在,如果我们像在那个帖子中那样运行 kmeans,平均值会改变(稍微):

kmeans = KMeans(n_clusters=3,random_state=0,init = cts,n_init=1).fit(X)

kmeans.cluster_centers_

array([[0.99526578,1.00152973],[1.99987588,2.10819314],[2.94674517,2.96792463]])

为了回答您的问题,使用 GMM 根据 kmeans 结果获得粗略的概率,我们可以这样做:

clf = GaussianMixture(n_components=3,covariance_type='spherical',means_init = kmeans.cluster_centers_,n_init= 1,max_iter=1)
                      
clf.fit(X)
clf.predict_proba(X)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。