本文介绍: K-Means 是一种流行的聚类算法,用于将数据划分为预定数量的簇(clusters)。

其中

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=1ki=1nj∣∣xi(j)cj2

    其中

    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进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注