??xml version="1.0" encoding="utf-8" standalone="yes"?> 其实从某U角度讲Q划分聚cL完全不用赘述的一U聚cL法,可能也是最常见的聚cȝ法了(jin)。著名的k-means法是个中典型。这ơ的内容主要是通过k-means聚类法来M介绍一下划分聚cR?/span> 单来Ԍk均Dcȝ竟做?jin)什么事Q我们可以这h看,?/span>N个数据点的集?/span>D={x1,x2,…,xn}Q每?/span>xi代表一个特征向量,目标是将q?/span>N个点Ҏ(gu)某种怼准则其划分?/span>K个分cM。?/span>k均值所表达的重要在于相似准则的选取Q即不断的用类的均值来完成q样的划分。当然也有书把这U相似准则称之ؓ(f)评分函数。基于划分的聚类法对于homogeneity的实现是通过选取适当的评分函数ƈ使每一个数据点到它所属的聚类中心(j)的距L化。而关键就是如何定义这U距,和所谓的聚类中心(j)。D个例子来Ԍ如果定义聚类间距Mؓ(f)Ƨ式距离Q那么可以用协方差的概忉|定义通用的评分函数。划分聚cȝ思想是最直观和易懂的分类思想Q因此我也不在这里长介l,q是以算法的实现和代码来直观表现划分聚类的性能?/span> 我们?/span>k-means法Z来实现划分聚cR该法的复杂度?/span>O(KnI)Q其?/span>I是P代次数。这U算法的一个变体是依次分析每个数据点,而且一旦有数据点被重新分配更新聚cM?j),反复的在数据点中循环直到解不再变化?/span>k-means法的搜索过E局限于全部可能的划分空间的一个很的部分。因此有可能因ؓ(f)法收敛到评分函数的局部而非全局最而错q更好的解。当然缓解方法可以通过选取随机起始Ҏ(gu)改进搜烦(ch)Q我们例子中?/span>KMPP法Q,或者利用模拟退火等{略来改善搜索性能。因此,从这个角度来理解Q聚cd析实质上是一个在庞大的解I间中优化特定评分函数的搜烦(ch)问题?/span> 不多说了(jin)Q直接上代码吧!Q! k-means法Q?/span> for k = 1, … , K ?/span> r(k) ZD中随机选取的一个点Q?/span> while 在聚c?/span>Ck中有变化发生 do 形成聚类Q?/span> For k = 1, … , K do Ck = { x ∈ D | d(rk,x) <= d(rj,x) Ҏ(gu)?/span>j=1, … , K, j != k}Q?/span> End; 计算新聚cM?j)?x) For k = 1, … , K do Rk = Ck 内点的均值向?/span> End; End; 具体实现部分因ؓ(f)?/span>Apache Commons Math的现成代码,U着Eric Raymond?/span>TAOUP中的极大利用工具原则Q我没有?/span>k-means的实玎ͼ而是直接利用Apache Commons Math中的k-means plus plus代码来作Z子?/span> 具体如何试q一法Q给Z(jin)试代码如下Q?br />
划分聚类是聚cd析中最常用的一U聚cȝ法了(jin)Q对于其研究的论文也是多如牛毛。感兴趣的朋友们完全可以通过阅读各种相关论文来感受这一法的美妙。当然还要再ơ感?/span>Apache Commons Math对于诸多常用数学计算的实现。对于聚cd析的ȝ学习(fn)暂时到此告一D落Q最q要忙着写论文,{过D|间有I可以考虑l箋聚类法的研I学?fn)?/span> [1]PatternRecognitionThird Edition, Sergios Theodoridis, Konstantinos Koutroumbas [2]模式识别W三?/span>, Sergios Theodoridis, Konstantinos Koutroumbas?/span>, 李晶?/span>, 王爱?/span>, 张广源等?/span> [3]数据挖掘原理, David Hand and et al, 张银奎等?/span> [4]http://commons.apache.org/math/2. 法实现
private static void testKMeansPP(){
2
3 //ori is sample as n instances with m features, here n=8,m=2
4
5 int ori[][] = {{2,5},{6,4},{5,3},{2,2},{1,4},{5,2},{3,3},{2,3}};
6
7 int n = 8;
8
9 Collection<EuclideanIntegerPoint> col = new ArrayList<EuclideanIntegerPoint>();
10
11 for(int i=0;i<n;i++){
12
13 EuclideanIntegerPoint ec = new EuclideanIntegerPoint(ori[i]);
14
15 col.add(ec);
16
17 }
18
19 KMeansPlusPlusClusterer<EuclideanIntegerPoint> km = new KMeansPlusPlusClusterer<EuclideanIntegerPoint>(new Random(n));
20
21 List<Cluster<EuclideanIntegerPoint>> list = new ArrayList<Cluster<EuclideanIntegerPoint>>();
22
23 list = km.cluster(col, 3, 100);
24
25 output(list);
26
27 }
28
29private static void output(List<Cluster<EuclideanIntegerPoint>> list){
30
31 int ind = 1;
32
33 Iterator<Cluster<EuclideanIntegerPoint>> it = list.iterator();
34
35 while(it.hasNext()){
36
37 Cluster<EuclideanIntegerPoint> cl = it.next();
38
39 System.out.print("Cluster"+(ind++)+" :");
40
41 List<EuclideanIntegerPoint> li = cl.getPoints();
42
43 Iterator<EuclideanIntegerPoint> ii = li.iterator();
44
45 while(ii.hasNext()){
46
47 EuclideanIntegerPoint eip = ii.next();
48
49 System.out.print(eip+" ");
50
51 }
52
53 System.out.println();
54
55 }
56
57 }
58
59 /**
60
61 *@param args
62
63 */
64
65 public static void main(String[] args) {
66
67 //testHierachicalCluster();
68
69 testKMeansPP();
70
71 //testBSAS();
72
73 //testMBSAS();
74
75 }
76
77
3. 结
4. 参考文献及(qing)推荐阅读
]]>
]]>
事实上,?/span>n个对象,聚类?/span>k个聚cMqg事本w是一?/span>NPN题。熟(zhn)组合数学应该知道这个问题的解事W二c?/span>Stirling敎ͼ(x)。这样问题也出C(jin)Q如?/span>k值固定,那么计算q是可行的,如果kg固定Q就要对所有的可能k都进行计,那运行时间可惌知?jin)。然而ƈ不是所有的可行聚类Ҏ(gu)都是合理的,所谓的合理Q我理解是说接q你的聚cȝ标的Q之所以我们要分类Q必然有初始动机Q那么可以根据这个动机制定可行的聚类Ҏ(gu)Q这P复杂度的问题回避了(jin)?/span>
序法Q?/span>sequential algorithmsQ是一U非常简单的聚类法Q大多数都至将所有特征向量用一ơ或几次Q最后的l果依赖于向量参与算法的序。这U聚cȝ法一般是不预先知道聚cL?/span>k的,但有可能l出一个聚cL上界q。本文将主要介绍基本序法Q?/span>Basic Sequential Algorithmic Scheme,BSASQ和其几个变U,q给Z码实现?/span>
首先?/span>BSASQ这个算法方案需要用户定义参敎ͼ(x)不相似性阈?#952;和允许的最大聚cLq。算法的基本思想Q由于要考虑每个新向量,Ҏ(gu)向量到已有聚cȝ距离Q将它分配到一个已有的聚类中,或者一个新生成的聚cM。算法的伪码描述如下Q?/span>
1. m=1 /*{聚类数量}*/
2. Cm={x1}
3. For i=2 to N
4. ?/span>Ck: d(xi,Ck)=min1£j£md(xi,Cj)
5. If (d(xi,Ck)>Θ) AND (m<q) then
6. m=m+1
7. Cm={xi}
8. Else
9. Ck=CkÈ{xi}
10. 如果需要,更新向量表达
11. End {if}
12. End {for}
׃面的描述可以看出BSAS法对向量顺序非怾赖,无论是聚cL量还是聚cLw,不同的向量顺序会(x)D完全不同的聚cȝ果。另一个媄(jing)响聚cȝ法结果的重要因素是阈?#952;的选择Q这个值直接媄(jing)响最l聚cȝ数量Q如?#952;太小Q就?x)生成很多不必要的聚c,因ؓ(f)很多情况下向量与聚类的合q条仉受到θ的限Ӟ而如?#952;太大Q则聚类数量又会(x)不够?/span>BSAS比较适合致密聚类Q其Ҏ(gu)据集q行一ơ扫描,每次q代中计当前向量与聚类间的距离Q因为最后的聚类?/span>m被认于NQ故BSAS的时间复杂度?/span>O(N)?/span>
׃BSAS法依赖?/span>qQ因此这里介l一U自动估计聚cLq的简单方法,该方法也适用于其他的聚类法Qo(h)BSAS(Θ)为具有给定不怼阈?#952;?/span>BSAS法?/span>
1. For Θ=a to b step c
2. 法BSAS(Θ)执行s?/span>Q每一ơ都使用不同的顺序表C数据?/span>
3. 估计聚类敎ͼmΘ作ؓ(f)?/span>s?/span>BSAS(Θ)法得来的最常出现的聚类数?/span>
4. Next Θ
其中a?/span>b是数据集的所有向量对的最和最大不怼U别Q?/span>c的选择直接?/span>d(x,C)的媄(jing)响?/span>
我的聚类E序主要扩展?/span>Apache Commons Math开源框Ӟ下面是其l构Q我单加入了(jin)ClusterercM为抽象模板类Q用模板方法模式修改了(jin)框架Qؓ(f)后箋加入的例?/span>BSAS法提供模板?br />
序法单易实现Q对于学?fn)聚cL说是入门的最好选择Q考虑到篇q的限制Q不能将代码全部发上来,如果有需要可以向我烦(ch)要,Apache Commons Math框架可以?/span>Apache的网站上下蝲。另外还有很多介l不够详l,感兴的朋友可以l箋深入研究BSAS的扩展?/span>
[1]Pattern Recognition Third Edition, Sergios Theodoridis, Konstantinos Koutroumbas
[2]模式识别W三?/span>, Sergios Theodoridis, Konstantinos Koutroumbas?/span>, 李晶?/span>, 王爱?/span>, 张广源等?/span>
“数学上,度(Measure)是一个函敎ͼ它对一个给定集合的某些子集指定一个数Q这个数可以比作大小、体U、概率等{。传l的U分是在区间上进行的Q后来h们希望把U分推广CQ意的集合上,发展出度的概念,它在数学分析和概率论有重要的C” —?/span>wikipedia
聚类之前一定要定义好向量之间的怼E度——即q邻度。在聚类q程中我们用的度Q范围要更广泛,首先定义向量之间的测度,接着是集合与向量,集合之间的测度?/span>
对于X上的不相似测?/strong>(Dissimilarity Measure, DM) d 是一个函敎ͼ(x) 其中R是实数集合,如果d有以下的属性:(x)
Q?/span>1.1Q?/span>
Q?/span>1.2Q?/span>
Q?/span>1.3Q?/span>
如果又满?/span>
Q?/span>1.4Q?/span>
Q?/span>1.5Q?/span>
那么d被称为度?/span>DM。其中的公式Q?/span>1.5Q也叫三角不{式。稍E解释一下(其实太好理解?jin)?j)Q不怼性测度其实就像我们说的距MP两个向量代表两个对象好了(jin)。公?/span>1.2定义Q向量)(j)对象自己和自q距离?/span>d0Q公?/span>1.1说明?jin)Q意两个对象之间的距离要小于正无穷却大于自己和自己的距(你和别h的距d于你和自q距离Q这不废话吗Q_Q)(j)Q公?/span>1.3说明距离的交互性;公式1.4不解释了(jin)Q公?/span>1.5是三角不等式(初中水^Q?/span>
同理怼性测?/strong>(Similarity Measure, SM)定义?img style="width: 128px; height: 29px" height="29" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/1.0.JPG" width="128" border="0" />满Q?/span>
Q?/span>1.6Q?/span>
Q?/span>1.7Q?/span>
Q?/span>1.8Q?/span>
如果又满?/span>
Q?/span>1.9Q?/span>
Q?/span>1.10Q?/span>
把s叫做度量SM。具体同DMQ各公式的表达一目了(jin)然哦~~~
从定义和字面上我们都可以看出二者的不同Q在表达怼性时两者都可以Q只不过度量的角度不同,对于判别怼Q?/span>DM大说明不怼Q越则相|?/span>SM却正好相反,因此我们也可以联惻IDM?/span>SM可以利用q种对立关系来定义。D例来_(d)如果d是一?/span>DMQ那?/span>s=1/d是一?/span>SM?/span>
上面的定义只是一个宏观的概括Q那么具体的向量之间的测度如何计呢Q下面将详细的介l?/span>
首先对于实向量的不相似测度,实际应用中最通用的就?strong>加权lp度量?jin)?x)
Q?/span>2.1Q?/span>
其中?/span>xi?/span>yi分别是向?/span>x?/span>y中的W?/span>i个|wi是第i个权重系敎ͼl是向量的l数Q以下公式定义同Q。而我们比较感兴趣的就是当p=1Ӟ该度量就是加?/span>Manhattan范数Q而当p=2时就是加权欧几里得范敎ͼ?/span>p=∞时就?/span>max1£i£l wi|xi-yi|?jin)。根据这?/span>DMQ我们定?/span>SM?/span>bmax - dp(x,y)?/span>
另外q有一些其他的定义Ҏ(gu)Q比?/span>
Q?/span>2.2Q?/span>
Q?/span>2.3Q?/span>
其他懒得列出?jin),先查阅资料,q里不详qC(jin)?/span>
对于实向量的怼性测度,实际中常用的有:(x)
内积Q?img height="48" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/2.4.JPG" width="208" border="0" /> Q?/span>2.4Q?/span>
Tanimoto度Q?img height="57" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/2.5.JPG" width="261" border="0" /> Q?/span>2.5Q?/span>
其他Q?img height="50" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/2.6.JPG" width="229" border="0" /> Q?/span>2.6Q?/span>
------------------------------------------------take a nap------------------------------------------------------------
对于L值的向量Q首先必要搞清楚一个概念,q里在《模式识别》的中文译作中我感觉译的ƈ不好理解Q所以这里展开说明一下,那就是一个叫做相依表(contingency table)的概c(din)对于一个向?/span>xQ其元素值属于有限集F={0,1,…,k-1}Q其?/span>k是正整数。o(h)A(x,y)=[aij], i, j=0,1,…,k-1是一?/span>k阶方阵,其中元素aij代表?/span>x中所?/span>i值所在的位置?/span>y的同样位|有j值的个数。附原文Q?/span>the number of places where x has the i-th symbol and y has the j-th symbol。D例来说吧Q?/span>k=3Q且x=[0,1,2,1,2,1]Q?/span>y=[1,0,2,1,0,1]Q那?/span>A(x,y) = [0 1 0, 1 2 0, 1 0 1]。以W一?/span>0(a00)Z说明Q?/span>0?/span>A中的位置军_i=0Q?/span>j=0Q在x?/span>0所在的位置是第一个位|,?/span>y?/span>0所在的位置为第二个和第五个Q两个向量中没有相同位置上的相同0元素Q因?/span>A中第一个元?/span>a00?/span>0Q?/span>A中第二个?/span>1(a01)Q所?/span>i=0Q?/span>j=1Q在x?/span>0所在的位置是第一个,?/span>y?/span>1所在的位置为第一、四、六个,因此有一个相同,所?/span>a01=1?/span>
关于计算矩阵Aq里附加java代码实现Q可参考:(x)
有了(jin)怾表的定义Q可以定义离散向量之间的不相似性测度了(jin)?/span>
汉明距离Q?img height="58" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/2.7.JPG" width="150" border="0" /> Q?/span>2.7Q?/span>
L1距离Q?img height="48" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/2.8.JPG" width="176" border="0" /> Q?/span>2.8Q?/span>
同样Q相似性测度有
Tanimoto度Q?img height="93" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/2.9.JPG" width="225" border="0" /> Q?/span>2.9Q?/span>
其中?/span>nx( ny)表示x(y)中非零元素的个数?/span>
书本往往教给我们的是基础而不是应用,q些基础知识在实际应用中才会(x)得到更多的改q和变化。也许我们不?x)简单的在聚cM应用q些度概念Q但是复杂的l合都是来源于基。因此,Ҏ(gu)度的基础概念一定要牢牢把握。在前一阶段做图像分割时Q聚cȝ法执行的前提之一度Q我做q多个实验,L1?/span>L2范数Q?/span>Tanimoto度{。当然不同的囑փ特征有不同的计算距离Ҏ(gu)QM实际的经验告诉我Q基扎实后,在应用v来是相当的顺手啊~~~Q最L(fng)不会(x)被复杂公式吓刎ͼ(j)
考虑到实例向量的特征cd往往是复杂合的Q这U情况下Q如何计近L度呢Q一些偷懒的做法是所有值都看作是实值类型,把合向量当作实向量来处理。但是现实用中Q这样做的效果往往差强人意。考虑实值类型{换成LcdQ这是著名的离散化?jin),特征的离散化操作时特征或属性过?/span>(filter)的一个重要的斚w。当然我最推荐的还是基于自己开发的应用场景Q设计相关的q邻度。这样可能通用性比较差Q但是如果是问题驱动的话Q或者目标驱动,那么q个作ؓ(f)一?/span>solution也不׃良性。当然引入模p测度的概念也是一U解x法,q里׃l说?jin),具体应用可以参看有关模糊和不定性的文章。另外一炚w要说明就是实例向量中部分特征丢失的情况,对于丢失数据Q如果我们知道数据的分布Q那么合理假设是一个替代方案,但是如果Z(jin)省事Q常用的做法是直接丢弃该实例向量Q或者好点的做法是取所有实例的q_数据作ؓ(f)该维度的替代数据?/span>
随着聚类q程的不断进行,层次逐渐深入Q聚cdl不仅仅是判断点与点之间的相似程度了(jin)Q点与集合的怼E度也需要计。而如何定义向?/span>x和聚c?/span>C之间的近L,从而判断是否将x归类?/span>C。以下三个定义经常用到?/span>
最大近d?/span>Max proximity functionQ?/span> Q?/span>4.1Q?/span>
最近d?/span>Min proximity functionQ?img height="30" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/4.2.JPG" width="197" border="0" /> Q?/span>4.2Q?/span>
q_q邻函数Average proximity functionQ?img height="49" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/4.3.JPG" width="193" border="0" /> Q?/span>4.3Q?/span>
其中nc是集?/span>C的势?/span>
可以看到Q这L(fng)定义在概느论层ơ上仍旧点视作点,聚c视作集合。另一U情况则是将聚类视作一个点Q因为点与点之间的近L度已l可以计,那么集合视Z个点Q就这个问题归U到?jin)点与点之间的问题?jin)。对聚类q行表达Q主要有以下几种表达Q?/span>
1Q?span style="font: 7pt 'Times New Roman'"> 点表达:(x)聚c视作一个点Q可以是均值点(mean vector)Q也可以是均g?/span>(mean center)Q也可以是中g?/span>(median center)。关于这几个概念和公式,M的统计教材里都有涉猎Q我׃一一枚D?jin)。(主要贴公式真的很累,怀?/span>TexQ?/span>
2Q?span style="font: 7pt 'Times New Roman'"> ^面表达:(x)U性聚cM常用。不表。有兴趣者去查资料?/span>
3Q?span style="font: 7pt 'Times New Roman'"> 球面表达:(x)球Ş聚类中常用。同上?/span>
一切的学习(fn)都ؓ(f)应用Q根据实际应用的不同Q我们在定义q种点与集合之间度时候也有很大的灉|性?/span>
同样的,对于集合与集合的度Q可以同点与集合的测度类伹{只要记住一点,那就是集合与集合间的q邻度是徏立在点与点之间的度的基上的。所以近L度的基础在点与点之间。当然聚cȝ果的优化是一个反复试验的q程Q其中也要考虑领域专家的意见?/span>
对于q邻度的学?fn),乍一看像是纯数学知识的学?fn),其实则是?gu)们开始聚cȝ法研I之前的一个夯实基的复?fn)过E?/span>
[1]Pattern Recognition Third Edition, Sergios Theodoridis, Konstantinos Koutroumbas
[2] http://zh.wikipedia.org/wiki/%E6%B5%8B%E5%BA%A6%E8%AE%BA
[3]模式识别W三?/span>, Sergios Theodoridis, Konstantinos Koutroumbas?/span>, 李晶?/span>, 王爱?/span>, 张广源等?/span>
传说Q?#8220;聚类是hcL原始的精活动,用于处理他们每天接收到的大量信息”。ؓ(f)方便q大同学学习(fn)使用Q将我学?fn)聚cL的笔记整理发布共享?/span>
“聚类是把怼的对象通过?rn)态分cȝҎ(gu)分成不同的组别或者更多的子集Q?/span>subsetQ?/span>,q样让在同一个子集中的成员对象都有相似的一些属性?#8221; —?/span>wikipedia
“聚类分析指将物理或抽象对象的集合分组成ؓ(f)q似的对象l成的多个类的分析过E。它是一U重要的人类行ؓ(f)。聚cL数据分cd不同的类或者簇q样的一个过E,所以同一个簇中的对象有很大的怼性,而不同簇间的对象有很大的相异性?/span>” ——百度百U?/span>
说白?jin),聚类Q?/span>clusteringQ是完全可以按字面意思来理解的——将相同、相伹{相q、相关的对象实例聚成一cȝq程。简单理解,如果一个数据集合包?/span>N个实例,Ҏ(gu)某种准则可以这N个实例划分ؓ(f)m个类别,每个cd中的实例都是相关的,而不同类别之间是区别的也是不相关的Q这个过E就叫聚cM(jin)?/span>
形式化一点,?img style="width: 162px; height: 22px" height="22" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/abc.JPG" width="162" border="0" />Q其中的x都是向量Q一?/span>X?/span>m聚类R?/span>X分割?/span>m个集?/span>C1, C2,…,CmQ其满下面三个条Ӟ(x)
Q?/span>1Q?img height="22" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/abcd.JPG" width="162" border="0" />
Q?/span>2Q?img height="37" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/abcde.JPG" width="70" border="0" />
Q?/span>3Q?img height="28" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/ff.JPG" width="275" border="0" />
满上述条g的同Ӟ在聚c?/span>Ci中的向量彼此怼Q而与其他cM的向量不怼?/span>
但是q种定义也只是定义了(jin)定性的聚类Q也叫做聚c?/span>(hard clustering)Q每个实?/span>x都确定的属于某个聚类。而不定性聚c,也需要定义,q就引出?jin)模p聚c?/span>(fuzzy clustering)的概念了(jin)。模p聚cMQ每个实例向?/span>x以一定的隶属度属于某个聚cR同上面的设|,X的模p聚cL?/span>X分成m个类Q由m个函?/span>uj表示Q其中满I(x)
Q?/span>1Q?img height="28" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/fff.JPG" width="214" border="0" />
Q?/span>2Q?img height="44" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/de.JPG" width="214" border="0" />
Q?/span>3Q?img height="44" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/def.JPG" width="240" border="0" />
其中q个隶属度函?img height="23" alt="" src="http://www.tkk7.com/images/blogjava_net/changedi/ew.JPG" width="45" border="0" />接q?/span>1Q说?/span>xi可能属?/span>CiQ反之如果越接近0Q则说明不可能属于Ci?/span>
当我们知道聚cL什么时Q我们下一步想知道的应该是怎么q行聚类。这一点,教材上做?jin)详l介l,补充一点自q解:(x)
1Q特征选择(feature selection)Q就像其他分cMQ务一P特征往往是一切活动的基础Q如何选取特征来尽可能的表N要分cȝ信息是一个重要问题。表达性强的特征将很媄(jing)响聚cL果。这点在以后的实验中我会(x)展示?/span>
2Q近L?/span>(proximity measure)Q当选定?jin)实例向量的特征表达后,如何判断两个实例向量怼呢?q个问题是非常关键的一个问题,在聚c过E中也有着军_性的意义Q因cL质在区分怼与不怼Q而近L度就是对q种怼性的一U定义?/span>
3Q聚cd?/span>(clustering criterion)Q定义了(jin)怼性还不够Q结合近L度,如何判断怼才是关键。直观理解聚cd则这个概念就是何时聚c,何时不聚cȝ聚类条g。当我们使用聚类法q行计算Ӟ如何聚类是算法关?j)的Q而聚与否需要一个标准,聚类准则是q个标准。(话说标准q东西一拿出来,够吓Z(jin)?/span>^_^Q?/span>
4Q聚cȝ?/span>(clustering algorithm)Q这个东西不用细说了(jin)吧,整个学习(fn)的重中之重,核心(j)的东西这里不Ԍ以后?x)细_(d)单开个头——利用近L度和聚类准则开始聚cȝq程?/span>
5Q结果验?/span>(validation of the results)Q其实对?/span>PR的作者提?gu)个过E也攑ֈ聚类d程中,我觉得有点冗余,因ؓ(f)对于验证法的正性这事应该放到算法层面吧Q可以把4Q和5Q结合至一层。因为算法正和有穷的验证本w就是算法的Ҏ(gu)嘛。(谁设计了(jin)一个算法不得证明啊Q?/span>
6Q?/span>(interpretation of the results)Q中文版?/span>PR上翻译ؓ(f)l果判定Q而我感觉字面意思就是结果解释。(聚类最l会(x)数据集分成若干个类Q做事前要有原则Q做事后要有解释Q这个就是解释了(jin)。自圆其说可能是比较好的?/span>^_^Q?/span>
整个聚类d详细的东西会(x)在以后详l介l,q里先细说一下聚cd则(虽然我感觉在上面我说的已l够l了(jin)Q。D例吧Q比如,有这样一个数据集XQ包含了(jin)四名同学的基本信息和数学成W?/span>
姓名 |
q |
班 |
数学成W |
张三 |
1 |
2 |
99 |
李四 |
2 |
2 |
95 |
张飞 |
3 |
1 |
59 |
赵云 |
2 |
1 |
90 |
聚类准则是一个分cL准,对于CZ中这样一个数据集合,如何聚类呢。当然聚cȝ可能情况有很多。比如,如果我们按照q是否为大?/span>1来分c,那么数据?/span>X分ؓ(f)两类Q?/span>{张三}Q?/span>{李四Q张飞,赵云}Q如果按照班U不同来分,分ؓ(f)两类Q?/span>{张三Q李?/span>}Q?/span>{张飞Qn?/span>}Q如果按照成l是否及(qing)格来分(假设?qing)格?/span>60分)(j)Q分两类Q?/span>{张三Q李四,赵云}Q?/span>{张飞}。当然聚cd则的设计往往是复杂的Q就看你x么划分?jin)。按照对分类思想的几何理解,数据集相当于hI间Q数据实例的特征敎ͼ本例共有4个特?/span>[姓名Q年U,班Q数学成l?/span>]Q相当于I间l度Q而实例向量对应到I间中的一个点。那么聚cd则就应该是那些神奇的^面(对应有数学函数表辑ּQ我个h认ؓ(f)q些函数q同于聚类准则Q,q些^面将数据“完美?#8221;分离开?jin)?/span>
聚类时用到的特征如何区分呢,有什么类型要求?聚类的特征按照域划分Q可以分l的特征和离散特征。其中连l特征对应的定义域是数据I间R的连l子I间Q而离散特征对应的是离散子集,另外如果L特征只包含两个特征|那么q个L特征又叫二值特征?/span>
Ҏ(gu)特征取值的相对意义又可以将特征分ؓ(f)以下四种Q标量的(Nominal)Q顺序的(Ordinal)Q区间尺度的(Interval-scaled)以及(qing)比率度?/span>(Ratio-scaled)。其中,标量特征用于~码一cȝ征的可能状态,比如人的性别Q编码ؓ(f)男和奻I天气状况~码为阴、晴和雨{。顺序特征同标量特征cMQ同h一pd状态的~码Q只是对q些~码E加U束Q即~码序是有意义的,比如对一道菜Q它的特征有{很难吃,隑Q一般,好吃Q美?/span>}几个值来定义状态,但是q些状态是有顺序意义的。这cȝ征我认ؓ(f)是标量特征的一个特定子集,或者是一个加U束的标量特征。区间尺度特征表C特征数g间的区间有意义而数值的比率无意义,l典例子是温度Q?/span>A地的温度Q?/span>20℃)(j)?/span>B圎ͼ15℃)(j)?/span>5度,q里的区间差值是有意义的Q但你不能说A地比B地热1/3Q这是无意义的。比率特征与此相反,其比率是有意义的Q经怾子是重量Q?/span>C?/span>100gQ?/span>D?/span>50gQ那?/span>C?/span>D?/span>2倍,q是有意义的。(当然?/span>C?/span>D?/span>50g也是可以的,因此可以认ؓ(f)区间度是比率尺度的一个真子集Q?/span>
在常见应用中Q包括我们^日关?j)的~程实现中,一般只定义nominal特征?/span>numeric特征Q其?/span>nominal可以?/span>string来表C,?/span>numeric可以?/span>number来表C。(weka中的attribute的特征类型就是这么定义的Q?/span>
说了(jin)q么多基本概念,最实际的话题莫q于应用?jin)。就像ؓ(f)聚类做广告一P到底我们可以在哪里应用它呢。就像引a里我提到的传说一P分类作ؓ(f)人类识别对象的一个基本活动大概与人类的意识共同存在着Q也可以说hcL能认识的本质zd之一是分类。而研I者对分类的研I又分cd分ؓ(f)有监督与无监督,其中聚类是无监督分cȝ最常用Ҏ(gu)也是l对代表性方法。设想一下,对于一l数据,或者一堆信息,计算机可以自动地其分ؓ(f)若干c,那这对于辅助人类来说l对是必要的也是有意义的。所以聚cȝ一个核?j)应用就是数据挖掘与模式识别。另外各个科学领域只要涉?qing)到分类的Q务,大家无不联想到聚c?/span>~~~Q话说我W一ơ正式地解除聚类Q还是在23教学楼听一个貌似是自动化的教授讲的信息化课E)(j)。而学者比较权威的分类聚cȝ应用分ؓ(f)四个基本的方向:(x)1Q数据去冗,卛_量数据中的冗余信息去除?/span>2Q假说生成,Z(jin)推导出数据的某些性质Q我们可以对数据q行聚类分析?/span>3Q假说检验,其实是通过聚类分析来验证某个决{的风险E度?/span>4Q基于分l的预测Q同所有预Q务一P已有的数据都聚cdcdQ新的未来数据可以用同样的规则进行识别预其所属分cR?/span>
聚类的应用非常广泛,如果按科目枚举,我是懒得|列?jin)。只要知道了(jin)其原理和目标Q其应用领域也就自然理解?jin)?/span>
聚类的基本概念就是这么些?jin),关于聚类的学习(fn)和研究已经历经几十q_(d)可以?jin)幸的一Ҏ(gu)q里的学?fn)我们可以站在很多巨人的肩膀上,而如何去改进创新扩展应用Q那是我们未来的目的,“工欲善其事,必先利其?#8221;Q这里聚cd是我们的“?#8221;?jin)?/span>
[1]Pattern Recognition Third Edition, Sergios Theodoridis, Konstantinos Koutroumbas
[2] http://baike.baidu.com/view/903740.htm?fr=ala0_1_1
[3] http://zh.wikipedia.org/zh-cn/%E6%95%B0%E6%8D%AE%E8%81%9A%E7%B1%BB
[4]数据挖掘概念与技?/span>(Data mining concepts and techniques) Jiawei Han, Micheline Kamber?/span>范明, 孟小峰译
[5]模式识别W三?/span>, Sergios Theodoridis, Konstantinos Koutroumbas?/span>, 李晶?/span>, 王爱?/span>, 张广源等?/span>
[6]数据挖掘D(Introduction to data mining) Pang-Ning Tan, Michael Steinbach, Vipin Kumar?/span>范明, 范宏?/span>{译
[7]数据挖掘实用机器学习(fn)技?/span> (Data mining practical machine learning tools and techniques) Ian H.Witten, Eibe Frank?/span>董琳{译
文章转蝲h明~~~