📅  最后修改于: 2023-12-03 15:39:24.374000             🧑  作者: Mango
聚类是一种常见的无监督学习算法,它可以将数据集分成多个相似的群组,每个群组称为一个簇。聚类应用广泛,它可以提供有关数据集结构的信息,从而帮助我们更好地理解和分析数据。
有很多聚类算法,如k-means算法、层次聚类、谱聚类、DBSCAN等等。在本文中,我们将介绍k-means算法,它是一种基于距离度量的聚类算法。我们还将编写Python代码来实现k-means算法。
k-means算法是一种迭代算法,它的基本思想是将数据集分成k个簇,使得簇内的数据点相似度高,簇间的相似度低。它的算法流程如下:
下面是用Python实现k-means算法的代码片段。
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
# 产生样本数据
X, y = make_blobs(n_samples=1000, centers=4, random_state=42)
# 定义k-means算法
class KMeans:
def __init__(self, k=4, max_iter=100):
self.k = k
self.max_iter = max_iter
def fit(self, X):
n_samples, n_features = X.shape
# 随机初始化k个质心
centroids = np.random.randn(self.k, n_features)
for i in range(self.max_iter):
# 分类数据点到最近的质心
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
labels = distances.argmin(axis=0)
# 更新质心
for j in range(self.k):
centroids[j] = X[labels==j].mean(axis=0)
self.centroids = centroids
self.labels = labels
# 对样本数据进行聚类
kmeans = KMeans(k=4)
kmeans.fit(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels)
plt.scatter(kmeans.centroids[:, 0], kmeans.centroids[:, 1], marker='*', s=200, c='r')
plt.show()
代码中,我们使用了 NumPy 和 Matplotlib 库来生成数据和可视化聚类结果。请注意,我们没有使用scikit-learn库中的k-means函数,而是自己编写了KMeans类来实现算法。
聚类是无监督学习中的重要算法,它可以帮助我们更好地理解和分析数据。k-means算法是一种基于距离度量的聚类算法,它的核心在于质心的选择和迭代优化。Python对于实现聚类算法非常方便,我们可以使用 NumPy 和 Matplotlib 库轻松地可视化聚类结果。