由上一篇K-medoids算法学完后,搜索到Hierarchical Clustering算法和上篇Free Mind的K-medoid讨论提到的Hungarian Algorithm算法,做一个简单学习。
这篇文章的学习思路还是按照http://blog.pluskid.org/?p=407学习一下。
==================================================================
“聚类的时候如何确定类别数?”
解释:思考了还是不清楚然后看了一些论坛心得。
1、确定聚类个数的方法: 相似系数:指变量或样本间的亲密程度(即阈值),相似系数较大的聚为一类。常用的有夹角余弦、相关系数、指数相似系数。 标尺值:0~25进行分类。 伪F统计量:应该取伪F统计量较大而类数较小的聚类水平。如下图所示,应该分为4类最合适。 统计量R2:应该取R2统计量较大的类数数目。 伪t2统计量:伪t2统计量大说明不应该合并这两类,应该取合并前的水平。 实际意义:根据你做得试验,必须有实际意义。比 ...
本文来自: 人大经济论坛 SPSS专版 版,详细出处参考: http://bbs.pinggu.org/forum.phpmod=viewthread&tid=162067&page=1
2、这个问题是聚类分析历史中尚未完全解决的问题之一,主要的障碍是对类的结构和内容很难给出一个统一的定义,这样就给不出从理论上和实践中都可行的虚无假设。往往在实际应用中人们主要根据研究的目的,从使用的角度出发,选择合适的分类数。Demirmen(1972)曾提出了根据树状结构图来分类的准则:
这个问题正是分类(Categorization or Classification)(按照某种标准给对象贴标签(label),再根据标签来区分归类)和聚类(事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程)的关系主要所在吧。
区别是,分类是事先定义好类别 ,类别数不变 。分类器需要由人工标注的分类训练语料训练得到,属于有指导学习范畴。聚类则没有事先预定的类别,类别数不确定。 聚类不需要人工标注和预先训练分类器,类别在聚类过程中自动生成 。分类适合类别或分类体系已经确定的场合,比如按照国图分类法分类图书;聚类则适合不存在分类体系、类别数不确定的场合,一般作为某些应用的前端,比如多文档文摘、搜索引擎结果后聚类(元搜索)等。
分类的目的是学会一个分类函数或分类模型(也常常称作分类器 ),该模型能把数据库中的数据项映射到给定类别中的某一个类中。 要构造分类器,需要有一个训练样本数据集作为输入。训练集由一组数据库记录或元组构成,每个元组是一个由有关字段(又称属性或特征)值组成的特征向量,此外,训练样本还有一个类别标记。一个具体样本的形式可表示为:(v1,v2,...,vn; c);其中vi表示字段值,c表示类别。分类器的构造方法有统计方法、机器学习方法、神经网络方法等等。
聚类(clustering)是指根据“物以类聚”原理,将本身没有类别的样本聚集成不同的组,这样的一组数据对象的集合叫做簇,并且对每一个这样的簇进行描述的过程。它的目的是使得属于同一个簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似。与分类规则不同,进行聚类前并不知道将要划分成几个组和什么样的组,也不知道根据哪些空间区分规则来定义组。其目的旨在发现空间实体的属性间的函数关系,挖掘的知识用以属性名为变量的数学方程来表示。聚类技术正在蓬勃发展,涉及范围包括数据挖掘、统计学、机器学习、空间数据库技术、生物学以及市场营销等领域,聚类分析已经成为数据挖掘研究领域中一个非常活跃的研究课题。常见的聚类算法包括:K-均值聚类算法、K-中心点聚类算法、CLARANS、 BIRCH、CLIQUE、DBSCAN等。
==================================================================
对于上面的问题解决方法:
层次聚类 Hierarchical Clustering:
http://home.deib.polimi.it/matteucc/Clustering/tutorial_html/hierarchical.html
层次聚类算法:
由于层次聚类计算量巨大,所以通常不用来计算大量的数据,不过可以用层次聚类来选取K-means算法的初始类中心。
该方法分为两类:agglomerative hierarchical clustering(自下而上)和divisive hierarchical clustering(自顶而下)【http://blog.csdn.net/jwh_bupt/article/details/7685809】
python实现:http://www.cnblogs.com/Key-Ky/p/3440684.html
自下而上的python实现:https://github.com/intergret/snippet/blob/master/HAC.py
http://www.oschina.net/code/snippet_176897_14731
matlab待实现:实现参考链接
http://blog.sina.com.cn/s/blog_69c3ea2b0100nitu.html
http://www.cnblogs.com/wentingtu/archive/2012/01/04/2311533.html
=================================================================
匈牙利算法Hungarian Algorithm:
http://blog.csdn.net/erpindao/article/details/8451524
http://blog.csdn.net/allenlsy/article/details/5004360
http://ycool.com/post/cfnym64
http://www.cnblogs.com/kakamilan/archive/2012/07/14/2590879.html
****************************************************************************
二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。区别二分图,关键是看点集是否能分成两个独立的点集。
关于网络流的介绍:http://blog.csdn.net/y990041769/article/details/21026445
http://www.cnblogs.com/hxsyl/p/4185530.html
最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和。
===================================================================
最后给一个文中提到的贪婪算法:http://blog.csdn.net/effective_coder/article/details/8736718
这个算法有兴趣的可以去学习一下。
===================================================================
最后感谢文中所有博友