全栈工程师开发手册 (作者:栾鹏)
python数据挖掘系列教程

BIRCH聚类的相关的知识内容可以参考
https://blog.csdn.net/luanpeng825485697/article/details/79675520

sklearn之BIRCH类

在scikit-learn中,BIRCH类实现了原理篇里讲到的基于特征树CF Tree的聚类。因此要使用BIRCH来聚类,关键是对CF Tree结构参数的处理。

在CF Tree中,几个关键的参数为内部节点的最大CF数B, 叶子节点的最大CF数L, 叶节点每个CF的最大样本半径阈值T。这三个参数定了,CF Tree的结构也基本确定了,最后的聚类效果也基本确定。可以说BIRCH的调参就是调试B,L和T。

至于类别数K,此时反而是可选的,不输入K,则BIRCH会对CF Tree里各叶子节点CF中样本的情况自己决定类别数K值,如果输入K值,则BIRCH会CF Tree里各叶子节点CF进行合并,直到类别数为K。
    
BIRCH类参数

在scikit-learn中,BIRCH类的重要参数不多,下面一并讲解。

    1. threshold:即叶节点每个CF的最大样本半径阈值T,它决定了每个CF里所有样本形成的超球体的半径阈值。一般来说threshold越小,则CF Tree的建立阶段的规模会越大,即BIRCH算法第一阶段所花的时间和内存会越多。但是选择多大以达到聚类效果则需要通过调参决定。默认值是0.5.如果样本的方差较大,则一般需要增大这个默认值。
    1. branching_factor:即CF Tree内部节点的最大CF数B,以及叶子节点的最大CF数L。这里scikit-learn对这两个参数进行了统一取值。也就是说,branching_factor决定了CF Tree里所有节点的最大CF数。默认是50。如果样本量非常大,比如大于10万,则一般需要增大这个默认值。选择多大的branching_factor以达到聚类效果则需要通过和threshold一起调参决定
  • 3)n_clusters:即类别数K,在BIRCH算法是可选的,如果类别数非常多,我们也没有先验知识,则一般输入None,此时BIRCH算法第4阶段不会运行。但是如果我们有类别的先验知识,则推荐输入这个可选的类别值。默认是3,即最终聚为3类。

  • 4)compute_labels:布尔值,表示是否标示类别输出,默认是True。一般使用默认值挺好,这样可以看到聚类效果。

在评估各个参数组合的聚类效果时,还是推荐使用Calinski-Harabasz Index,Calinski-Harabasz Index在scikit-learn中对应的方法是metrics.calinski_harabaz_score.

BIRCH运用实例

先生成一批样本数据

import numpy as np
import matplotlib.pyplot as pltfrom sklearn.datasets.samples_generator import make_blobs
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,簇中心在[-1,-1], [0,0],[1,1], [2,2]
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)
plt.scatter(X[:, 0], X[:, 1], marker='o',c=y)
plt.show()

现在我们用BIRCH算法来聚类,首先我们选择不输入可选的类别数K,看看聚类效果和Calinski-Harabasz 分数。

from sklearn.cluster import Birch
y_pred = Birch(n_clusters = None).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
from sklearn import metrics
print("CH指标:", metrics.calinski_harabaz_score(X, y_pred))

输出内容:

CH指标: 2220.95253905

由于我们知道数据是4个簇随机产生的,因此我们可以通过输入可选的类别数4来看看BIRCH聚类的输出。代码如下:

y_pred = Birch(n_clusters = 4).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
print("CH指标:", metrics.calinski_harabaz_score(X, y_pred))

输出结果:

CH指标: 2816.40765268

可见如果我们不输入类别数的话,在某些时候BIRCH算法的聚类效果并不一定好,因此这个可选的类别数K一般还是需要调参的。

对于threshold和branching_factor我们前面还没有去调参,使用了默认的threshold值0.5和默认的branching_factor值50.

现在我们尝试寻找更加的threshold和branching_factor


# 尝试多个threshold取值,和多个branching_factor取值
param_grid = {'threshold':[0.5,0.3,0.1],'branching_factor':[50,20,10]}  # 定义优化参数字典,字典中的key值必须是分类算法的函数的参数名
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)y_pred = clf.predict(X)print(threshold,branching_factor,"CH指标:", metrics.calinski_harabaz_score(X, y_pred))

输出结果:
0.5 50 CH指标: 2816.40765268
0.5 20 CH指标: 2816.40765268
0.5 10 CH指标: 2816.40765268
0.3 50 CH指标: 3295.63492273
0.3 20 CH指标: 3301.80231064
0.3 10 CH指标: 2800.87840962
0.1 50 CH指标: 2155.10021808
0.1 20 CH指标: 2997.30226948
0.1 10 CH指标: 3067.58487219

python机器学习库sklearn——BIRCH聚类相关推荐

  1. Python机器学习库sklearn的安装

    Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...

  2. python机器学习库sklearn——k均值聚类

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 k均值聚类的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/de ...

  3. python机器学习库sklearn——决策树

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 决策树的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/deta ...

  4. python机器学习库sklearn与graphlab与opencv的安装

    1.安装python 首先安装python3.5 Link 然后安装python2.7 Link 注意选择合适的版本(记得之后安装的GraphLab只能用64位,也只能使用python2) 2.安装使 ...

  5. python机器学习库sklearn——DBSCAN密度聚类

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 DBSCAN密度聚类的相关 ...

  6. python机器学习库sklearn——特征提取

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 注意:特征特征提取与 特征选择 有很大的不同:前者包括将任意数据(如文本或图像)转换为可用于机器学习的数值特征.后者是将这些特征应用到 ...

  7. python机器学习库sklearn——集成方法(Bagging、Boosting、随机森林RF、AdaBoost、GBDT)

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  8. python机器学习库sklearn——生成样本数据

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  9. python机器学习库sklearn——模型评估

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 各类模型评估详细意思参考:https://blog.csdn.net/luanpeng825485697/article/detail ...

最新文章

  1. 初入职场的我怎么就成了个打杂的,我是这样破局的 No.146
  2. C#创建MQTT客户端接收服务器信息
  3. java doublebuffer_Java DoubleBuffer clear()用法及代码示例
  4. 百度地图 app 点击事件无效、不触发 解决方案
  5. npm 查看当前生效的配置
  6. java jmf 视屏监控的核心代码_JMF(Java Media Framework)使用摄像头
  7. js 定时器_Node.js实战6:定时器,使用timer延迟执行
  8. python模块介绍-Tornado:Tornado中文文档-概述
  9. Python 将json字符串 进行列表化可循环
  10. 【Linux】Core dump故障分析
  11. 2021年全球及中国企业级路由器市场竞争格局分析,呈现出寡头竞争的市场格局「图」
  12. python结巴分词代码_结巴分词Python代码
  13. 性能测试中问题反思和心得
  14. C语言:斐波那契数列
  15. 怎样提高报表呈现的性能
  16. 不知道怎么去视频水印,看看这些怎样去水印教程
  17. eating的中文意思_eating是什么意思_eating的翻译_音标_读音_用法_例句_爱词霸在线词典...
  18. JavaSE语法(3)——【逻辑控制:各种分支循环语句】
  19. CSS的类名命名规范
  20. 2021年中国亚马逊耳环市场趋势报告、技术动态创新及2027年市场预测

热门文章

  1. python编程入门书籍-编程小白的第一本 Python 入门书
  2. 100.Day12反射机制_qq_38205875的博客
  3. php分页显示多少页,php实现分页显示
  4. redis 能不能监听特定的key失效_Spring boot实现监听Redis key失效事件实现和其它方式...
  5. 单调栈:leetcode 84. 柱状图中最大的矩形/85最大矩形
  6. android蓝牙控制继电器——手机客户端的实现
  7. 最简单的基于FFmpeg的libswscale的示例(YUV转RGB)
  8. Red5开发第一步-Hello World
  9. 使用批处理脚本(BAT)调用FFMPEG批量编码视频
  10. 火狐浏览器读取ukey_火狐 83版引入HTTPS-Only模式 确保访问安全连接