本發明涉及一種聚類方法,具體地,涉及一種結合類內緊致性和類間分離性的增量模糊聚類方法,屬于數據挖掘領域。
背景技術:
聚類算法將相似度高的數據對象劃分為一個簇,將相異度高的數據對象劃分為不同的簇。迄今為止,針對聚類算法的研究成果豐碩,根據數據對象在聚類中的積聚規則不同,這些算法可劃分為硬聚類和模糊聚類。在硬聚類中,每個數據對象只能完全隸屬于某一個簇;而模糊聚類則要求每個數據對象以不同的概率隸屬于多個簇。相比較而言,兩類算法各有所長,硬聚類算法簡單高效,而模糊聚類算法更符合人們對客觀世界的認知。
無論是硬聚類還是模糊聚類,大部分聚類算法只考慮類內緊致性,而忽略類間分離性,因此fcs(fuzzycompactnessandseparation)算法被提出。fcs算法保證了類內緊致性最小的同時,類間分離性最大,且具有硬聚類和模糊聚類的特性,能夠有效提升聚類精度與聚類效率。
然而fcs算法無法有效處理大規模數據與流數據,因此,本發明提出一種新的結合類內緊致性和類間分離性的增量方法。該方法通過將數據分為連續的數據塊,并按順序進行處理,使本發明可以處理大規模數據和數據流。
技術實現要素:
為了解決現有技術中存在的問題,本發明提出一種結合類內緊致性和類間分離性的增量模糊聚類方法,該方法包括以下步驟:
(1)將整個數據集分成d塊,并為每塊數據中的每個數據點分配權重1;
(2)對數據塊進行聚類處理;
(3)對每個數據塊循環執行步驟(2),直到所有數據塊處理完畢,獲取每一數據塊的聚類結果[ui1,ui2,...,uit,...,uic]和聚類質心[ai1,ai2,...,ait,...,aic],其中0<t≤c,uic表示第i個數據塊的第c類,aic表示第i個數據塊的第c個質心;為每一個質心ait賦予權重值wt,wt為整個數據塊中的數據點隸屬于聚類uit的隸屬度之和;若最后一個數據塊小于聚類個數c,則不進行聚類,將所有數據點作為質心,其權重全部為1。
(4)將上述賦過權重的質心作為一個新的數據塊d,對新數據塊d進行步驟(2)操作,得到聚類結果[u1,u2,...,ut,...,uc]和質心[a1,a2,...,at,...,ac],此質心為最終質心,每個質心原來所在類中的所有數據點都屬于它現在所在的類。
更具體地,上述步驟(2)中的聚類步驟具體如下:
1)初始化β、最大誤差值ε、最大迭代次數τmax和隸屬度矩陣ucj,將η賦值為0到1的隨機數,定義τ=1;
2)根據ηc,ucj和
3)根據ηc,ac和
4)根據β,ac和
5)更新τ=τ+1;
6)如果max(|ucj(τ)-ucj(τ-1)|)≤ε或τ=τmax,結束迭代,否則返回步驟2)。
其中c是類的個數,n是數據個數,ηc為控制第c個質心與其它質心所在類不重合的參數,ucj是第j個數據點對第c個類的隸屬度,約束條件為
為了能夠處理大規模數據和數據流,提出了本發明,該方法不但可以明顯提高處理速度,而且不會影響聚類的精確度。與現有方法相比,本發明新提出的方法可以更快更精確的處理大規模數據和數據流。
具體實施方式
為了使用單通道增量方法,需要對fcs算法進行加權。首先,定義加權的類內矩陣sifw和類間矩陣sifb,
根據sifw與sifb,得到增量fcs算法的目標函數
根據約束條件,對jifcs(u,v,a)運用拉格朗日乘子法,構造如下新的目標函數,可求得使jifcs(u,v,a)達到最小值的必要條件
對j(u,v,a)中u求偏導并讓其等于0,得
同樣的,對j(u,v,a)中a求偏導并讓其等于0,得
該方法包括以下步驟:
(1)將整個數據集分成d塊,并為每塊數據中的每個數據點分配權重1;
(2)對數據塊進行聚類處理;
(3)對每個數據塊循環執行步驟(2),直到所有數據塊處理完畢,獲取每一數據塊的聚類結果[ui1,ui2,...,uit,...,uic]和聚類質心[ai1,ai2,...,ait,...,aic],其中0<t≤c,uic表示第i個數據塊的第c類,aic表示第i個數據塊的第c個質心;為每一個質心ait賦予權重值wt,wt為整個數據塊中的數據點隸屬于聚類uit的隸屬度之和;若最后一個數據塊小于聚類個數c,則不進行聚類,將所有數據點作為質心,其權重全部為1。
(4)將上述賦過權重的質心作為一個新的數據塊d,對新數據塊d進行步驟(2)操作,得到聚類結果[u1,u2,...,ut,...,uc]和質心[a1,a2,...,at,...,ac],此質心為最終質心,每個質心原來所在類中的所有數據點都屬于它現在所在的類。
步驟(2)中聚類的具體步驟如下:
1)初始化β、最大誤差值ε、最大迭代次數τmax和隸屬度矩陣ucj,將η賦值為0到1的隨機數,定義τ=1;
2)根據ηc,ucj和
3)根據ηc,ac和
4)根據β,ac和
5)更新τ=τ+1;
6)如果max(|ucj(τ)-ucj(τ-1)|)≤ε或τ=τmax,結束迭代,否則返回步驟2)。
以statlogsegmentation數據集為例,該數據集具有2310個數據點,19個屬性,劃分成7個類。對該數據集進行聚類方法如下:
將該數據集分成10塊,每塊具有231個數據點,對每個數據點分配權重1;對每個數據塊分別進行聚類處理,總共得到70個類和其對應的70個質心,每個質心分配的權重為該類數據點隸屬度之和;將這70個質心作為70個類的代表,當做一個新的數據塊進行聚類處理,最終得到7個類和質心即為聚類結果。
該方法將數據集進行分塊處理,減少了數據量即聚類迭代次數,因此提升了聚類效率,且經實驗可得,本方法的f-measure值比傳統的ofcm方法和ohfcm方法分別提升了15.4%和42.9%。