层次聚类hierarchical clustering

层次聚类从形式上分可以分成两种,一种是凝聚(Agglomerative),一种是分割(Divisive)。凝聚是指把每个元素开始时都看成一个单独的簇(类别),然后进行聚合,将两个元素合成一类,不断重复,最终将它形成一个簇。分割反过来,将所有元素看成一个大类,不断进行分割。

 

最简单也最流行的层次聚类就是Agglomerative,它的逻辑非常简单,就是计算每个元素到其它所有元素的距离,然后做出矩阵,合并距离最近的两个集群,直到合并成一个簇,此时可以建立系统树图(如右图),系统树图的横坐标表示元素编号,纵坐标表示距离。想要分成几个类从指定的位置切割树即可。

两个点的距离非常容易计算,但是两个簇的距离应该如何计算呢?

如果像这样取簇中距离最小值的两个点(min,single link),优势是可以处理非椭圆形的形状,但同时这种方法对噪声更敏感。

 

如果取簇中距离最大值的两个点,其优势是对噪音不敏感,但同时它有破坏大型簇的趋势,而且形成的簇偏向于球形星团(globular cluster)

 

 

取每个簇的平均位置(group average)固然是一个好方法,其优势是对噪音不敏感,但是形成的簇依旧偏向于球形星团(globular cluster)

Ward’s Method

基于簇之间的平方误差(squared error)

不易受噪声和异常值的影响

偏向于球形星团

可以用ward方法进行层次聚类,找到中心,再把中心带到kmean中计算

 

 

 

最常见的AgglomerativeClustering用法

#使用pandas读取csv文件
import pandas as pd
cash=pd.read_csv('BanknoteData.csv')



from sklearn.cluster import AgglomerativeClustering
#确定分成两类
hc_alg = AgglomerativeClustering(n_clusters=2).fit(cash)
#在cash中增加一列class,将预测结果加入其中
cash['Class']=hc_alg.labels_

 

linkage属性分析:

class sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=’euclidean’, memory=None, connectivity=None, compute_full_tree=’auto’, linkage=’ward’,pooling_func=’deprecated’, distance_threshold=None)

linkage : {“ward”, “complete”, “average”, “single”}, 默认为”ward”,其他可选值还包括"average","single"(就是最小值),和"complete"(最大值)

 

 

参考资料

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值