层次聚类的介绍
2016-03-04 20:43
260 查看
AGNES算法(自底向上层次聚类)
AGNES(Agglomerative Nesting) 是凝聚的层次聚类算法,如果簇C1中的一个对象和簇C2中的一个对象之间的距离是所有属于不同簇的对象间欧式距离中最小的,C1和C2可能被合并。这是一种单连接方法,其每个簇可以被簇中的所有对象代表,两个簇之间的相似度由这两个簇中距离最近的数据点对的相似度来确定。算法描述:
输入:包含n个对象的数据库,终止条件簇的数目k
输出:k个簇
(1) 将每个对象当成一个初始簇
(2) Repeat
(3) 根据两个簇中最近的数据点找到最近的两个簇
(4) 合并两个簇,生成新的簇的集合
(5) Until达到定义的簇的数目
算法性能:
(1) 简单,但遇到合并点选择困难的情况。
(2) 一旦一组对象被合并,不能撤销
(3) 算法的复杂度为O(n的平方),不适合大数据集
DIANA(Divisive Analysis)算法属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最邻近的最大欧式距离),将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值。
DIANA用到如下两个定义:(1) 簇的直径:在一个簇中的任意两个数据点都有一个欧氏距离,这些距离中的最大值是簇的直径
(2) 平均相异度(平均距离):
算法描述:
输入:包含n个对象的数据库,终止条件簇的数目k
输出:k个簇,达到终止条件规定簇数目
(1) 将所有对象整个当成一个初始簇
(2) For ( i=1;i!=k;i++) Do Begin
(3) 在所有簇中挑选出具有最大直径的簇;
(4) 找出所挑出簇里与其他点平均相异度最大的一个点放入splinter group,剩余的放入old party中。
(5) Repeat
(6) 在old party里找出到splinter group中点的最近距离不大于old party中点的最近距离的点,并将该点加入splinter group
(7) Until 没有新的old party的点被分配给splinter group;
(8) Splinter group 和old party为被选中的簇分裂成的两个簇,与其他簇一起组成新的簇集合
(9) END
算法性能:
缺点是已做的分裂操作不能撤销,类之间不能交换对象。如果在某步没有选择好分裂点,可能会导致低质量的聚类结果。大数据集不太适用。
层次聚类算法的分析:
层次聚类法的优点是可以通过设置不同的相关参数值,得到不同粒度上的多层次聚类结构;在聚类形状方面,层次聚类适用于任意形状的聚类,并且对样本的输入顺序是不敏感的。
层次聚类的不足之处是算法的时间复杂度大,层次聚类的结果依赖聚类的合并点和分裂点的选择。并且层次聚类过程最明显的特点就是不可逆性,由于对象在合并或分裂之后,下一次聚类会在前一次聚类基础之上继续进行合并或分裂,也就是说,一旦聚类结果形成,想要再重新合并来优化聚类的性能是不可能的了。聚类终止的条件的不精确性是层次聚类的另一个缺点,层次聚类要求指定一个合并或分解的终止条件,比如指定聚类的个数或是两个距离最近的聚类之间最小距离阈值。
相关文章推荐
- saiku源代码安装
- 联合体以及如何调出内存窗口
- 试一试写博客的感觉
- 动态添加和删除Spinner(ArrayList与Widget的依赖性)
- shell编程(一):简单命令
- C++学习笔记:const_cast类型转化
- 自定义view____通讯录字母特效
- 大规模机器学习 机器学习基础(9)
- 字符数组和字符指针
- 工具(1):使用lua生成vs2015的工程文件/将已有的C++文件生成vs2015工程文件
- Spring MVC流程
- EXCEL文件导入远程SQL SERVER数据库
- [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
- (填坑)支付宝商户开启防钓鱼支付出现异常处理方法
- 实现无锁的栈与队列(5):Hazard Pointer
- ClassNotFoundExceptioncom.mysql.jdbc.Driver
- 设计模式——简单工厂模式
- linux 系统下编译Qt 源码
- 29款 Xcode 插件
- 动态申请二维数组