<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛(ài)生活是一切藝術(shù)的開(kāi)始

    統(tǒng)計(jì)

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個(gè)公司技術(shù)

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評(píng)論排行榜

    聚類算法學(xué)習(xí)筆記(三)——順序聚類

       

    1.    順序聚類

    事實(shí)上,將n個(gè)對(duì)象,聚類到k個(gè)聚類中這件事本身是一個(gè)NP難問(wèn)題。熟悉組合數(shù)學(xué)應(yīng)該知道這個(gè)問(wèn)題的解事第二類Stirling數(shù):。這樣問(wèn)題也就出現(xiàn)了,如果k值固定,那么計(jì)算還是可行的,如果k值不固定,就要對(duì)所有的可能k都進(jìn)行計(jì)算,那運(yùn)行時(shí)間可想而知了。然而并不是所有的可行聚類方案都是合理的,所謂的合理,我理解就是說(shuō)接近你的聚類目標(biāo)的,之所以我們要分類,必然有初始動(dòng)機(jī),那么可以根據(jù)這個(gè)動(dòng)機(jī)制定可行的聚類方案,這樣,復(fù)雜度的問(wèn)題就回避了。

    順序算法(sequential algorithms)是一種非常簡(jiǎn)單的聚類算法,大多數(shù)都至少將所有特征向量使用一次或幾次,最后的結(jié)果依賴于向量參與算法的順序。這種聚類算法一般是不預(yù)先知道聚類數(shù)量k的,但有可能給出一個(gè)聚類數(shù)上界q。本文將主要介紹基本順序算法(Basic Sequential Algorithmic Scheme,BSAS)和其幾個(gè)變種,并給出代碼實(shí)現(xiàn)。

    首先看BSAS,這個(gè)算法方案需要用戶定義參數(shù):不相似性閾值θ和允許的最大聚類數(shù)q。算法的基本思想:由于要考慮每個(gè)新向量,根據(jù)向量到已有聚類的距離,將它分配到一個(gè)已有的聚類中,或者一個(gè)新生成的聚類中。算法的偽碼描述如下:

    1.       m=1   /*{聚類數(shù)量}*/

    2.       Cm={x1}

    3.       For i=2 to N

    4.           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.           如果需要,更新向量表達(dá)

    11.       End {if}

    12.   End {for}

    由上面的描述可以看出BSAS算法對(duì)向量順序非常依賴,無(wú)論是聚類數(shù)量還是聚類本身,不同的向量順序會(huì)導(dǎo)致完全不同的聚類結(jié)果。另一個(gè)影響聚類算法結(jié)果的重要因素是閾值θ的選擇,這個(gè)值直接影響最終聚類的數(shù)量,如果θ太小,就會(huì)生成很多不必要的聚類,因?yàn)楹芏嗲闆r下向量與聚類的合并條件都受到θ的限制,而如果θ太大,則聚類數(shù)量又會(huì)不夠。BSAS比較適合致密聚類,其對(duì)數(shù)據(jù)集進(jìn)行一次掃描,每次迭代中計(jì)算當(dāng)前向量與聚類間的距離,因?yàn)樽詈蟮木垲悢?shù)m被認(rèn)為遠(yuǎn)小于N,故BSAS的時(shí)間復(fù)雜度為O(N)

    由于BSAS算法依賴于q,因此這里介紹一種自動(dòng)估計(jì)聚類數(shù)q的簡(jiǎn)單方法,該方法也適用于其他的聚類算法,令BSAS(Θ)為具有給定不相似閾值θ的BSAS算法。

    1.       For Θ=a to b step c

    2.          算法BSAS(Θ)執(zhí)行s,每一次都使用不同的順序表示數(shù)據(jù)。

    3.          估計(jì)聚類數(shù),mΘ作為從sBSAS(Θ)算法得來(lái)的最常出現(xiàn)的聚類數(shù)。

    4.       Next Θ

    其中ab是數(shù)據(jù)集的所有向量對(duì)的最小和最大不相似級(jí)別,c的選擇直接受d(x,C)的影響。

    2. 算法實(shí)現(xiàn)

    package util.clustering;

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;

    /**
     * 
    @author Jia Yu
     *
     
    */

    public class BSAS <extends Clusterable<T>> {

        
    /**
         * Basic Sequential Algorithmic Scheme
         * 適用于致密聚類
         
    */

        
        
    public BSAS() {
        }

        
        
    /**
         * Basic Sequential Algorithmic Scheme
         * 考慮樣本空間中每個(gè)向量,根據(jù)向量到已有的聚類中心的距離,將它分配到一個(gè)已有聚類中,或者一個(gè)新生成的聚類中。
         * time complexity is O(N)
         * BSAS算法對(duì)整個(gè)數(shù)據(jù)集只進(jìn)行一次掃描。
         * 
    @param points 待聚類的向量
         * 
    @param Phi 用戶定義的不相似性閾值
         * 
    @param q 用戶定義的允許的最大聚類數(shù)
         * 
    @return
         
    */

        
    public List<Cluster<T>> cluster(final Collection<T> points,final double Phi,final int q){
            
    int m = 0;
            
    int n = points.size();
            
    double disOfXandCj = 0;
            
    double disOfXandCk;
            List
    <T> ptList = new ArrayList<T>(points);
            Cluster
    <T> C = new Cluster<T>(ptList.get(m));
            C.addPoint(ptList.get(m));
            Cluster
    <T> Ck = C;
            List
    <Cluster<T> > cList = new ArrayList<Cluster<T> >();
            cList.add(C);
            
    for(int i=1;i<n;i++){
                disOfXandCk 
    = Double.MAX_VALUE;
                Iterator
    <Cluster<T> > cListIt = cList.iterator(); 
                
    while(cListIt.hasNext()){
                    Cluster
    <T> Cj = cListIt.next();
                    disOfXandCj 
    = getDisOfPointAndCluster(ptList.get(i),Cj);
                    
    if(disOfXandCk > disOfXandCj){
                        disOfXandCk 
    = disOfXandCj;
                        Ck 
    = Cj;
                    }

                }

                
    if(disOfXandCk > Phi && m < q){            //不滿足條件,則產(chǎn)生新的聚類
                    m++;
                    Cluster
    <T> cm = new Cluster<T>(ptList.get(i));
                    cm.addPoint(ptList.get(i));
                    cList.add(cm);
                }

                
    else{            //滿足條件的將點(diǎn)加入已有聚類,并更新聚類中心
                    if(cList.contains(Ck))
                        cList.remove(Ck);
                    Ck.addPoint(ptList.get(i));
                    
    final T newCenter = Ck.getCenter().centroidOf(Ck.getPoints());
                    Cluster
    <T> tempCluster = new Cluster<T>(newCenter);
                    
    for(int j=0;j<Ck.getPoints().size();j++){
                        tempCluster.addPoint(Ck.getPoints().get(j));
                    }

                    cList.add(tempCluster);
                }

            }

            
    return cList;
        }


        
    /**
         * 選擇不同的測(cè)度,有不同的算法。
         * 這里默認(rèn)dis(x,C)為點(diǎn)到聚類中心的距離。
         
    */

        
    private double getDisOfPointAndCluster(T t, Cluster<T> cj) {
            
    return t.distanceFrom(cj.getCenter());
        }


    }

    3. 程序框架

           我的聚類程序主要擴(kuò)展自Apache Commons Math開(kāi)源框架,下面是其結(jié)構(gòu),我簡(jiǎn)單加入了Clusterer類作為抽象模板類,使用模板方法模式修改了框架,為后續(xù)加入的例如BSAS算法提供模板。

    4. 小結(jié)

           順序算法簡(jiǎn)單易實(shí)現(xiàn),對(duì)于學(xué)習(xí)聚類來(lái)說(shuō)是入門的最好選擇,考慮到篇幅的限制,不能將代碼全部發(fā)上來(lái),如果有需要可以向我索要,Apache Commons Math框架可以到Apache的網(wǎng)站上下載。另外還有很多介紹不夠詳細(xì),感興趣的朋友可以繼續(xù)深入研究BSAS的擴(kuò)展。

    5. 參考文獻(xiàn)及推薦閱讀

    [1]Pattern Recognition Third Edition, Sergios Theodoridis, Konstantinos Koutroumbas

    [2]模式識(shí)別第三版, Sergios Theodoridis, Konstantinos Koutroumbas, 李晶皎, 王愛(ài)俠, 張廣源等譯

    posted on 2010-03-06 15:02 changedi 閱讀(4874) 評(píng)論(15)  編輯  收藏 所屬分類: 聚類分析

    評(píng)論

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2010-03-07 10:04 wycg1984

    你好 能把 這個(gè)的代碼發(fā)給我嗎 sheliang84@gmail.com 謝謝  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2010-03-07 16:58 changedi

    @wycg1984
    已發(fā)送,并附加了相關(guān)的代碼,希望能有所幫助。  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2010-03-24 11:22 杜薇

    你好,可以把這個(gè)代碼發(fā)我一分嗎?謝謝!283532423@qq.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2010-05-27 12:23 cuepower

    你好,可以把這個(gè)的代碼也發(fā)給我一份嗎?angelala508@163.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2010-12-28 18:39 change folder

    hi, 能否也發(fā)我一份兒~ 麻煩您了~~Thanks fafaisland@gmail.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2011-04-26 10:59 劉濤

    你好能否源碼發(fā)給我一份
    542754187@qq.com
    謝謝  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2011-05-23 13:19 董詩(shī)浩

    寒... JAVA看的不是很懂...

    有木有 C plus plus 或者 純C 的代碼呢?

    謝謝了.....kis2009dsh@vip.qq.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類[未登錄](méi) 2011-05-26 12:57 小愛(ài)

    有沒(méi)有matlab程序呢?  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2011-05-27 09:19 changedi

    用C寫應(yīng)該不難~~matlab自帶層次聚類,kmeans,各種聚類網(wǎng)上一搜一大堆~~  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2012-01-09 17:16 王晶

    你好,可以把這個(gè)聚類代碼發(fā)給我下嗎?謝謝562042760@qq.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2012-04-17 21:46 蝴蝶

    您好,能否把這個(gè)代碼發(fā)我一份呢?謝謝872315480@qq.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2012-06-26 13:08 muyefei

    能否把代碼發(fā)給我一份,謝謝,muyefei@qq.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類[未登錄](méi) 2012-10-22 14:32 Eric

    可否將代碼發(fā)給我一份,謝謝,761989639@qq.com  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2013-02-02 11:49 winwordll

    樓主邏輯清晰,寫的非常清楚,看后收獲極大,看這個(gè)學(xué)習(xí)筆記,真是比看多少聚類算法的網(wǎng)頁(yè)都有用  回復(fù)  更多評(píng)論   

    # re: 聚類算法學(xué)習(xí)筆記(三)——順序聚類 2013-10-22 16:02 歲月的帆

    您好,能否把這個(gè)代碼發(fā)我一份呢?謝謝872651253@qq.com   回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 一级免费黄色毛片| 无码日韩精品一区二区免费暖暖 | 97人伦色伦成人免费视频| 亚洲自偷自偷在线制服| a在线视频免费观看| 亚洲日本一区二区三区| 18女人毛片水真多免费| 99亚洲精品卡2卡三卡4卡2卡| 精品亚洲一区二区三区在线播放| a级片免费观看视频| 亚洲人成网站色7799| ZZIJZZIJ亚洲日本少妇JIZJIZ| 亚洲最大免费视频网| 特色特黄a毛片高清免费观看| 亚洲国产综合第一精品小说| 亚洲国产精品成人久久蜜臀 | 噼里啪啦免费观看高清动漫4| 日韩免费高清一级毛片| 亚洲国产人成在线观看| 亚洲精品乱码久久久久久按摩| 免费国产作爱视频网站| 国内少妇偷人精品视频免费| 国产AV无码专区亚洲AV蜜芽 | baoyu777永久免费视频 | 豆国产96在线|亚洲| 亚洲一区二区三区日本久久九| 免费人妻av无码专区| 在线天堂免费观看.WWW| 免费视频精品一区二区三区| 污视频网站在线观看免费| 亚洲女人18毛片水真多| 亚洲AV无一区二区三区久久| 亚洲成人一区二区| 四虎成人免费观看在线网址| 18以下岁毛片在免费播放| 久久免费99精品国产自在现线| 国产成人亚洲精品播放器下载| 亚洲一本之道高清乱码| 亚洲精品综合久久中文字幕 | 久久久综合亚洲色一区二区三区| 亚洲精品成人片在线观看|