0 前言

本人计算机研二,专业带队数学建模,长期更新建模教学,有需要的同学欢迎讨论~
本篇文章,本系列学长讲解一部分数学建模常用算法,会陆续更新每个算法的详细实现和使用教程

1 BIRCH算法概述

BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)在设计之初就考虑到了大规模数据集上聚类的精确性(充分利用有限内存保证好的聚类效果)和最小化I/O代价(减少数据库的读写,保证效率)之间的均衡。BIRCH能够识别出数据集中数据分布的不均衡性,将分布在稠密区域中的点聚类,将分布在稀疏区域中的点视作异常点而移除。此外,BIRCH是一种增量聚类方法,针对每一个点的聚类决策都是基于当前已经处理过的数据点,而不是全局的数据点。

2 一些重要概念


3 BIRCH算法流程

整个算法的实现分为四个阶段:

  • (1)扫描所有数据,建立初始化的CF树,把稠密数据分成簇,稀疏数据作为孤立点对待

  • (2)这个阶段是可选的,阶段3的全局或半全局聚类算法有着输入范围的要求,以达到速度与质量的要求,所以此阶段在阶段1的基础上,建立一个更小的CF树

  • (3)补救由于输入顺序和页面大小带来的分裂,使用全局/半全局算法对全部叶节点进行聚类

  • (4)这个阶段也是可选的,把阶段3的中心点作为种子,将数据点重新分配到最近的种子上,保证重复数据分到同一个簇中,同时添加簇标签

4 算法实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import Birch
from sklearn import metrics##############################################
#                     生成数据
##############################################
# X为样本特征,Y为样本簇类别
# 共1000个样本,每个样本2个特征
# 共4个簇,簇中心在[-1,-1], [0,0],[1,1], [2,2]
# 每个类别的方差分别为0.4, 0.3, 0.4, 0.3
X, y = make_blobs(n_samples=1000, n_features=2, centers = [[-1,-1], [0,0], [1,1], [2,2]], cluster_std = [0.4, 0.3, 0.4, 0.3], random_state=9)##############################################
#                     开始聚类
##############################################
# 尝试多个threshold取值,和多个branching_factor取值
param_grid = {'threshold': [0.1, 0.3, 0.5],
'branching_factor': [10, 20, 50]}
CH_all = []
X_all = []
y_all = []
paras_all = []
# 网格搜索方法
print("Threshold\tBranching factor\tMetrics")
for threshold in param_grid['threshold']:for branching_factor in param_grid['branching_factor']:clf = Birch(n_clusters = 4, threshold = threshold, branching_factor = branching_factor)clf.fit(X)X_all.append(X)y_pred = clf.predict(X)y_all.append(y_pred)CH = metrics.calinski_harabaz_score(X, y_pred)CH_all.append(CH)paras_all.append([threshold, branching_factor])print(threshold, "\t", branching_factor, "\t", '%.4f'%CH)##############################################
#                     择优
##############################################
CH_max = max(CH_all)
idx = CH_all.index(CH_max)
X_max = X_all[idx]
y_max = y_all[idx]##############################################
#                     绘图
##############################################
plt.rcParams['font.sans-serif'] = ['Times New Roman']
plt.rcParams['axes.unicode_minus'] = Falseplt.figure()
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], marker = 'o', c = y)
plt.title('Original Cluster Plot')
plt.xlabel('(1)')plt.subplot(1, 2, 2)
plt.scatter(X_max[:, 0], X_max[:, 1], marker = 'o', c = y_max)
plt.title('Result (Threshold = ' + str(paras_all[idx][0])+ ', BF = ' + str(paras_all[idx][1]) + ')')
plt.xlabel('(2)')plt.show()

最后

数学建模精选资料共享,研究生学长数模指导,建模比赛思路分享,关注我不迷路!

建模指导,比赛协助,有问必答,欢迎打扰

数学建模教学:常用算法 --- BIRCH-层次聚类算法相关推荐

  1. 聚类算法之层次聚类算法和应用举例

    聚类算法之层次聚类算法和应用举例 1.假设有N个待聚类的样本,对于层次聚类来说,步骤: 1.(初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度: 2.寻找各个类之间最近 ...

  2. 【聚类算法】层次聚类算法

    目录 定义 样例 算法 Single Linkage Complete Linkage Average Linkage Centroid Linkage Ward 总结 定义 这个算法可以分为两部分理 ...

  3. R实现K均值算法,层次聚类算法与DBSCAN算法

    1.聚类的基本概念 聚类分析(cluster analysis)仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组.其目标是,组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不 ...

  4. 2022高教社杯数学建模思路 - 案例:BIRCH-层次聚类算法

    2022 高教社杯(国赛数学建模)思路解析 2022高教社杯ABCD赛题思路解析: https://blog.csdn.net/dc_sinor/article/details/126211983 1 ...

  5. matlab层次聚类中birch,Birch层次聚类

    Birch层次聚类算法 标签(空格分隔): CF树建立 BIRCH算法比较适合于数据量大,类别数K也比较多的情况.它运行速度很快,只需要单遍扫描数据集就能进行聚类,当然需要用到一些技巧,下面我们就对B ...

  6. 聚类算法——层次聚类算法

    每篇一句: You must strive to find your own voice. Because the longer you wait to begin, the less likely ...

  7. 机器学习技术-层次聚类算法(组平均)-综合层次聚类方法(BIRCH、CURE)

    基于层次的聚类方法,是对给定的数据进行层次的分解,直到某种条件满足为止.首先将数据点组成一颗聚类树,根据层次,自底向上或是自顶向下分解.层次的方法可以分为凝聚的方法和分裂的方法. 凝聚的方法,也称为自 ...

  8. 数学建模中常用的十大算法

    数学建模中常用的十大算法 这里,我们将对数学建模中常用的十大算法做一个简单的梳理,并给出一些可以继续学习的参考Blogs 文章目录 数学建模中常用的十大算法 1.蒙特卡罗算法 2.数据拟合.参数估计. ...

  9. 数学建模当中常用的十大模型及各对应算法

    数学建模当中常用的十大模型及各对应算法 图文展示:

  10. 层次聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...

最新文章

  1. PHP内核介绍及扩展开发指南—基础知识
  2. [转]C#委托的异步调用
  3. 区块链去中心化分布式_为什么渐进式去中心化是区块链的最大希望
  4. java ora 28040_Oracle 11g与112c中ORA-28040 错误解决
  5. 【opencv学习】ROI区域和图像填充
  6. Spring中的事务回滚 网上比较不错的文章
  7. 在Ubuntu下安装软件
  8. 怎么实现单击span时给span添加边框
  9. mysql索引冲突_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
  10. php 数据结构set,ES6的Set数据结构是什么
  11. 伊对和连信交友相亲聊天平台靠谱吗?
  12. 文件共享服务器(CIFS协议)
  13. Linux征途服务端启动,linux征途之系统开机流程
  14. 全面提升转化率和客单价的方法和技巧
  15. win2003配置apache支持php_asp,Win2003下配置asp+cgi+php+mysql
  16. Push failed: Unable to access ‘https://github.com........
  17. 服务器php装什么系统,php用什么系统做服务器配置
  18. 二手iPhone手机选购指南,花小钱办大事
  19. 电视机android正在升级卡住,智能电视升级失败,原因都在这里!
  20. ArcGIS线图层转面图层后,使面图层拥有线图层的属性

热门文章

  1. java mq_java实现MQ消息收发两种方式
  2. IIS安装和IIS默认网站被误删有效解决
  3. 23年浙江高考分数线103.36.165.X
  4. LVGL lv_calendar日历(21)
  5. 清华数据挖掘:理论算法 视频笔记
  6. 如何避免群发短信内容被屏蔽
  7. spring 自动装配 接口
  8. 电商系统中的商品的SKU和SPU是什么?
  9. 无法找到模块“@antv/l7-district”的声明文件。
  10. 拓嘉辰丰电商:如何提升拼多多店铺等级