两个聚类算法一次打包!AgglomerativeClustering和DBSCAN

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

sklearn库中的两个聚类算法:AgglomerativeClustering和DBSCAN都是基于密度的聚类算法,它们的聚类过程不需要事先定义聚类数量k


提示:以下是本篇文章正文内容,下面案例可供参考

一,介绍二者

1,AgglomerativeClustering是什么?
AgglomerativeClustering是一种凝聚层次聚类算法,每个数据点最初都被视为一个单独的簇,然后将最相似的簇合并,继续合并直到达到要求的簇数或者遇到合并阈值。该算法的效果受距离度量、合并策略以及定义簇数量的方式等参数影响。常用的距离度量有欧几里得距离、曼哈顿距离和余弦相似度等,常用的合并策略有ward、complete、average、single等,定义簇数量的方式则可以是提前设定好的固定数量,也可以是根据合并高度定义簇数量
2,DBSCAN是什么?
DBSCAN是一种基于密度的聚类算法,将被聚类的数据集看做由一些高密度区域和低密度区域组成。通过在距离小于一定半径内的样本点数目来刻画样本点的密度,在高密度区域内产生足够的密度联系并把它们分为一个簇,而将高密度区域和低密度区域的噪声数据点分开。该算法只需要设定两个参数eps和min_samples,其中eps表示一个样本的邻域半径大小,min_samples表示邻域内最少的样本点数量,即可自动发现不同形状和大小的簇

二、使用步骤

1.引入库

代码如下(示例):

from sklearn.cluster import DBSCAN,AgglomerativeClustering

2.读入数据

1,使用DBSCAN算法对数据集X进行聚类,并用散点图展示聚类结果
代码如下(示例):

y_pred = DBSCAN(eps = 0.05, min_samples = 10).fit_predict(X)

这段代码使用了DBSCAN算法对数据集X进行聚类,其中eps代表邻域半径,min_samples代表密度阈值。fit_predict()方法将数据集X作为输入并返回预测的聚类标签。具体地,如果数据点属于一个聚类,它将被分配一个非负整数标签。如果数据点不属于任何聚类,则将其分配为-1。本代码中的聚类结果将存储在y_pred中。


2,使用了AgglomerativeClustering算法对数据集X进行聚类,并将聚类标签保存在y_pred数组中

y_pred = DBSCAN(eps = 0.05, min_samples = 10).fit_predict(X)

这段代码使用了DBSCAN算法对数据集X进行聚类。其中eps参数表示邻域半径的大小,min_samples参数表示一个簇中至少需要的数据点数。fit_predict()方法将X作为输入进行聚类并返回每个数据点的聚类标签,这些标签将被存储在y_pred中。DBSCAN算法可以将密集的数据点聚合为一个簇,并将低密度区域划分为噪声点,因此y_pred中的标签可以被视为对X中数据点的“聚类/噪声”分类结果。在一些实际场景中,这种结果的使用相当普遍,例如异常检测和离群点检测等。需要注意的是,该算法在不同的数据集上产生不同的聚类效果,用户需要通过多次尝试不同的参数,才能找到最佳聚类结果。


三、全部源码(包含轮廓系数(silhouette_score)对聚类结果进行了评价)

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, metrics
# 以下代码使用了sklearn库中的两个聚类算法:
from sklearn.cluster import DBSCAN,AgglomerativeClustering


# 生成了两个数据集X1, y1和X2, y2,将它们连接起来形成一个新的数据集X

# 使用sklearn库中的datasets模块中的make_circles函数生成了一个环形数据集
X1, y1=datasets.make_circles(n_samples=500, factor=.6,noise=.08)
'''
n_samples参数指定生成的样本数
factor参数指定内部圆环与外部圆环之间的间距
noise参数指定在数据点中添加的高斯噪声的标准差大小
'''
X2, y2 = datasets.make_blobs(n_samples=1000, n_features=2, centers=[[1.2,1.2]], cluster_std=[[.3]],random_state=9)
X = np.concatenate((X1, X2))
# 用散点图展示了数据集X中的数据点
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()
from sklearn.cluster import AgglomerativeClustering
y_pred = AgglomerativeClustering(n_clusters=3,affinity="cosine",linkage="average").fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
score = metrics.silhouette_score(X, y_pred, metric='euclidean', sample_size=len(X))
print(score)

# 使用DBSCAN算法对数据集X进行聚类,并用散点图展示聚类结果
y_pred = DBSCAN(eps = 0.05, min_samples = 10).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

# 最后,使用轮廓系数(silhouette_score)对聚类结果进行了评价,并打印出了评价结果
score = metrics.silhouette_score(X, y_pred, metric='euclidean', sample_size=len(X))
print(score)

总结

AgglomerativeClustering是基于层次的聚类算法。该算法从每个数据点开始,逐渐将数据点合并为越来越大的簇。该算法的优点在于可以通过设置不同的合并策略(如单连接,完全连接等)来适应不同形状和大小的簇。但是,AgglomerativeClustering在处理大规模数据时可能会变得相当耗时。

DBSCAN是一种基于密度的聚类算法。该算法通过从具有足够密度的数据点开始,来查找簇。密度低于一定阈值的数据点会被排除在外。该算法可以找到任意形状的簇,且不需要指定簇的数量。但是,DBSCAN算法对参数的选择比较敏感,需要谨慎设置邻域半径和密度阈值。

总之,AgglomerativeClustering和DBSCAN都具有自己的特点和优点。使用哪种算法将取决于数据集的特征以及用户的实际需求。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值