前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用scikit-learn学习BIRCH聚类

用scikit-learn学习BIRCH聚类

作者头像
刘建平Pinard
发布于 2018-08-14 03:45:59
发布于 2018-08-14 03:45:59
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

    在BIRCH聚类算法原理中,我们对BIRCH聚类算法的原理做了总结,本文就对scikit-learn中BIRCH算法的使用做一个总结。

1. scikit-learn之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。

2. BIRCH类参数

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

    1) threshold:即叶节点每个CF的最大样本半径阈值T,它决定了每个CF里所有样本形成的超球体的半径阈值。一般来说threshold越小,则CF Tree的建立阶段的规模会越大,即BIRCH算法第一阶段所花的时间和内存会越多。但是选择多大以达到聚类效果则需要通过调参决定。默认值是0.5.如果样本的方差较大,则一般需要增大这个默认值。

    2) 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.

3. BIRCH运用实例

    这里我们用一个例子来学习BIRCH算法。

    首先,我们载入一些随机数据,并看看数据的分布图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from 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')
plt.show()

    输出图如下:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 "Calinski-Harabasz Score", metrics.calinski_harabaz_score(X, y_pred) 

    输出图如下:

    对应的Calinski-Harabasz 分数输出为:

Calinski-Harabasz Score 2220.95253905

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred = Birch(n_clusters = 4).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
print "Calinski-Harabasz Score", metrics.calinski_harabaz_score(X, y_pred) 

    输出图如下:  

    对应的Calinski-Harabasz 分数输出为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Calinski-Harabasz Score 2816.40765268     

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

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

    现在我们将threshold从0.5降低为0.3,让BIRCH算法第一阶段的CF Tree规模变大,并观察Calinski-Harabasz 分数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred = Birch(n_clusters = 4, threshold = 0.3).fit_predict(X)
print "Calinski-Harabasz Score", metrics.calinski_harabaz_score(X, y_pred) 

    对应的Calinski-Harabasz 分数输出为:

Calinski-Harabasz Score 3295.63492273

    可见此时的聚类效果有了进一步的提升,那么是不是threshold越小越好呢?我们看看threshold从0.3降低为0.1时的情况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred = Birch(n_clusters = 4, threshold = 0.1).fit_predict(X)
print "Calinski-Harabasz Score", metrics.calinski_harabaz_score(X, y_pred) 

    对应的Calinski-Harabasz 分数输出为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Calinski-Harabasz Score 2155.10021808

    也就是说threshold不是越小聚类效果越好。

    我们基于threshold为0.3的情况,调试下branching_factor,将branching_factor从50降低为20.让BIRCH算法第一阶段的CF Tree规模变大。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred = Birch(n_clusters = 4, threshold = 0.3, branching_factor = 20).fit_predict(X)
print "Calinski-Harabasz Score", metrics.calinski_harabaz_score(X, y_pred) 

    对应的Calinski-Harabasz 分数输出为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Calinski-Harabasz Score 3301.80231064

    可见调试branching_factor也可以让聚类分数提高。那么和threshold类似,是不是branching_factor越小越好呢?我们将branching_factor从20降低为10,观察聚类分数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y_pred = Birch(n_clusters = 4, threshold = 0.3, branching_factor = 10).fit_predict(X)
print "Calinski-Harabasz Score", metrics.calinski_harabaz_score(X, y_pred) 

    对应的Calinski-Harabasz 分数输出为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Calinski-Harabasz Score 2800.87840962

    也就是说和threshold类似,branching_factor不是越小聚类效果越好,需要调参。

    以上就是BIRCH算法的一些经验,希望可以帮到朋友们。

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-12-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go 学习路线(2022)
Go 语言的发展越来越好了,很多大厂使用 Go 作为主要开发语言,也有很多人开始学习 Go,准备转 Go 开发。
AlwaysBeta
2022/02/07
1.6K0
Go 学习路线(2022)
Java工程师书单(初级、中级、高级)
怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序员经常会问到的问题
Java团长
2018/08/07
1.1K0
Go 语言推荐书籍(2023)
Go是谷歌公司为了解决重大问题而设计的一种小型编程语言。 快速、现代的编程语言能让业余爱好者、初学者和专业人员都受益。你需要的正是这样的语言。
kcodez
2023/02/27
2.5K1
Go 语言推荐书籍(2023)
R语言书单:从入门到进阶都在这!
从事大数据行业的人都清楚,R是用于统计分析、绘图的语言和操作环境,同时它还是一个用于统计计算和统计制图的优秀工具。特意整理出从入门到进阶的相关书籍,以供参考。
生信交流平台
2022/09/21
8450
R语言书单:从入门到进阶都在这!
五本必读的深度学习圣经书籍,入门 AI 从「深度学习」开始
(以下以 Daniel Jeffries 第一人称撰写) 多年来,由于实验室研究和现实应用效果之间的鸿沟,少有人持续研究人工智能,AI 在很多领域停滞不前。然而近两年,AI 在一些领域陆续有了重大突破,像是图像识别、自动驾驶、Alpha Go 等等。许多八九十年代的算法,因为硬体速度慢和缺乏数据等原因而不再被使用。而现在,受众多大数据和大规模并行芯片的支持,这些算法终于初见成效。 在过去的一年多时间里,研究人员竞相出版专着,以满足读者对深度学习知识的渴求。第一本关于深度学习的书已经上架,更多的将会在夏
机器人网
2018/04/24
2K0
五本必读的深度学习圣经书籍,入门 AI 从「深度学习」开始
Go语言相关书籍推荐(从入门到放弃)
学习任何一门语言,首先要学习的就是语法,这一本书其实就完全可以带你入门,我读的第一本Go相关书籍就是它,对Go的基础语法、核心都进行了详细讲解,尤其其中有几篇文章对Go语言陷阱进行讲解,真的很棒,强烈推荐。
Golang梦工厂
2022/07/08
2.9K0
Go语言相关书籍推荐(从入门到放弃)
6本Python入门书籍推荐:0基础到项目实践
Python简单易如门,但是具体怎么入门?第一步就是要找一本书籍先学一些基础知识,今天小编为大家推荐几本浅显易懂的基础入门书籍,希望对你有所帮助。
python学习教程
2019/07/10
1.2K0
6本Python入门书籍推荐:0基础到项目实践
编程新手码住!最适合学习的Python书籍
小E发现身边越来越多的朋友想要自学编程,希望走上程序猿道路。那今天就给大家整理了几本适合编程新手入门的Python学习书籍,希望大家抓住双十一的尾巴,买书学习吧~ 《Python编程 从入门到实践》 这是一本比较适合入门学习者的书籍。全书分为两部分:第一部分介绍用Python编程所必须了解的基本概念,包括matplotlib、NumPy和Pygal等强大的Python库和工具介绍,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Pyth
腾讯NEXT学位
2020/11/12
9040
2022年golang最近学习书单推荐
Go是谷歌公司为了解决重大问题而设计的一种小型编程语言。完成大型项目需要大型团队,而大型团队中团队成员的经验水平往往各不相同。
后端时光
2022/08/19
1.2K0
2022年golang最近学习书单推荐
两本开源书籍,助你快速入门 Go 语言开发!
首先是《Go 语言高级编程》这本书籍,里面涵盖了 CGO、Go 汇编语言、RPC 实现、Web 框架实现、分布式系统等高阶主题,适合对 Go 语言有一定经验,并想深入了解 Go 语言各种高级用法的开发人员使用。
GitHubDaily
2020/06/16
1.2K0
7本必看入门深度学习书籍
对于入门深度学习的书籍,计算机视觉专家 Adrian Rosebrock 最近写了篇非常实用的书单,给深度学习新手推荐了7本书籍,最最重要的是,告诉了你最适合看哪些书。
机器人网
2018/07/23
6K0
7本必看入门深度学习书籍
新手入门 | 算法书籍推荐
公众号设立以来,很多同学都在问如何入门、提高,以及有什么好的算法书籍可以学习。这周空闲时间我就大概在网上整理了一下,由于每个人的性格、学习习惯都不一样,不能针对个人情况来推荐,所以这里给的算法书籍仅做参考哦。
ACM算法日常
2018/09/21
3.6K1
新手入门 | 算法书籍推荐
java 进阶之路(书籍推荐)
学习Java,书籍是必不可少的学习工具之一,尤其是对于自学者而言。废话不多说,下边就给大家推荐一些Java进阶的好书。
马士兵的朋友圈
2020/09/08
1.8K0
java 进阶之路(书籍推荐)
开发 | 入门深度学习,读对书很重要
AI科技评论按:本文作者为 Jeffries Consulting 创始人 Daniel Jeffries,他以自己的阅读体验,对当前含金量极高的几本深度学习书籍进行点评;对每本书的内容重点、所适合的读者群进行了总结。非常适合学习者在购书前进行参考,以免白费时间。AI科技评论编译。 Daniel Jeffries:多年来,由于实验室研究和现实应用效果之间的鸿沟,少有人持续研究人工智能,AI在很多领域停滞不前。 但近两年,AI 在一些领域陆续有了重大突破,比如:图像识别;自动驾驶;Alpha Go等。许多
AI科技评论
2018/03/12
9390
开发 | 入门深度学习,读对书很重要
Python数据分析入门书籍推荐
推荐理由:本书用诙谐有趣的讲述方式为大家介绍了python的基本语法,非常适合非计算机专业的初学者作为入门书来看。在这个过程中,该书会让你完成一系列习题,而你则可以通过反复练习来学到技能,这些习题也是专为反复练习而设计的。对于一无所知的初学者来说,在能理解更复杂的话题之前,这可以说是最有效的学习方式。
python学习教程
2020/04/15
1.7K0
Java程序员必看的 13 本 Java 书籍!
毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单。
Java技术栈
2018/11/30
1.7K0
Java程序员必看的 13 本 Java 书籍!
Java学习必备书籍推荐终极版!
很早就想把书单更新一下了,昨晚加今天早上花了几个时间对之前的书单进行了分类和补充完善。虽是终极版,但一定还有很多不错的 Java 书籍我没有添加进去,会继续完善下去。希望这篇文章对你有帮助,不要再无书可看。
乔戈里
2019/05/13
1.6K0
设计模式、重构、编程规范等的经典书籍书籍推荐
有关设计模式、重构、编程规范等的经典书籍很多,有很多你应该已经听说过、甚至看过。今天,我就结合我的经验,对这些书籍进行一个整理和点评。你可以据此来选择适合你的书籍,结合着专栏一块儿来学习,这样学习效果会更好。
用户8826530
2021/07/16
6.7K0
设计模式、重构、编程规范等的经典书籍书籍推荐
推荐:10本好书,让你成为机器学习领域的专家
机器学习是个跨领域的学科,而且在实际应用中有巨大作用,但是没有一本书能让你成为机器学习的专家。 在这篇文章中,我挑选了 10 本书,这些书有不同的风格,主题也不尽相同,出版时间也不一样。因此,无论你是
机器人网
2018/04/25
9590
推荐:10本好书,让你成为机器学习领域的专家
AI工程师必读的10本ML读物(附PDF下载)
作者:PRANAVDAR 翻译:李海明 本文为大家带来3个方向共10本的机器学习读物,附带免费的书籍资源哦~ 介绍 你嗜书如命却囊中羞涩?很多机器学习与数据科学书籍的价格都令人退避三舍。其实这也无可厚非,毕竟是作者呕心沥血、卧薪尝胆换来的硕果。 然而,这些作者中也不乏善良仁爱之士,将其作品无偿分享给他人。这对于那些有志成为数据科学家和AI工程师的人,似如获至宝。 以下附上机器学习方向的电子书10本,均可免费获取。书单方面,我们先引入统计学基础类书籍,随后是机器学习原理类,最后介绍机器学习进阶类。 统计
数据派THU
2018/03/22
3.3K0
AI工程师必读的10本ML读物(附PDF下载)
推荐阅读
相关推荐
Go 学习路线(2022)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验