赞
踩
K-Means 是一种常用的无监督学习算法,广泛应用于数据聚类分析。本文将详细讲解 K-Means 算法的原理、步骤、公式以及 Python 实现,帮助你深入理解这一经典算法。
K-Means 算法是一种基于原型的聚类算法,其目标是将数据集分成K个簇(clusters),使得同一簇内的数据点尽可能相似,不同簇之间的数据点尽可能不同。每个簇由其中心(即质心,centroid)表示。
K-Means 算法的主要步骤如下:
初始化:
分配簇:
更新质心:
重复:
K-Means 算法的优化目标是最小化所有数据点到其所属簇质心的距离平方和。优化目标函数可以表示为:
J
=
∑
i
=
1
k
∑
x
j
∈
C
i
∥
x
j
−
μ
i
∥
2
\ J = \sum_{i=1}^k \sum_{x_j \in C_i} \| x_j - \mu_i \|^2 \
J=i=1∑kxj∈Ci∑∥xj−μi∥2
该目标函数也称为聚类内的总平方误差(Total Within-Cluster Sum of Squares,简称 TSS)。
下面通过 Python 代码实现 K-Means 算法,并以一个示例数据集展示其应用。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 生成示例数据集
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
plt.scatter(X[:, 0], X[:, 1], s=50)
plt.show()
# 应用 K-Means 算法
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='red', s=200, alpha=0.75, marker='x')
plt.show()
在上面的示例中,我们生成了一个有 4 个簇的示例数据集,并使用 K-Means 算法对其进行聚类。最终,我们通过可视化展示了聚类结果以及每个簇的质心。
K-Means 算法是一种简单而有效的聚类算法,广泛应用于各种数据分析和机器学习任务中。本文详细介绍了 K-Means 算法的原理、步骤、公式以及 Python 实现。虽然 K-Means 算法有一些缺点,但通过合理选择参数和预处理数据,可以在许多实际应用中取得良好的效果。希望本文能帮助你更好地理解和应用 K-Means 算法。
支持向量机(SVM算法详解)
回归算法详解
knn算法详解
GBDT算法详解
XGBOOST算法详解
CATBOOST算法详解
随机森林算法详解
lightGBM算法详解
对比分析:GBDT、XGBoost、CatBoost和LightGBM
机器学习参数寻优:方法、实例与分析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。