这篇博客开始另外一种聚类——层次聚类,层次聚类和K-Means是同一类的,属于划分聚类。

概述

层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止,传统的层次聚类算法主要分为两大类算法:

  • 凝聚的层次聚类:AGNES算法( AGglomerative NESting )=>采用自底向上的策略。 最初将每个对象作为一个簇,然后这些簇根据某些准则被一步一步合并,两个簇间的距离可以由这两个不同簇中距离最近的数据点的相似度来确定;聚类的合并过程反复进行直到所有的对象满足簇数目。
  • 分裂的层次聚类:DIANA算法(DIvisive ANALysis)=>采用自顶向下的策略(与二分k-means非常类似)。首先将所有对象置于一个簇中,然后按照某种既定的规则(聚类规则,如k-means)逐渐细分为越来越小的簇(比如最大的欧式距离),直到达到某个终结条件(簇数目或者簇距离达到阈值)。

AGNES和DIANA算法优缺点

  • 简单,理解容易
  • 合并点/分裂点选择不太容易
  • 合并/分类的操作不能进行撤销
  • 大数据集不太适合
  • 执行效率较低 O(t∗n2)O(t*n^2)O(t∗n2),t为迭代次数,n为样本点数

接下来着重看一下AGNES算法中簇间距离的合并策略

  1. 最小距离(SL聚类)
    两个聚簇中最近的两个样本之间的距离(single/word-linkage聚类法)
    最终得到模型容易形成链式结构
  2. 最大距离(CL聚类)
    两个聚簇中最远的两个样本的距离(complete-linkage聚类法)
    如果存在异常值,那么构建可能不太稳定
  3. 平均距离(AL聚类)
    两个聚簇中样本间两两距离的平均值(average-linkage聚类法)
    两个聚簇中样本间两两距离的中值(median-linkage聚类法)
    不同的合并策略

代码

当然这里也只是以AGNES为例。
API


参数

  • n_clusters:聚类数
  • affinity : string or callable, default: “euclidean”,距离度量公式,默认为欧式
  • memory:内存或磁盘文件,因为计算量比较大,比较耗内存
  • linkage : {“ward”, “complete”, “average”, “single”}, optional (default=”ward”),相似度度量方式

代码

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.cluster import AgglomerativeClustering
from sklearn.neighbors import kneighbors_graph ## KNN的K近邻计算
import sklearn.datasets as ds
import warnings## 设置属性防止中文乱码及拦截异常信息
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False
warnings.filterwarnings(action='ignore', category=UserWarning)## 模拟数据产生: 产生600条数据
np.random.seed(0)
n_clusters = 4
N = 1000
data1, y1 = ds.make_blobs(n_samples=N, n_features=2, centers=((-1, 1), (1, 1), (1, -1), (-1, -1)), random_state=0)n_noise = int(0.1*N)
r = np.random.rand(n_noise, 2)
min1, min2 = np.min(data1, axis=0)
max1, max2 = np.max(data1, axis=0)
r[:, 0] = r[:, 0] * (max1-min1) + min1
r[:, 1] = r[:, 1] * (max2-min2) + min2data1_noise = np.concatenate((data1, r), axis=0)
y1_noise = np.concatenate((y1, [4]*n_noise))
#拟合月牙形数据
data2, y2 = ds.make_moons(n_samples=N, noise=.05)
data2 = np.array(data2)
n_noise = int(0.1 * N)
r = np.random.rand(n_noise, 2)
min1, min2 = np.min(data2, axis=0)
max1, max2 = np.max(data2, axis=0)
r[:, 0] = r[:, 0] * (max1 - min1) + min1
r[:, 1] = r[:, 1] * (max2 - min2) + min2
data2_noise = np.concatenate((data2, r), axis=0)
y2_noise = np.concatenate((y2, [3] * n_noise))def expandBorder(a, b):d = (b - a) * 0.1return a-d, b+d## 画图
# 给定画图的颜色
cm = mpl.colors.ListedColormap(['#FF0000', '#00FF00',  '#0000FF', '#d8e507', '#F0F0F0'])
plt.figure(figsize=(14, 12), facecolor='w')
linkages = ("ward", "complete", "average")#把几种距离方法,放到list里,后面直接循环取值
for index, (n_clusters, data, y) in enumerate(((4, data1, y1), (4, data1_noise, y1_noise),(2, data2, y2), (2, data2_noise, y2_noise))):# 前面的两个4表示几行几列,第三个参数表示第几个子图(从1开始,从左往右数)plt.subplot(4, 4, 4*index+1)plt.scatter(data[:, 0], data[:, 1], c=y, cmap=cm)plt.title(u'原始数据', fontsize=17)plt.grid(b=True, ls=':')min1, min2 = np.min(data, axis=0)max1, max2 = np.max(data, axis=0)plt.xlim(expandBorder(min1, max1))plt.ylim(expandBorder(min2, max2))# 计算类别与类别的距离(只计算最接近的七个样本的距离) -- 希望在agens算法中,在计算过程中不需要重复性的计算点与点之间的距离connectivity = kneighbors_graph(data, n_neighbors=7, mode='distance', metric='minkowski', p=2, include_self=True)connectivity = (connectivity + connectivity.T)for i, linkage in enumerate(linkages):##进行建模,并传值print(n_clusters)ac = AgglomerativeClustering(n_clusters=n_clusters, affinity='euclidean',connectivity=connectivity, linkage=linkage)ac.fit(data)y = ac.labels_plt.subplot(4, 4, i+2+4*index)plt.scatter(data[:, 0], data[:, 1], c=y, cmap=cm)plt.title(linkage, fontsize=17)plt.grid(b=True, ls=':')plt.xlim(expandBorder(min1, max1))plt.ylim(expandBorder(min2, max2))plt.suptitle(u'AGNES层次聚类的不同合并策略', fontsize=30)
plt.tight_layout(0.5, rect=(0, 0, 1, 0.95))
plt.show()

4
4
4
4
4
4
2
2
2
2
2
2

最后看一下效果图:

机器学习(聚类六)——层次聚类相关推荐

  1. 【机器学习】聚类【Ⅴ】密度聚类与层次聚类

    主要来自周志华<机器学习>一书,数学推导主要来自简书博主"形式运算"的原创博客,包含自己的理解. 有任何的书写错误.排版错误.概念错误等,希望大家包含指正. 由于字数限 ...

  2. 【火炉炼AI】机器学习023-使用层次聚类算法构建模型

    [火炉炼AI]机器学习023-使用层次聚类算法构建模型 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotli ...

  3. 【进阶版】 机器学习之K均值聚类、层次聚类、密度聚类、实战项目含代码(15)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 项目要求 数据透视 代码实战 维度太多,利用PCA降维的思想进 ...

  4. Python计算机视觉编程第六章——图像聚类(K-means聚类,DBSCAN聚类,层次聚类,谱聚类,PCA主成分分析)

    Python计算机视觉编程 图像聚类 (一)K-means 聚类 1.1 SciPy 聚类包 1.2 图像聚类 1.1 在主成分上可视化图像 1.1 像素聚类 (二)层次聚类 (三)谱聚类 图像聚类 ...

  5. 聚类之层次聚类、基于划分的聚类(…

    5.聚类之层次聚类.基于划分的聚类(k-means).基于密度的聚类.基于模型的聚类 目录(?)[-] 1.      一层次聚类 1.      层次聚类的原理及分类 2.      层次聚类的流程 ...

  6. KMEANS均值聚类和层次聚类:亚洲国家地区生活幸福质量异同可视化分析和选择最佳聚类数...

    阅读全文:http://tecdat.cn/?p=24198 <世界幸福报告>是可持续发展解决方案网络的年度报告,该报告使用盖洛普世界民意调查的调查结果研究了150多个国家/地区的生活质量 ...

  7. 使用MATLAB进行K-means聚类和层次聚类

    1.分别使用k-means聚类和层次聚类,将以下八个点分为3个类簇.A1=(2,10),A2=(2,5),A3=(8,4),A4=(5,8),A5=(7,5), A6=(6,4), A7=(1,2), ...

  8. 聚类(2)——层次聚类 Hierarchical Clustering

    聚类系列: 聚类(序)----监督学习与无监督学习 聚类(1)----混合高斯模型 Gaussian Mixture Model 聚类(2)----层次聚类 Hierarchical Clusteri ...

  9. 【R】【密度聚类、层次聚类、期望最大化聚类】

    文章目录 1.对数据集进行加载.预处理集可视化 1.1 加载数据集 1.2 数据预处理 1.3 将样本点进行可视化 2.密度聚类(DBSCAN 算法) 2.1 加载程序包 2.2 设置聚类参数阈值并可 ...

  10. 说话人聚类--谱聚类和层次聚类

    谱聚类和层次聚类 在讯飞实习了一个月了,做了点说话人聚类的工作,现在总结一下主要用到的谱聚类和层次聚类. 层次聚类 在层次聚类这块,我主要学习了 凝聚型层次聚类和 BIRCH方法,主要参考的博客有 [ ...

最新文章

  1. mariadb mysql同步_mysql/mariadb 主从复制实现数据库同步
  2. python多线程爬取图片
  3. 星辰大海:华为用“鲲鹏+昇腾”计算双擎再出发
  4. c++ 返回数组中最大的值_Swift语言必学秘技:数组里面的使用方法
  5. Spring Cloud 设置Feign的日志记录级别
  6. 新手入坑自动驾驶,从 JetBot 机器人小车开始,能学到什么?
  7. 中文分词:采用二元词图以及viterbi算法(三)
  8. MYSQL索引优化(索引失效场景)
  9. 使用protues仿真stm32教程
  10. PHP + Apache + Mysql集成环境部署及简要教程
  11. zheng:环境搭建及项目部署
  12. 整流二极管的细节分析
  13. 大学四年·写于离校前
  14. html 刷新表格数据,当我刷新页面时在html表格上重复数据
  15. 【Linux】Rsync基于SSH认证的使用(rsync 命令属于1 v 4 的命令、rsync常用参数基本用法)
  16. 日本向英国及欧盟发出要求,称英国脱欧不可对云服务造成影响
  17. 《弃子长安》第八章 昨日黄花
  18. Windows11怎么配置Java环境变量
  19. ensp 单臂路由的配置
  20. 老罗锤子手机发布会,我感到深深地愧疚!

热门文章

  1. 服务器鼠标键盘进系统不能用,笔记本开机后鼠标键盘都不能用了怎么办?
  2. bochs运行xp_在bochs虚拟机中安装WindowsXP (学习)
  3. 财经大数据可视化Vdc平台_大数据时代-可视化数据分析平台必不可少
  4. 3*3旋转矩阵得到旋转角(c++代码)
  5. 轻量级web api_API接口管理,这15种开源工具助你管理API
  6. Ubuntu 18.04联网问题(已解决)
  7. 数据结构与算法之排序篇(下)
  8. 如何运用dos命令进入C盘?Dos常用命令大全
  9. Ps学习(色彩范围工具使用和多边形抠图案例)
  10. Elasticsearch.service failed after enable elasticsearch security features