数学建模教学:常用算法 --- BIRCH-层次聚类算法
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.假设有N个待聚类的样本,对于层次聚类来说,步骤: 1.(初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度: 2.寻找各个类之间最近 ...
- 【聚类算法】层次聚类算法
目录 定义 样例 算法 Single Linkage Complete Linkage Average Linkage Centroid Linkage Ward 总结 定义 这个算法可以分为两部分理 ...
- R实现K均值算法,层次聚类算法与DBSCAN算法
1.聚类的基本概念 聚类分析(cluster analysis)仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组.其目标是,组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不 ...
- 2022高教社杯数学建模思路 - 案例:BIRCH-层次聚类算法
2022 高教社杯(国赛数学建模)思路解析 2022高教社杯ABCD赛题思路解析: https://blog.csdn.net/dc_sinor/article/details/126211983 1 ...
- matlab层次聚类中birch,Birch层次聚类
Birch层次聚类算法 标签(空格分隔): CF树建立 BIRCH算法比较适合于数据量大,类别数K也比较多的情况.它运行速度很快,只需要单遍扫描数据集就能进行聚类,当然需要用到一些技巧,下面我们就对B ...
- 聚类算法——层次聚类算法
每篇一句: You must strive to find your own voice. Because the longer you wait to begin, the less likely ...
- 机器学习技术-层次聚类算法(组平均)-综合层次聚类方法(BIRCH、CURE)
基于层次的聚类方法,是对给定的数据进行层次的分解,直到某种条件满足为止.首先将数据点组成一颗聚类树,根据层次,自底向上或是自顶向下分解.层次的方法可以分为凝聚的方法和分裂的方法. 凝聚的方法,也称为自 ...
- 数学建模中常用的十大算法
数学建模中常用的十大算法 这里,我们将对数学建模中常用的十大算法做一个简单的梳理,并给出一些可以继续学习的参考Blogs 文章目录 数学建模中常用的十大算法 1.蒙特卡罗算法 2.数据拟合.参数估计. ...
- 数学建模当中常用的十大模型及各对应算法
数学建模当中常用的十大模型及各对应算法 图文展示:
- 层次聚类算法原理总结
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...
最新文章
- PHP内核介绍及扩展开发指南—基础知识
- [转]C#委托的异步调用
- 区块链去中心化分布式_为什么渐进式去中心化是区块链的最大希望
- java ora 28040_Oracle 11g与112c中ORA-28040 错误解决
- 【opencv学习】ROI区域和图像填充
- Spring中的事务回滚 网上比较不错的文章
- 在Ubuntu下安装软件
- 怎么实现单击span时给span添加边框
- mysql索引冲突_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
- php 数据结构set,ES6的Set数据结构是什么
- 伊对和连信交友相亲聊天平台靠谱吗?
- 文件共享服务器(CIFS协议)
- Linux征途服务端启动,linux征途之系统开机流程
- 全面提升转化率和客单价的方法和技巧
- win2003配置apache支持php_asp,Win2003下配置asp+cgi+php+mysql
- Push failed: Unable to access ‘https://github.com........
- 服务器php装什么系统,php用什么系统做服务器配置
- 二手iPhone手机选购指南,花小钱办大事
- 电视机android正在升级卡住,智能电视升级失败,原因都在这里!
- ArcGIS线图层转面图层后,使面图层拥有线图层的属性