数据挖掘与机器学习DM&ML(part 8)聚类分析Clustering&K-Means

聚类: 无监督数据挖掘技术

典型应用

营销:帮助营销人员根据相似的购买模式对客户进行细分,然后利用这些知识制定有针对性的营销计划
保险:确定平均索赔成本较高的汽车保险投保人群体
图像处理:压缩图像-预处理步骤:为进一步建模确定组别-执行聚类,然后按组别进行回归

图像压缩:柯霍能矢量量化 Image compression: Kohonen vector quantization

示例:罗纳德-费舍尔爵士(1890-1962 年)

左 = 1024 x 1024 灰度图像,每像素 8 位,存储容量 1MB

中 = 2x2 块 VQ,使用 k=200 个簇,存储容量 245KB

右 = 2x2 块 VQ,使用 k=4 个簇,存储容量 64KB

聚类分析(分割) Cluster Analysis

将病例集合分成若干子集,使得--每个聚类中的病例往往彼此相似--不同聚类中的病例往往彼此不同

思考:病例在什么意义上相似?

聚类方法的类型

两种主要聚类方法:层次式:创建嵌套聚类;局部式:创建一组聚类

其他聚类方法--密度式--基于密度概念;网格式--基于多级网格结构;模型式--为每个聚类假设一个模型,其目的是找到最适合彼此的模型

K-Mean 聚类

第 0 步:
指定聚类的数量(k)
选择 k 个初始聚类种子(聚类中心)

第 1 步:
将最接近种子 i 的数据点分配给聚类 i,i=1,...,k
用分配到该聚类中的数据点的平均值替换每个聚类种子

第 2 步:
将最接近新种子 i 的数据点重新分配给聚类 i,i=1,...,k
将每个聚类中的数据点的平均值作为新的聚类种子

这个过程可以进一步迭代,直到收敛。
 

相似性

距离度量-好的距离度量:-非负性:d(x,y)>=0

对称性:d(x,y)=d(y,x)

三角形不等式:d(x,y)<=d(x,z)+d(z,y)

同一性:当且仅当 x=y 时,d(x,y)=0

 一些距离测量方法

欧几里得距离-使用最广泛-形成的聚类形状多为球形

曼哈顿(城市街区)距离-形成的聚类形状多为立方体

对 K-Means 的评论

优点:相对计算效率高:O(tkn),其中 n 是案例数量,k 是聚类数量,t 是迭代次数。通常,k 和 t 远小于 n。

缺点:需要提前指定 k,即聚类的数量。
经常在局部最优解终止。需要尝试不同的初始聚类中心。
无法处理噪声数据和异常值。
当聚类具有不同的大小、密度和非凸形状时,会出现问题。

分层聚类方法

 创建在早期迭代中分层嵌套的聚类

两种类型:

分裂式(自顶向下)分层聚类:
最初所有数据点都在一个聚类中
递归地将聚类分裂成两个更小的聚类(例如,k-means 聚类)

凝聚式(自底向上)分层聚类:
最初每个数据点都有自己的聚类
递归地合并两个“最近”的聚类
如何测量两个聚类之间的距离?

分层聚类不需要预先指定聚类的数量(k),但需要一个终止条件。
 

树状图(Dendrogram)

  • 每个层次展示了该层次的聚类。
  • 叶子(Leaf)- 代表单个的聚类。
  • 根(Root)- 代表一个聚类,包含所有数据点。
  • 在第 i 层的聚类是第 i+1 层的子聚类的联合。

图片中的树状图示例展示了数据点 A、B、C、D、E 和 F 如何逐步合并成更大的聚类。在树状图的底部,每个字母代表一个单独的数据点或叶子节点。随着层次的提升,这些叶子节点开始合并成更大的聚类。例如,A 和 B 首先合并,然后与 C 合并,以此类推,直到所有数据点合并成顶部的根节点,表示所有数据点组成的单一聚类。

在树状图中,水平线的长度表示聚类之间的距离或差异。线条越长,表示聚类之间的差异越大。通过选择一个水平切割线,可以确定在特定距离阈值下聚类的数量。

例:代码实现一个dendroram
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

from scipy.cluster.hierarchy import dendrogram, linkage

# 假设data是你的数据集
data = [[1, 2], [3, 4], [5, 8], [7, 8], [9, 10], [11, 12]]

# 使用linkage函数进行分层聚类
linked = linkage(data, 'ward')

# 绘制树状图
dendrogram(linked,
           orientation='top',
           labels=[f'点{i+1}' for i in range(len(data))],
           distance_sort='descending',
           show_leaf_counts=True)

plt.show()

 

分层聚类中的问题

  • 平均链接(Average linkage)、质心(Centroid)、Ward 方法相对于单一链接(Single linkage)和完全链接(Complete linkage)方法更可取,因为它们对异常值相对不敏感。

  • 平均链接倾向于合并具有小方差的聚类,并且它稍微偏向于产生具有相同方差的聚类。

  • 质心方法对异常值的鲁棒性比大多数其他分层方法更强,但在其他方面可能不如 Ward 方法或平均链接表现好。

  • Ward 方法倾向于合并观察数量较少的聚类,并且它强烈偏向于产生观察数量大致相同的聚类。

这些链接方法在分层聚类中用于计算聚类之间的距离,每种方法都有其特点和适用场景。

选择哪种方法取决于数据的特性和聚类分析的目标。例如,如果数据中异常值较多,可能会选择对异常值不敏感的方法,如平均链接或质心方法。如果希望聚类具有相似的观察数量,可能会选择 Ward 方法。

聚类中的数据准备

数据编码--离散输入--间隔输入--混合输入--缺失值

变量选择 

在聚类分析中如何处理区间型数据的准备工作

聚类中的数据准备:区间型输入:方差较大的变量倾向于对结果聚类有更大的影响,相比于方差较小的变量。解决方法:
 

对区间型变量应用对数变换也可以减少方差。

使用分箱转换将区间型变量转换为序数型变量。解释:
范围缩放:通过将每个数据点除以数据范围(最大值减最小值)来缩放数据,使得数据落在0和1之间。这种方法保留了数据的相对差异,但不会改变数据的分布形状。
标准差缩放:通过将每个数据点除以标准差来缩放数据,使得数据具有零均值和单位方差。这种方法有助于消除不同量级变量之间的影响,但可能会受到异常值的影响。
对数变换:对数变换可以减少数据的偏态,使得数据更接近正态分布,从而减少方差。
分箱转换:将连续的区间型数据分割成若干个区间(或“箱”),并为每个区间分配一个类别标签,从而将区间型变量转换为序数型变量。

在聚类分析中,对数据进行适当的缩放和转换是非常重要的,因为大多数聚类算法对数据的尺度和分布非常敏感。正确的数据准备可以提高聚类结果的质量和可解释性。

解释聚类

给定 k 个聚类,这些聚类代表什么?

命名聚类的方法:

检查聚类的质心(均值)
执行聚类分析
描述基于相关变量的已识别聚类之间的差异
这可以通过使用以下方法完成:按聚类划分的某些变量的均值、饼图/条形图+分类树(预测聚类成员资格)

质心(均值):聚类的质心是聚类中所有点的平均位置,可以代表聚类的特征。
聚类分析:聚类分析是详细检查聚类特征的过程,以理解每个聚类的意义。
均值、饼图/条形图:通过可视化每个聚类中某些变量的均值或分布,可以帮助理解不同聚类的特点。
分类树:使用分类树可以帮助预测数据点可能属于哪个聚类,这有助于理解聚类成员的分类规则。

在聚类分析中,解释聚类的意义是非常重要的一步,它有助于将数据中的模式转化为可操作的洞察。通过理解每个聚类的特征,可以更好地应用聚类结果来解决实际问题。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值