一、层次聚类

层次聚类是无监督学习方法,可对给定的N个待聚类的样本进行层次的分类,直到某种条件(类的个数、类间的距离超过某个阈值)满足为止。

1、层次聚类的划分

对于层次聚类,可具体分为:

a. 凝聚的(agglomerative)层次聚类:

采用自底向上的策略:先将每个样本作为一个簇(类),然后不断地计算各个类之间的相似度/距离、并合并最相近的两个类成一个大类,直到某个终止条件满足为止。(可与哈夫曼编码算法作类比)

b. 分裂的(divisive)层次聚类:

采用自顶向下的策略,先将所有样本置于一个簇(类)中,然后根据一些原则逐渐细分为越来越小的类,直到某个终止条件满足为止。(可与决策树算法作类比)

2、类间的距离

在整个聚类的过程中,往往需要计算两个类的距离来进行凝聚/分隔的操作或者停止迭代的操作。判断两个类之间的距离/相似度可有以下三种方法:

a. SingleLinkage/Nearest-Neighbor:

取两个类中距离最近的两个样本的距离作为这两个类的距离。即最近两个样本之间的距离越小,这两个类的距离就越小。这种计算方法可能导致聚类的结果比较松散,且这种松散的效应会越来越大。比如当两个类总体上离得比较远,但却有对个别的点比较接近的情况。

b. CompleteLinkage:

取两个集合中距离最远的两个点的距离作为这两个类的距离,是SingleLinkage的反面极端情况。这种计算方法可能导致两个类因为个别的点而无法合并成一个类。

c. Average-linkage:

取两个类中的点两两的距离全部加在一起求平均值。这种方法得到的结果可能会受到个别点两两的距离的影响(偏大/偏小)。

d. Median-linkage / UCLUS:

median-linkage是average-linkage的一个变种,取两个类中的点两两的距离全部加在一起取中值作为两个类的距离。取中值与取均值相比,更加能够减少个人偏移样本对结果的干扰。

e. Centroids:

先分别计算出两个类的聚类中心,再取两个聚类中心的距离作为两个类的距离。

f. Ward’s method

假设先将两个类进行合并,得到合并后那个新cluster的均值点;再计算两个类中的每个点x到均值点的距离,再平方后加起来的结果即两个类的距离。

公式表示为 ,其中 为合并后那个新cluster的中心点(均值点)

二、代码示例:

from sklearn.datasets.samples_generator import make_moons
X,y_true = make_moons(n_samples=1000,noise=0.05)
import matplotlib.pyplot as plt
plt.scatter(X[:,0],X[:,1],c=y_true)
plt.show()

from sklearn.cluster import AgglomerativeClustering
import time
t0 = time.time()
ward  = AgglomerativeClustering(n_clusters=2,affinity='euclidean',linkage='ward',compute_full_tree='false').fit(X)
t = time.time() - t0
plt.scatter(X[:, 0], X[:, 1], c=ward.labels_)
plt.title('time : %f'%t)
plt.show()

from sklearn.cluster import KMeans
t0 = time.time()
kmeans = KMeans(init = 'k-means++',n_clusters=2, random_state=8).fit(X)
t = time.time() - t0
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.title('time : %f'%t)
plt.show()

不难看出:基于距离的聚类算法(划分聚类、层次聚类),一般很难发现非凸形状的集合或者大小差别很大的集合。

机器学习之层次聚类及代码示例相关推荐

  1. 机器学习之密度聚类及代码示例

    一.密度聚类 密度聚类的思想,在于通过计算样本点的密度的大小来实现一个簇/类别的形成,样本点密度越大,越容易形成一个类,从而实现聚类. 密度聚类算法可以克服基于距离的聚类算法只能发现凸型集合的缺点,其 ...

  2. 机器学习实战——层次聚类算法

    机器学习实战--层次聚类算法 1 层次聚类概述 2 sklearn中的实现 1 层次聚类概述 层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构. 数据集的划分可采用"自底向上& ...

  3. 层次聚类python实现_Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法. 其原理是:最初将每个 ...

  4. 层次聚类 matlab代码_聚类算法解析一

    01 概述 本次针对聚类算法进行讲解,因为内容较多,会分多篇文章进行讲解,主要的内容包括聚类算法的整体介绍,针对不同类别的聚类算法比如划分聚类.层次聚类.密度聚类等算法进行介绍,在讲解每类算法时会结合 ...

  5. 聚类算法 距离矩阵_机器学习基础-层次聚类

    层次聚类(Hierarchical clustering) 何时使用? 当我们希望进一步挖掘观测数据的潜在关系,可以使用层次聚类算法. 工作方式 首先我们会计算距离矩阵(distance matrix ...

  6. Java集合的接口和类层次结构图以及代码示例

    1. Collection vs Collections 首先,"Collection"和"Collections"是两个不同的概念.正如你从下面结构图看到的, ...

  7. 【Python机器学习】层次聚类AGNES、二分K-Means算法的讲解及实战演示(图文解释 附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 层次聚类 在聚类算法中,有一类研究执行过程的算法,它们以其他聚类算法为基础,通过不同的运用方式试图达到提高效率,避免局部最优等目的,这类算法主要有 ...

  8. 层次聚类python代码_python实现层次聚类

    BAFIMINARMTO BA0662877255412996 FI6620295468268400 MI8772950754564138 NA2554687540219869 RM412268564 ...

  9. 层次聚类及scipy中的层次聚类python代码解释

    层次聚类假设类别之间存在层次结构,将样本聚到层次化的类中.层次聚类分为自下而上.自上而下聚类的两种方法.由于每个样本只能属于一个类别,因此层次聚类属于硬聚类. 基本原理(本文只讲述自下而上的聚合方法) ...

  10. Python机器学习——Agglomerative层次聚类

    层次聚类(hierarchical clustering)可在不同层次上对数据集进行划分,形成树状的聚类结构.AggregativeClustering是一种常用的层次聚类算法.    其原理是:最初 ...

最新文章

  1. RHCS创建高可用性群集Apache服务器
  2. 蚂蚁面试:字符串在JVM中如何存放?
  3. AVS3关键技术、性能和复杂度分析
  4. android n模拟器,BlueStacks推出Android N模拟器
  5. android 百分数与进度显示
  6. OpenGL6-纹理动画
  7. #Python语言程序设计Demo - 七段数码管绘制
  8. 基于行为树的高级游戏AI教程
  9. 利用excel和word批量制作标签
  10. 微信小程序体验版打开调试模式才能正常调用接口问题
  11. color 常用色值
  12. 记录FinalShell退格键
  13. 笔记本外接显示器没有声音
  14. 简述利用假脱机技术实现打印机共享的基本处理过程
  15. 列出对象属性,for(var i in obj)
  16. linux键盘错位1格,键盘按键错乱,教您修复键盘按键错乱的方法
  17. 《“胡”说IC——菜鸟工程师完美进阶》
  18. 安装nodejs教程
  19. 千叶县政府将在2020年东京奥运会和残奥会期间推出虚拟旅游体验
  20. 点云孔洞定位_一种对具有孔洞的三维点云的检测与识别方法与流程

热门文章

  1. xmr-stak compile
  2. 巴厘岛最全的美食攻略
  3. html超链接调用js函数,在html中引入外部js文件,并调用带参函数的方法
  4. 小学四年级计算机在线考试,小学信息技术四年级下册试题.DOC
  5. Interview Tips with Consulting Firms
  6. 入门:安装Python
  7. 二手房各项税费计算公式
  8. walking机器人仿真教程-激光导航-TEB算法导航
  9. Pr全套视频教程 PR 全套零基础从入门到精通视频教程
  10. 用pdftocairo将PDF图片转成svg矢量图