k-means与GMM优劣对比

文章对比了KMeans和GMM两种聚类算法。KMeans对数据形状有限制,适合球形分布,而GMM更灵活,能处理任意椭球形状的数据,且支持数据点属于多个簇的概率。示例展示了GMM在处理重叠簇时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、代码

import numpy as np, matplotlib.pyplot as mp
from sklearn.cluster import KMeans 
from sklearn import datasets 
from sklearn import mixture

np.random.seed(8)  # 设定随机环境
# 创建随机样本
X, _ = datasets.make_blobs(centers=[[0, 0]])
X1 = np.dot(X, [[4, 1], [1, 1]])
X2 = np.dot(X[:50], [[1, 1], [1, -5]]) - 2
X = np.concatenate((X1, X2))
y = [0] * 100 + [1] * 50
# KMeans
kmeans = KMeans(n_clusters=2)
y_kmeans = kmeans.fit(X).predict(X)
# 绘图
for e, labels in enumerate([y, y_kmeans], 1):
    mp.subplot(1, 2, e)
    mp.scatter(X[:, 0], X[:, 1], c=labels, s=40, alpha=0.6)
    mp.xticks(())
    mp.yticks(())
mp.show()
# GMM
gmm=mixture.GaussianMixture(n_components=2,covariance_type='full')
y_gmm=gmm.fit(X).predict(X)
# 绘图
for e, labels in enumerate([y, y_gmm], 1):
    mp.subplot(1, 2, e)
    mp.scatter(X[:, 0], X[:, 1], c=labels, s=40, alpha=0.6)
    mp.xticks(())
    mp.yticks(())
mp.show()

2、效果

GMM比K-Means在处理数据形状方面更灵活(数据集可以是任何椭球形状,而不是限于球形。),所以如图,GMM的聚类效果刚好。同时,GMM使用概率,每个数据点可能会被划分成多个簇,尤其是数据点位于两个重叠的簇中间。

K-Means

GMM

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值