本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,具體而言,涉及一種數(shù)據(jù)聚類方法、裝置、計算機(jī)可讀介質(zhì)和電子設(shè)備。
背景技術(shù):
在用戶畫像標(biāo)簽?zāi)P蜆?gòu)建的過程中,提取用戶特征并將特征數(shù)據(jù)標(biāo)準(zhǔn)化之后,有很多基于聚類進(jìn)行標(biāo)簽構(gòu)建的場景,比如促銷敏感度聚類、評論敏感度聚類、用戶忠誠度聚類等。聚類就是在相應(yīng)用戶特征下,按照某個特定標(biāo)準(zhǔn)把用戶集分成不同的類或簇,使得同一個類或簇內(nèi)的用戶特征相似性盡可能大或距離盡可能小,同時不在同一個類或簇中的用戶特征差異性也盡可能地大。簡而言之,聚類后同一類的數(shù)據(jù)盡可能聚集到一起,不同類數(shù)據(jù)盡量分離。在這些場景中需要實(shí)現(xiàn)準(zhǔn)確地對用戶進(jìn)行聚類的功能。
目前,在進(jìn)行數(shù)據(jù)聚類時,一般采用k-means聚類算法。k-means算法接收參數(shù)k,然后將事先輸入的n個數(shù)據(jù)對象劃分為k個聚類以使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。
但是,k-means算法存在如下缺陷:
(1)聚類中心的個數(shù)k需要事先給定,但在實(shí)際中這個k值的選定是非常難以估計的,很多時候事先并不知道給定的數(shù)據(jù)集應(yīng)該分成多少個類別才最合適;
(2)在k-means算法中,需要人為地確定初始聚類中心,不同的初始聚類中心可能導(dǎo)致完全不同的聚類結(jié)果,一旦初始值選擇的不合適,可能無法得到有效的聚類結(jié)果;
(3)k-means算法對異常值敏感,不能檢測出離群點(diǎn),而離群點(diǎn)有時對聚類中心的準(zhǔn)確率有很大影響;
(4)k-means算法需要不斷地進(jìn)行樣本分類調(diào)整,不斷地計算調(diào)整后的新的聚類中心,收斂較慢且聚類時間復(fù)雜度較高,當(dāng)數(shù)據(jù)量非常大時,算法的時間開銷非常大;
(5)k-means算法需要對全量數(shù)據(jù)進(jìn)行多次掃描,對于實(shí)時數(shù)據(jù)無法進(jìn)行聚類。
因此,需要一種新的數(shù)據(jù)聚類方案,以至少在一定程度上克服上述的一個或者多個問題。
需要說明的是,在上述背景技術(shù)部分公開的信息僅用于加強(qiáng)對本發(fā)明的背景的理解,因此可以包括不構(gòu)成對本領(lǐng)域普通技術(shù)人員已知的現(xiàn)有技術(shù)的信息。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種數(shù)據(jù)聚類方法、裝置、計算機(jī)可讀介質(zhì)和電子設(shè)備,進(jìn)而至少在一定程度上克服由于相關(guān)技術(shù)的限制和缺陷而導(dǎo)致的一個或者多個問題。
本發(fā)明的其他特性和優(yōu)點(diǎn)將通過下面的詳細(xì)描述變得顯然,或部分地通過本發(fā)明的實(shí)踐而習(xí)得。
根據(jù)本發(fā)明的第一方面,提供了一種數(shù)據(jù)聚類方法,包括:獲取待聚類的數(shù)據(jù)集;計算所述數(shù)據(jù)集中的各個數(shù)據(jù)與已有類別的聚類中心之間的距離;若所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于距離閾值,則將所述任一數(shù)據(jù)歸類到所述任一類別中;若所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離都大于所述距離閾值,則創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。
在本發(fā)明的一些實(shí)施例中,基于前述方案,還包括:在計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離之前,若不存在已有類別,則創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。
在本發(fā)明的一些實(shí)施例中,基于前述方案,還包括:在將所述任一數(shù)據(jù)歸類到所述任一類別或所述新的類別中之后,更新所述任一類別或所述新的類別的聚類中心。
在本發(fā)明的一些實(shí)施例中,基于前述方案,計算所述數(shù)據(jù)集中的各個數(shù)據(jù)與已有類別的聚類中心之間的距離的步驟,包括:針對所述數(shù)據(jù)集中的各個數(shù)據(jù),依次計算所述各個數(shù)據(jù)與已有類別的聚類中心之間的距離。
在本發(fā)明的一些實(shí)施例中,基于前述方案,依次計算所述各個數(shù)據(jù)與已有類別的聚類中心之間的距離的步驟,包括:計算所述數(shù)據(jù)集中的第一數(shù)據(jù)與已有類別的聚類中心之間的距離;在根據(jù)所述第一數(shù)據(jù)與已有類別的聚類中心之間的距離對所述第一數(shù)據(jù)歸類,且對歸類后的聚類中心更新之后,再計算所述數(shù)據(jù)集中的第二數(shù)據(jù)與已有類別的聚類中心之間的距離。
在本發(fā)明的一些實(shí)施例中,基于前述方案,還包括:在計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離的過程中,若確定所述任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于所述距離閾值,則停止計算所述任一數(shù)據(jù)與已有的其它類別的聚類中心之間的距離。
在本發(fā)明的一些實(shí)施例中,基于前述方案,計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離,包括:計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離,獲得所述任一數(shù)據(jù)與所述所有類別的聚類中心之間的最短距離;判斷所述最短距離是否小于或等于所述距離閾值;若所述最短距離小于或等于所述距離閾值,則將所述最短距離對應(yīng)的類別作為所述任一類別。
在本發(fā)明的一些實(shí)施例中,基于前述方案,還包括:從所述數(shù)據(jù)集中選取部分?jǐn)?shù)據(jù)作為樣本數(shù)據(jù)集合;計算所述樣本數(shù)據(jù)集合中兩兩數(shù)據(jù)之間的距離,以得到所述樣本數(shù)據(jù)集合的距離集合;根據(jù)所述距離集合,確定所述距離集合服從的二維混合高斯分布的概率密度函數(shù);根據(jù)所述概率密度函數(shù)確定所述距離閾值。
在本發(fā)明的一些實(shí)施例中,基于前述方案,根據(jù)所述概率密度函數(shù)確定所述距離閾值的步驟,包括:計算所述概率密度函數(shù)的極小值點(diǎn),其中,所述概率密度函數(shù)中的任一點(diǎn)的橫坐標(biāo)表示距離值;將所述極小值點(diǎn)的橫坐標(biāo)作為所述距離閾值。
根據(jù)本發(fā)明的第二方面,提供了一種數(shù)據(jù)聚類裝置,包括:獲取單元,用于獲取待聚類的數(shù)據(jù)集;計算單元,用于計算所述數(shù)據(jù)集中的各個數(shù)據(jù)與已有類別的聚類中心之間的距離;處理單元,用于在所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于距離閾值時,將所述任一數(shù)據(jù)歸類到所述任一類別中,并用于在所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離都大于所述距離閾值時,創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。
根據(jù)本發(fā)明的第三方面,提供了一種計算機(jī)可讀介質(zhì),其上存儲有計算機(jī)程序,所述程序被處理器執(zhí)行時實(shí)現(xiàn)如上述第一方面所述的數(shù)據(jù)聚類方法。
根據(jù)本發(fā)明的第四方面,提供了一種電子設(shè)備,包括:一個或多個處理器;存儲裝置,用于存儲一個或多個程序,當(dāng)所述一個或多個程序被所述一個或多個處理器執(zhí)行時,使得所述一個或多個處理器實(shí)現(xiàn)如上述第一方面所述的數(shù)據(jù)聚類方法。
在本發(fā)明的一些實(shí)施例所提供的技術(shù)方案中,通過在確定數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離都大于距離閾值時,創(chuàng)建新的類別,并將該數(shù)據(jù)歸類到創(chuàng)建的新的類別中,使得能夠根據(jù)待聚類的數(shù)據(jù)集的實(shí)際聚類情況靈活地調(diào)整實(shí)際聚類個數(shù)。并且本發(fā)明實(shí)施例的技術(shù)方案在不存在已有類別時,可以創(chuàng)建新的類別,使得在進(jìn)行數(shù)據(jù)聚類時,無需事先給定聚類個數(shù),避免了事先給定不合適的聚類個數(shù)而影響數(shù)據(jù)聚類的結(jié)果。同時,本發(fā)明實(shí)施例的技術(shù)方案也無需人為指定初始聚類中心,避免了初始聚類中心選取有誤而對最終的聚類結(jié)果產(chǎn)生不良影響。
在本發(fā)明的一些實(shí)施例所提供的技術(shù)方案中,能夠通過對待聚類的數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行一次掃描處理即可完成數(shù)據(jù)聚類操作,有效降低了數(shù)據(jù)聚類過程所花費(fèi)的時間。
在本發(fā)明的一些實(shí)施例所提供的技術(shù)方案中,通過根據(jù)二維混合高斯分布的概率密度函數(shù)來確定距離閾值,使得能夠根據(jù)待聚類數(shù)據(jù)集的實(shí)際情況自動實(shí)現(xiàn)距離閾值的選取,避免了手動選擇距離閾值而導(dǎo)致費(fèi)時且選取不合適的問題。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本發(fā)明。
附圖說明
此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本發(fā)明的實(shí)施例,并與說明書一起用于解釋本發(fā)明的原理。顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。在附圖中:
圖1示意性示出了根據(jù)本發(fā)明的第一個實(shí)施例的數(shù)據(jù)聚類方法的流程圖;
圖2示出了根據(jù)本發(fā)明的實(shí)施例的計算數(shù)據(jù)集合中兩兩元素之間的距離的示意圖;
圖3示出了根據(jù)本發(fā)明的實(shí)施例的距離集合服從的二維混合高斯分布的概率密度函數(shù)的曲線示意圖;
圖4示意性示出了根據(jù)本發(fā)明的第二個實(shí)施例的數(shù)據(jù)聚類方法的流程圖;
圖5示意性示出了根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)聚類裝置的框圖;
圖6示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施例的電子設(shè)備的計算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
現(xiàn)在將參考附圖更全面地描述示例實(shí)施方式。然而,示例實(shí)施方式能夠以多種形式實(shí)施,且不應(yīng)被理解為限于在此闡述的范例;相反,提供這些實(shí)施方式使得本發(fā)明將更加全面和完整,并將示例實(shí)施方式的構(gòu)思全面地傳達(dá)給本領(lǐng)域的技術(shù)人員。
此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個或更多實(shí)施例中。在下面的描述中,提供許多具體細(xì)節(jié)從而給出對本發(fā)明的實(shí)施例的充分理解。然而,本領(lǐng)域技術(shù)人員將意識到,可以實(shí)踐本發(fā)明的技術(shù)方案而沒有特定細(xì)節(jié)中的一個或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細(xì)示出或描述公知方法、裝置、實(shí)現(xiàn)或者操作以避免模糊本發(fā)明的各方面。
附圖中所示的方框圖僅僅是功能實(shí)體,不一定必須與物理上獨(dú)立的實(shí)體相對應(yīng)。即,可以采用軟件形式來實(shí)現(xiàn)這些功能實(shí)體,或在一個或多個硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。
附圖中所示的流程圖僅是示例性說明,不是必須包括所有的內(nèi)容和操作/步驟,也不是必須按所描述的順序執(zhí)行。例如,有的操作/步驟還可以分解,而有的操作/步驟可以合并或部分合并,因此實(shí)際執(zhí)行的順序有可能根據(jù)實(shí)際情況改變。
圖1示意性示出了根據(jù)本發(fā)明的第一個實(shí)施例的數(shù)據(jù)聚類方法的流程圖。
參照圖1,根據(jù)本發(fā)明的第一個實(shí)施例的數(shù)據(jù)聚類方法,包括:
步驟s10,獲取待聚類的數(shù)據(jù)集。
步驟s12,計算所述數(shù)據(jù)集中的各個數(shù)據(jù)與已有類別的聚類中心之間的距離。
根據(jù)本發(fā)明的示例性實(shí)施例,步驟s12具體包括:針對數(shù)據(jù)集中的各個數(shù)據(jù),依次計算所述各個數(shù)據(jù)與已有類別的聚類中心之間的距離。
在本發(fā)明的實(shí)施例中,依次計算所述各個數(shù)據(jù)與已有類別的聚類中心之間的距離的步驟,包括:計算所述數(shù)據(jù)集中的第一數(shù)據(jù)與已有類別的聚類中心之間的距離;在根據(jù)所述第一數(shù)據(jù)與已有類別的聚類中心之間的距離對所述第一數(shù)據(jù)歸類,且對歸類后的聚類中心更新之后,再計算所述數(shù)據(jù)集中的第二數(shù)據(jù)與已有類別的聚類中心之間的距離。
在該實(shí)施例中,當(dāng)將數(shù)據(jù)集中的某一數(shù)據(jù)歸類之后,為了保證后續(xù)進(jìn)行聚類操作的準(zhǔn)確性,需要對聚類中心進(jìn)行更新。當(dāng)聚類中心更新之后,再計算數(shù)據(jù)集中的其它數(shù)據(jù)與已有類別的聚類中心之間的距離。
在計算數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離時,本發(fā)明提出了如下兩種方式來確定該任一數(shù)據(jù)應(yīng)該歸類到的類別:
方式一:
在計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離的過程中,若確定所述任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于所述距離閾值,則停止計算所述任一數(shù)據(jù)與已有的其它類別的聚類中心之間的距離。
在方式一中,計算任一數(shù)據(jù)與已有類別的聚類中心之間的距離時,可以是依次進(jìn)行計算,也可以是同時進(jìn)行計算,而不管是如何進(jìn)行計算,當(dāng)確定該數(shù)據(jù)與任一類別的聚類中心之間的距離小于或等于距離閾值時,就停止計算該數(shù)據(jù)與已有的其它類別的聚類中心之間的距離。這種方式可以縮短計算時間,提高聚類效率。
方式二:
在本發(fā)明的一些實(shí)施例中,基于前述方案,計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離,包括:計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離,獲得所述任一數(shù)據(jù)與所述所有類別的聚類中心之間的最短距離;判斷所述最短距離是否小于或等于所述距離閾值;若所述最短距離小于或等于所述距離閾值,則將所述最短距離對應(yīng)的類別作為所述任一類別。
在方式二中,計算任一數(shù)據(jù)與已有類別的聚類中心之間的距離時,可以是依次進(jìn)行計算,也可以是同時進(jìn)行計算,而不管是如何進(jìn)行計算,都需要計算出該數(shù)據(jù)與所有類別的聚類中心之間的距離,然后選擇出最小距離,若該最小距離小于或等于距離閾值,則選擇該最小距離對應(yīng)的類別進(jìn)行歸類。這種方式可以找到更合適的類別來進(jìn)行聚類,提高了聚類的準(zhǔn)確度。
繼續(xù)參照圖1,所述的數(shù)據(jù)聚類方法還包括:
步驟s14,若所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于距離閾值,則將所述任一數(shù)據(jù)歸類到所述任一類別中。
步驟s16,若所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離都大于所述距離閾值,則創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。
此外,所述的數(shù)據(jù)聚類方法還可以包括:在計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離之前,若不存在已有類別,則創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。
需要說明的是,在將所述任一數(shù)據(jù)歸類到所述任一類別或所述新的類別中之后,更新所述任一類別或所述新的類別的聚類中心。
對于上述的距離閾值,本發(fā)明實(shí)施例提供了如下的計算方法:
在本發(fā)明的實(shí)施例中,從所述數(shù)據(jù)集中選取部分?jǐn)?shù)據(jù)作為樣本數(shù)據(jù)集合;計算所述樣本數(shù)據(jù)集合中兩兩數(shù)據(jù)之間的距離,以得到所述樣本數(shù)據(jù)集合的距離集合;根據(jù)所述距離集合,確定所述距離集合服從的二維混合高斯分布的概率密度函數(shù);根據(jù)所述概率密度函數(shù)確定所述距離閾值。
在本發(fā)明的一些實(shí)施例中,基于前述方案,根據(jù)所述概率密度函數(shù)確定所述距離閾值的步驟,包括:計算所述概率密度函數(shù)的極小值點(diǎn),其中,所述概率密度函數(shù)中的任一點(diǎn)的橫坐標(biāo)表示距離值;將所述極小值點(diǎn)的橫坐標(biāo)作為所述距離閾值。
為了進(jìn)一步闡述本發(fā)明實(shí)施例的技術(shù)方案,以下結(jié)合圖2至圖4對本發(fā)明實(shí)施例的技術(shù)方案進(jìn)行詳細(xì)說明:
本發(fā)明實(shí)施例的基本思想是:對于一個數(shù)據(jù)集合,同一個類別中數(shù)據(jù)之間的距離(即類內(nèi)距離)較小,相似度較大;不同類別的數(shù)據(jù)之間的距離(即類間距離)較大,相似度較小。因此,可以設(shè)定一個距離閾值th,若兩個數(shù)據(jù)點(diǎn)之間的距離小于該閾值,則將這兩個數(shù)據(jù)點(diǎn)歸為一類。
公式表示為:
即對于類別g中的每一個數(shù)據(jù)點(diǎn)sj,若si與sj之間的距離都小于一定的距離閾值th,則將si歸為類別g中的數(shù)據(jù)點(diǎn)。
通常情況下,可以通過反復(fù)試驗(yàn)觀察聚類結(jié)果來調(diào)整距離閾值;但由于不同的聚類場景下數(shù)據(jù)特征差異較大,在某一個場景下適用的距離閾值并不適用于其他場景;而且在數(shù)據(jù)量大的情況下手工調(diào)整距離閾值的過程比較費(fèi)時。為了解決該問題,如何自動選取距離閾值(相似度閾值)成為算法的關(guān)鍵。
經(jīng)過反復(fù)實(shí)驗(yàn)發(fā)現(xiàn),數(shù)據(jù)集合中各個數(shù)據(jù)點(diǎn)之間的距離集合服從二維混合高斯分布,而相應(yīng)的二維混合高斯分布的概率密度函數(shù)曲線的極小值點(diǎn)的橫坐標(biāo)(其橫坐標(biāo)表示距離值)可作為聚類的距離閾值??梢院唵卫斫鉃轭悆?nèi)距離集合服從一個均值小、方差大的正態(tài)分布,類間距離集合服從一個均值大、方差小的正態(tài)分布,兩個正太分布的概率密度函數(shù)曲線的交點(diǎn)即為極小值點(diǎn)。
在輸入數(shù)據(jù)量大的情況下,計算兩兩之間的距離所需的計算量太大,通常情況下計算條件不允許,故考慮隨機(jī)選取部分輸入數(shù)據(jù),再計算它們之間相互的距離作為距離集合。
在本發(fā)明的示例性實(shí)施例中,設(shè)輸入數(shù)據(jù)集合為data[n],智能選取距離閾值的具體步驟如下:
(1)隨機(jī)選取部分樣本集合,數(shù)量記為m;
(2)計算樣本數(shù)據(jù)集合中兩兩之間的距離,data[i]與data[j]之間的距離設(shè)為d[i][j],樣本兩兩之間的距離集合為d[m][m];
(3)將d[m][m]作為輸入,在matlab中基于輸入數(shù)據(jù)集合自動進(jìn)行參數(shù)估計并模擬出該數(shù)據(jù)集合服從的二維混合高斯分布的概率密度函數(shù)f;
(4)將概率密度函數(shù)f的極小值點(diǎn)的橫坐標(biāo)作為距離閾值th。
如圖2所示,對于一個數(shù)據(jù)集合,計算集合中元素兩兩之間的距離,將這些距離作為一個距離集合。該距離集合服從二維混合高斯分布,相應(yīng)的概率密度函數(shù)曲線如圖3所示,曲線的極小值點(diǎn)的橫坐標(biāo)即可作為距離閾值。
在距離閾值選定之后,便可對數(shù)據(jù)集進(jìn)行聚類,以將數(shù)據(jù)點(diǎn)之間的距離小于距離閾值的元素歸為一類。由于本發(fā)明實(shí)施例中的聚類算法只需掃描一遍數(shù)據(jù)便可完成聚類,故可以擴(kuò)展用于流式聚類,具體流程如圖4所示,包括如下步驟:
步驟s402,將當(dāng)前類別集合g初始化為空,將距離閾值記為th。需要說明的是,對類別集合g初始化之后,類別集合g里面的類別可以是0個,也可以預(yù)設(shè)若干個類別。
步驟s404,依次掃描數(shù)據(jù)集中每一個元素。
步驟s406,獲取數(shù)據(jù)集中的元素。
步驟s408,若數(shù)據(jù)集合中的元素已掃描結(jié)束,則算法結(jié)束;否則執(zhí)行步驟s410。
步驟s410,計算當(dāng)前元素與當(dāng)前類別集合g中每個類別聚類中心的距離,將其中最小的距離記為d,相應(yīng)的類別記為g。
步驟s412,判斷d≤th且g不為空是否成立,若是,則執(zhí)行步驟s414;否則執(zhí)行步驟s416。
步驟s414,將當(dāng)前元素歸類到類別g,并更新類別g的聚類中心。然后返回步驟s406。
步驟s416,新建一個類別h,將當(dāng)前元素歸類到類別h,并更新類別h的聚類中心,將新建的類別h歸入g中。然后返回步驟s406。
需要說明的是,在圖4所示的流程中,是計算當(dāng)前元素與類別集合g中每個類別聚類中心的距離,確定其中的最小距離,若該最小距離小于或等于距離閾值th,則將當(dāng)前元素歸類到類別g中。
在本發(fā)明的其它實(shí)施例中,也可以在計算當(dāng)前元素與類別集合g中每個類別聚類中心的距離時,將確定的第一個距離小于或等于距離閾值th的類別作為當(dāng)前元素將要?dú)w類到的類別,這樣可以縮短計算時間。
基于圖4所示的實(shí)施例,假設(shè)輸入數(shù)據(jù)集合的數(shù)據(jù)量為n,那么圖4所示的實(shí)施例的算法時間復(fù)雜度為o(n*logn),其中,n為記錄數(shù),logn為通常情況下聚類之后的類別個數(shù)。而k-means算法的時間復(fù)雜度為o(k*n*t),其中,k為簇的數(shù)目(即聚類后的類別個數(shù)),n為記錄數(shù),t為迭代次數(shù)。可見,本發(fā)明實(shí)施例的技術(shù)方案相比于k-means算法,其時間復(fù)雜度大幅下降,在大數(shù)據(jù)量場景下的優(yōu)勢明顯。
綜上,本發(fā)明實(shí)施例的數(shù)據(jù)聚類方案具有如下優(yōu)點(diǎn):
(1)本發(fā)明實(shí)施例提出的數(shù)據(jù)聚類算法無需事先給定聚類個數(shù),也無需人為確定初始聚類中心,而是通過自動分析數(shù)據(jù)分布情況智能決定聚類個數(shù)。同時也無需給定初始聚類中心,避免了在初始聚類中心選取失誤的情況下對最終聚類結(jié)果的不良影響。
(2)相對于其它聚類算法,通常情況下使用本算法聚類完成后所生成的類別較多,這是因?yàn)橛幸恍╊悇e所包含的數(shù)據(jù)點(diǎn)個數(shù)很少,在多數(shù)場景下上可將這些類別視為離群點(diǎn)類別,這樣就產(chǎn)生了自動檢測離群點(diǎn)的效果,而包含數(shù)據(jù)點(diǎn)較多的類別才作為有實(shí)際意義的類別。
(3)在確定距離閾值之后,本算法無須迭代,掃描一遍數(shù)據(jù)即可完成聚類,時間復(fù)雜度由k-means算法的o(k*n*t)降為o(n*logn),在大數(shù)據(jù)量的場景下優(yōu)勢明顯。此外,由于本算法只需掃描一遍數(shù)據(jù),故可擴(kuò)展用于流式聚類,即對實(shí)時數(shù)據(jù)進(jìn)行聚類,使得算法應(yīng)用范圍更廣。
圖5示意性示出了根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)聚類裝置的框圖。
參照圖5,根據(jù)本發(fā)明的實(shí)施例的數(shù)據(jù)聚類裝置500,包括:獲取單元502、計算單元504和處理單元506。
具體地,獲取單元502用于獲取待聚類的數(shù)據(jù)集;計算單元504用于計算所述數(shù)據(jù)集中的各個數(shù)據(jù)與已有類別的聚類中心之間的距離;處理單元506用于在所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于距離閾值時,將所述任一數(shù)據(jù)歸類到所述任一類別中,并用于在所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離都大于所述距離閾值時,創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述處理單元506還用于:在所述計算單元504計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離之前,若不存在已有類別,則創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。
在本發(fā)明的一些實(shí)施例中,基于前述方案,還包括:更新單元(圖5中未示出),用于在將所述任一數(shù)據(jù)歸類到所述任一類別或所述新的類別中之后,更新所述任一類別或所述新的類別的聚類中心。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述計算單元504配置為:針對所述數(shù)據(jù)集中的各個數(shù)據(jù),依次計算所述各個數(shù)據(jù)與已有類別的聚類中心之間的距離。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述計算單元504配置為:計算所述數(shù)據(jù)集中的第一數(shù)據(jù)與已有類別的聚類中心之間的距離;在根據(jù)所述第一數(shù)據(jù)與已有類別的聚類中心之間的距離對所述第一數(shù)據(jù)歸類,且對歸類后的聚類中心更新之后,再計算所述數(shù)據(jù)集中的第二數(shù)據(jù)與已有類別的聚類中心之間的距離。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述計算單元504還用于:在計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有類別的聚類中心之間的距離的過程中,若確定所述任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于所述距離閾值,則停止計算所述任一數(shù)據(jù)與已有的其它類別的聚類中心之間的距離。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述計算單元504配置為:計算所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離,獲得所述任一數(shù)據(jù)與所述所有類別的聚類中心之間的最短距離;判斷所述最短距離是否小于或等于所述距離閾值;若所述最短距離小于或等于所述距離閾值,則將所述最短距離對應(yīng)的類別作為所述任一類別。
在本發(fā)明的一些實(shí)施例中,基于前述方案,還包括:選取單元,用于從所述數(shù)據(jù)集中選取部分?jǐn)?shù)據(jù)作為樣本數(shù)據(jù)集合。所述計算單元504還用于,計算所述樣本數(shù)據(jù)集合中兩兩數(shù)據(jù)之間的距離,以得到所述樣本數(shù)據(jù)集合的距離集合;所述處理單元506還用于,根據(jù)所述距離集合,確定所述距離集合服從的二維混合高斯分布的概率密度函數(shù),并根據(jù)所述概率密度函數(shù)確定所述距離閾值。
在本發(fā)明的一些實(shí)施例中,基于前述方案,所述處理單元506配置為:計算所述概率密度函數(shù)的極小值點(diǎn),其中,所述概率密度函數(shù)中的任一點(diǎn)的橫坐標(biāo)表示距離值;將所述極小值點(diǎn)的橫坐標(biāo)作為所述距離閾值。
下面參考圖6,其示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施例的電子設(shè)備的計算機(jī)系統(tǒng)600的結(jié)構(gòu)示意圖。圖6示出的電子設(shè)備的計算機(jī)系統(tǒng)600僅是一個示例,不應(yīng)對本發(fā)明實(shí)施例的功能和使用范圍帶來任何限制。
如圖6所示,計算機(jī)系統(tǒng)600包括中央處理單元(cpu)601,其可以根據(jù)存儲在只讀存儲器(rom)602中的程序或者從存儲部分608加載到隨機(jī)訪問存儲器(ram)603中的程序而執(zhí)行各種適當(dāng)?shù)膭幼骱吞幚?。在ram603中,還存儲有系統(tǒng)操作所需的各種程序和數(shù)據(jù)。cpu601、rom602以及ram603通過總線604彼此相連。輸入/輸出(i/o)接口605也連接至總線604。
以下部件連接至i/o接口605:包括鍵盤、鼠標(biāo)等的輸入部分606;包括諸如陰極射線管(crt)、液晶顯示器(lcd)等以及揚(yáng)聲器等的輸出部分607;包括硬盤等的存儲部分608;以及包括諸如lan卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分609。通信部分609經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動器610也根據(jù)需要連接至i/o接口605??刹鹦督橘|(zhì)611,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲器等等,根據(jù)需要安裝在驅(qū)動器610上,以便于從其上讀出的計算機(jī)程序根據(jù)需要被安裝入存儲部分608。
特別地,根據(jù)本發(fā)明的實(shí)施例,上文參考流程圖描述的過程可以被實(shí)現(xiàn)為計算機(jī)軟件程序。例如,本發(fā)明的實(shí)施例包括一種計算機(jī)程序產(chǎn)品,其包括承載在計算機(jī)可讀介質(zhì)上的計算機(jī)程序,該計算機(jī)程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實(shí)施例中,該計算機(jī)程序可以通過通信部分609從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)611被安裝。在該計算機(jī)程序被中央處理單元(cpu)601執(zhí)行時,執(zhí)行本申請的系統(tǒng)中限定的上述功能。
需要說明的是,本發(fā)明所示的計算機(jī)可讀介質(zhì)可以是計算機(jī)可讀信號介質(zhì)或者計算機(jī)可讀存儲介質(zhì)或者是上述兩者的任意組合。計算機(jī)可讀存儲介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機(jī)可讀存儲介質(zhì)的更具體的例子可以包括但不限于:具有一個或多個導(dǎo)線的電連接、便攜式計算機(jī)磁盤、硬盤、隨機(jī)訪問存儲器(ram)、只讀存儲器(rom)、可擦式可編程只讀存儲器(eprom或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(cd-rom)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本發(fā)明中,計算機(jī)可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。而在本發(fā)明中,計算機(jī)可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括但不限于電磁信號、光信號或上述的任意合適的組合。計算機(jī)可讀的信號介質(zhì)還可以是計算機(jī)可讀存儲介質(zhì)以外的任何計算機(jī)可讀介質(zhì),該計算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。計算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括但不限于:無線、電線、光纜、rf等等,或者上述的任意合適的組合。
附圖中的流程圖和框圖,圖示了按照本發(fā)明各種實(shí)施例的系統(tǒng)、方法和計算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,上述模塊、程序段、或代碼的一部分包含一個或多個用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖或流程圖中的每個方框、以及框圖或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計算機(jī)指令的組合來實(shí)現(xiàn)。
描述于本發(fā)明實(shí)施例中所涉及到的單元可以通過軟件的方式實(shí)現(xiàn),也可以通過硬件的方式來實(shí)現(xiàn),所描述的單元也可以設(shè)置在處理器中。其中,這些單元的名稱在某種情況下并不構(gòu)成對該單元本身的限定。
作為另一方面,本申請還提供了一種計算機(jī)可讀介質(zhì),該計算機(jī)可讀介質(zhì)可以是上述實(shí)施例中描述的電子設(shè)備中所包含的;也可以是單獨(dú)存在,而未裝配入該電子設(shè)備中。上述計算機(jī)可讀介質(zhì)承載有一個或者多個程序,當(dāng)上述一個或者多個程序被一個該電子設(shè)備執(zhí)行時,使得該電子設(shè)備實(shí)現(xiàn)如上述實(shí)施例中所述的數(shù)據(jù)聚類方法。
例如,可以實(shí)現(xiàn)如圖1中所示的:步驟s10,獲取待聚類的數(shù)據(jù)集;步驟s12,計算所述數(shù)據(jù)集中的各個數(shù)據(jù)與已有類別的聚類中心之間的距離;步驟s14,若所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的任一類別的聚類中心之間的距離小于或等于距離閾值,則將所述任一數(shù)據(jù)歸類到所述任一類別中;步驟s16,若所述數(shù)據(jù)集中的任一數(shù)據(jù)與已有的所有類別的聚類中心之間的距離都大于所述距離閾值,則創(chuàng)建新的類別,并將所述任一數(shù)據(jù)歸類到所述新的類別中。又如,可以實(shí)現(xiàn)如圖4中所示的各個步驟。
應(yīng)當(dāng)注意,盡管在上文詳細(xì)描述中提及了用于動作執(zhí)行的設(shè)備的若干模塊或者單元,但是這種劃分并非強(qiáng)制性的。實(shí)際上,根據(jù)本發(fā)明的實(shí)施方式,上文描述的兩個或更多模塊或者單元的特征和功能可以在一個模塊或者單元中具體化。反之,上文描述的一個模塊或者單元的特征和功能可以進(jìn)一步劃分為由多個模塊或者單元來具體化。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員易于理解,這里描述的示例實(shí)施方式可以通過軟件實(shí)現(xiàn),也可以通過軟件結(jié)合必要的硬件的方式來實(shí)現(xiàn)。因此,根據(jù)本發(fā)明實(shí)施方式的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是cd-rom,u盤,移動硬盤等)中或網(wǎng)絡(luò)上,包括若干指令以使得一臺計算設(shè)備(可以是個人計算機(jī)、服務(wù)器、觸控終端、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行根據(jù)本發(fā)明實(shí)施方式的方法。
本領(lǐng)域技術(shù)人員在考慮說明書及實(shí)踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實(shí)施方案。本申請旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本發(fā)明未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實(shí)施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來限制。