首页 > 编程知识 正文

聚类代码Python

时间:2023-11-20 12:10:19 阅读:292877 作者:GKKF

本文主要介绍如何用Python实现聚类功能。

一、K-Means聚类

K-Means聚类是一种基于距离度量的聚类算法。它的基本思路是,在样本数据集中随机选取K个点作为初始质心,然后根据到每个质心的距离将样本点划分为K个簇。接着计算每个簇的中心点,再将每个中心点作为新的质心,重复上述过程直到质心不再变化为止。

下面是K-Means聚类的Python实现代码:

import numpy as np

def k_means(data, n_clusters):
    n_samples = data.shape[0]
    # 随机选择初始质心
    centroids = data[np.random.choice(n_samples, n_clusters, replace=False)]
    # 根据距离划分簇
    while True:
        # 计算距离
        distances = np.sqrt(((data - centroids[:, np.newaxis])**2).sum(axis=2))
        # 分配簇
        labels = distances.argmin(axis=0)
        # 计算中心点
        new_centroids = np.array([data[labels == i].mean(axis=0) for i in range(n_clusters)])
        # 判断是否收敛
        if np.allclose(new_centroids, centroids):
            break
        centroids = new_centroids
    return labels

其中data是样本数据,n_clusters是簇的数目。通过调用k_means函数就可以得到样本的聚类结果。

二、层次聚类

层次聚类是一种基于树形结构的聚类算法。它的基本思路是将所有样本点都看作单独的簇,逐步合并相邻的簇直到所有样本点都属于同一个簇为止。

下面是层次聚类的Python实现代码:

from scipy.spatial.distance import pdist,squareform
from scipy.cluster.hierarchy import linkage,dendrogram

def hierarchical_clustering(data):
    # 计算距离矩阵
    dist_mat = pdist(data)
    # 构建簇之间的关系
    linkage_mat = linkage(dist_mat)
    # 根据关系构建树形图
    dendrogram(linkage_mat)

其中data是样本数据。通过调用hierarchical_clustering函数就可以得到样本的层次聚类结果,并将结果可视化为树形图。

三、DBSCAN聚类

DBSCAN聚类是一种基于密度的聚类算法。它的基本思路是,将“密度可达”的样本划分到同一个簇中,并将非核心样本归为噪声点。

下面是DBSCAN聚类的Python实现代码:

from sklearn.cluster import DBSCAN

def dbscan_clustering(data, eps=0.5, min_samples=5):
    # 训练模型
    model = DBSCAN(eps=eps, min_samples=min_samples)
    model.fit(data)
    # 获取簇标签
    labels = model.labels_
    # 去除噪声点
    labels[labels==-1] = max(labels)+1
    return labels

其中data是样本数据,eps是密度半径,min_samples是簇的最小样本数。通过调用dbscan_clustering函数就可以得到样本的DBSCAN聚类结果。

四、总结

本文介绍了K-Means聚类、层次聚类和DBSCAN聚类的Python实现方法。这些方法都是常用的聚类算法,在实际工作中具有广泛的应用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。