其中
x
i
x_i
xi 和
y
i
y_i
yi 是两点在第
i
i
i 维的坐标。
2. 目标函数
-
K-Means 的目标是最小化所有簇内数据点与其质心的距离之和:
J
=
∑
j
=
1
k
∑
i
=
1
n
j
∣
∣
x
i
(
j
)
−
c
j
∣
∣
2
J = sum_{j=1}^{k} sum_{i=1}^{n_j} ||x_i^{(j)} – c_j||^2
J=j=1∑ki=1∑nj∣∣xi(j)−cj∣∣2
其中
n
j
n_j
nj 是第
j
j
j 个簇中的数据点数,
x
i
(
j
)
x_i^{(j)}
xi(j) 是簇
j
j
j 中的第
i
i
i 个数据点,
c
j
c_j
cj 是簇
j
j
j 的质心。
代码
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 创建KMeans实例
kmeans = KMeans(n_clusters=4)
# 训练模型
kmeans.fit(X)
# 预测簇标签
y_kmeans = kmeans.predict(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
plt.title("K-Means Clustering")
plt.show()
在这个示例中,我们首先生成了一组模拟数据,然后创建了一个KMeans实例并指定簇的数量。接着,我们训练了模型并预测了每个数据点的簇标签。最后,我们使用Matplotlib可视化了聚类
K-Means 与 C-Means 的区别
K-Means
- 硬聚类方法,每个数据点只属于一个簇。
- 使用欧氏距离作为距离度量。
- 更简单和快速。
C-Means(模糊C-Means)
- 软聚类方法,每个数据点以一定程度属于所有簇。
- 数据点对簇的隶属度是模糊的,由隶属函数给出。
- 更适用于簇的边界不清晰的情况。
C-Means 为数据点提供了更多的灵活性,允许它们以不同程度属于多个簇,这在一些应用中可能更为合适。
原文地址:https://blog.csdn.net/h52013141/article/details/134791215
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_51167.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!