k-均值聚类算法介绍

k-均值聚类算法介绍

k-均值聚类算法是一种经典的无监督学习算法,用于将数据点划分为k个簇。该算法简单易懂,效率高,在许多领域都有广泛应用。

原理

k-均值聚类算法的核心思想是:

  1. 随机选择k个点作为初始的簇中心。
  2. 计算每个数据点到每个簇中心的距离,并将数据点分配到距离最近的簇。
  3. 重新计算每个簇的中心,使其为该簇所有数据点的平均值。
  4. 重复步骤2和3,直到簇中心不再变化。

优缺点

优点:

  • 简单易懂,易于实现。
  • 效率高,适用于大规模数据集。
  • 对数据类型没有限制,可以处理数值型、文本型等数据。

缺点:

  • 需要预先指定簇的数量k,而k的选择对聚类结果有很大影响。
  • 对初始簇中心的选取敏感,不同的初始簇中心可能导致不同的聚类结果。
  • 不适用于形状不规则的簇。

实现过程

以下是用Python实现k-均值聚类算法的示例代码:

import numpy as np

def kmeans(X, k):
  """
  k-均值聚类算法

  Args:
    X: 数据矩阵,形状为(n_samples, n_features)
    k: 簇的数量

  Returns:
    labels: 数据点的簇标签,形状为(n_samples,)
    centroids: 簇中心,形状为(k, n_features)
  """
  # 随机选择k个点作为初始簇中心
  centroids = X[np.random.choice(X.shape[0], k, replace=False)]

  # 迭代直到簇中心不再变化
  while True:
    # 计算每个数据点到每个簇中心的距离
    distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)

    # 将数据点分配到距离最近的簇
    labels = np.argmin(distances, axis=1)

    # 重新计算每个簇的中心
    new_centroids = np.zeros_like(centroids)
    for i in range(k):
      new_centroids[i] = np.mean(X[labels == i], axis=0)

    # 判断簇中心是否变化
    if np.allclose(centroids, new_centroids):
      break

    # 更新簇中心
    centroids = new_centroids

  return labels, centroids

具体示例

以下是用k-均值聚类算法对鸢尾花数据集进行聚类的示例:

from sklearn import datasets
from sklearn.cluster import KMeans

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 使用k-均值聚类算法进行聚类
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)

# 打印聚类结果
print(kmeans.labels_)

运行代码后,将输出每个数据点的簇标签。我们可以使用matplotlib库将聚类结果可视化:

import matplotlib.pyplot as plt

plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)``

运行代码后,将输出每个数据点的簇标签。我们可以使用matplotlib库将聚类结果可视化:

```python
import matplotlib.pyplot as plt

plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.show()

图中不同颜色代表不同的簇。

总结

k-均值聚类算法是一种简单易懂、效率高、应用广泛的聚类算法。它适用于各种类型的数据,但对初始簇中心的选取和簇的数量k的选择敏感。在实际应用中,需要根据具体情况进行调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值