聚类(六)—— 聚类评估

主要内容
聚类分析概述
K-Means聚类
层次聚类
基于密度的聚类
其他聚类方法
聚类评估
小结

六、聚类评估

聚类评估用于对在数据集上进行聚类的可行性和被聚类方法产生的结果的质量进行评估。聚类评估主要包括以下任务。
1.估计聚类趋势
2.确定数据集中的划分簇数
3.测定聚类质量

聚类趋势的估计
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)
在这里插入图片描述
如果D是均匀分布的,H接近0.5。

聚类簇数的确定

找出正确的簇数依赖于数据集分布的形状和尺度,也依赖于用户要求的聚类分辨率。有许多估计簇数的可能方法。这里简略介绍几种简单但流行和有效的方法。
在这里插入图片描述

它基于如下观察:增加簇数有助于降低每个簇的簇内方差之和。这是因为有更多的簇可以捕获更细的数据对象簇,簇中对象之间更为相似。然而,如果形成太多的簇,则降低簇内方差和的边缘效应可能下降,因为把一个凝聚的簇分裂成两个簇只能使簇内方差和的稍微降低。因此,一种选择正确的簇数启发式方法是使用簇内方差和关于簇数曲线的拐点

聚类质量的测定

1.外在方法

有许多度量(如熵、纯度、精度、召回率和F度量)用来评估分类模型的性能。对于分类,度量预测的类标号与实际类标号的对应程度。但是这些度量通过使用簇标号而不是预测的类标号,不需要做较大的改变。

兰德系数RI 和ARI:
在这里插入图片描述

a表示表示在实际类别信息与聚类结果中都是同类别的元素对数,b表示在实际类别信息与聚类结果中都是不同类别的元素对数,分母表示数据集中可以组成的总元素对数。

兰德系数的值在[0,1]之间,当聚类结果完美匹配时,兰德系数为1。对于随机结果,RI并不能保证分数接近零。为了实现“在聚类结果随机产生的情况下,指标应该接近零”,调整兰德系数(Adjusted rand index)被提出,它具有更高的区分度。

在这里插入图片描述
ARI取值范围为[-1,1],负数代表结果不好,值越大意味着聚类结果与真实情况越吻合。ARI可用于聚类算法之间的比较。

sklearn中的ARI计算

from sklearn import metrics
labels_true = [0,0,0,1,1,1]
labels_pred = [0,0,1,1,2,2]
print(metrics.adjusted_rand_score(labels_true,labels_pred))

0.24242424242424243

2.内在方法

内在方法用于没有基准可用时的聚类质量评估,通过考察簇的分离情况和簇的紧凑度进行聚类评估。

在这里插入图片描述
在这里插入图片描述
sklearn中通过sklearn.metrics.silhouette_score()方法计算聚类的轮廓系数。

对Iris数据聚类并计算轮廓系数。

import numpy as np
from sklearn.cluster import KMeans
from sklearn import metrics
from sklearn.metrics import silhouette_score
from sklearn.datasets import load_iris  # 导入数据集iris
X = load_iris().data  # 载入数据集
kmeans_model = KMeans(n_clusters=3,random_state=1).fit(X)
labels = kmeans_model.labels_
metrics.silhouette_score(X,labels,metric='euclidean')

0.5528190123564091

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
层次聚类分析是一种基于距离度量的聚类算法,它通过计算不同样本之间的距离,将样本逐步合并为越来越大的,直至达到预设的聚类数量或者满足某种条件为止。 在基站定位数据商圈分析中,我们可以将商圈看作是一个点集合,每个点表示商圈中心的位置。我们可以使用层次聚类分析对这些点进行聚类,从而发现不同的商圈、商圈之间的相似性以及热门商圈的分布情况。 下面是一个使用Python进行层次聚类分析的示例代码: ```python import pandas as pd import numpy as np from scipy.spatial.distance import pdist, squareform from scipy.cluster.hierarchy import linkage, dendrogram # 读取商圈数据 df = pd.read_csv('business_districts.csv') # 计算商圈之间的距离矩阵 dist_matrix = pdist(df.iloc[:, 1:], metric='euclidean') # 使用Ward方法进行层次聚类 linkage_matrix = linkage(dist_matrix, method='ward') # 绘制树状图 dendrogram(linkage_matrix) # 显示结果 plt.show() ``` 在上面的代码中,我们首先读取了商圈数据,并计算了商圈之间的欧几里得距离矩阵。然后使用Ward方法进行层次聚类,并绘制了树状图。 树状图可以帮助我们直观地了解聚类结果,其中每个叶节点表示一个商圈,不同颜色的线段表示不同的。我们可以根据树状图中的切割点,将商圈分成不同的,从而得到不同的商圈群组。 除了树状图,我们还可以使用其他的聚类评估指标,如轮廓系数、Calinski-Harabasz指数等,来评估聚类结果的质量。最终,我们可以根据聚类结果,进一步分析商圈的特点和分布情况,为商业决策提供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shi_jiaye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值