本發(fā)明實(shí)施例涉及數(shù)據(jù)處理技術(shù),尤其涉及一種聚類實(shí)現(xiàn)方法和裝置。
背景技術(shù):
所謂聚類,是指將物理或抽象對象的集合分成由類似的對象組成的多個(gè)類的過程。由聚類所生成的簇是一組數(shù)據(jù)對象的集合,這些對象與同一個(gè)簇中的對象彼此相似,與其他簇中的對象相異。聚類分析又稱群分析,它是研究(樣品或指標(biāo))分類問題的一種統(tǒng)計(jì)分析方法,同時(shí)也是數(shù)據(jù)挖掘的一個(gè)重要算法。
其中,K-means(也稱為K均值)是一類非常經(jīng)典的基于劃分的聚類分析方法,是十大經(jīng)典數(shù)據(jù)挖掘算法之一,其算法簡單、收斂速度快且易于實(shí)現(xiàn),應(yīng)用領(lǐng)域非常廣泛。K-means算法的基本思想是:以空間中k個(gè)點(diǎn)為中心進(jìn)行聚類,對最靠近它們的對象歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結(jié)果。
在超大規(guī)模圖片(典型的,百億級)聚類中一般需要使用K-means算法,但是在對圖片的聚類過程中對算法的時(shí)間消耗和空間消耗都非常大。因此,如何降低K-means算法的計(jì)算復(fù)雜度,以及減少空間消耗,是當(dāng)前人們廣泛研究的重點(diǎn)問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供一種聚類實(shí)現(xiàn)方法和裝置,以優(yōu)化現(xiàn)有的K-means聚類算法,降低K-means聚類算法的計(jì)算復(fù)雜度。
第一方面,本發(fā)明實(shí)施例提供了一種聚類實(shí)現(xiàn)方法,包括:
對待聚類數(shù)據(jù)集的聚類中心進(jìn)行初始化,其中,初始化聚類中心的數(shù)量與預(yù)設(shè)的聚類數(shù)目相匹配;
根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心,其中,在計(jì)算所述最近聚類中心過程中消除了數(shù)據(jù)點(diǎn)自身平方計(jì)算帶來的冗余;
根據(jù)所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)的所述最近聚類中心的計(jì)算結(jié)果,更新所述聚類中心;
返回執(zhí)行根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心的操作,直至滿足聚類迭代結(jié)束條件。
第二方面,本發(fā)明實(shí)施例還提供了一種聚類實(shí)現(xiàn)裝置,包括:
聚類中心初始化模塊,用于對待聚類數(shù)據(jù)集的聚類中心進(jìn)行初始化,其中,初始化聚類中心的數(shù)量與預(yù)設(shè)的聚類數(shù)目相匹配;
最近聚類中心計(jì)算模塊,用于根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心,其中,在計(jì)算所述最近聚類中心過程中消除了數(shù)據(jù)點(diǎn)自身平方計(jì)算帶來的冗余;
聚類中心更新模塊,用于根據(jù)所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)的所述最近聚類中心的計(jì)算結(jié)果,更新所述聚類中心;
重復(fù)迭代模塊,用于返回執(zhí)行根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心的操作,直至滿足聚類迭代結(jié)束條件。
本發(fā)明實(shí)施例提供的聚類實(shí)現(xiàn)方法及裝置,在使用K-means聚類算法的過程中,通過分析確定K-means聚類算法自身算法的執(zhí)行步驟中存在的冗余,使用巧妙的變換消除了在計(jì)算各個(gè)數(shù)據(jù)點(diǎn)的最小聚類中心時(shí),數(shù)據(jù)點(diǎn)自身平方計(jì)算帶來的冗余,優(yōu)化了現(xiàn)有的K-means聚類算法,降低了K-means聚類算法的計(jì)算復(fù)雜度。
附圖說明
圖1是現(xiàn)有技術(shù)中的K-means聚類算法的實(shí)現(xiàn)流程圖;
圖2是本發(fā)明實(shí)施例一提供的一種聚類實(shí)現(xiàn)方法的流程圖;
圖3a是本發(fā)明實(shí)施例二提供的一種聚類實(shí)現(xiàn)方法的流程圖;
圖3b是本發(fā)明實(shí)施例二提供的聚類實(shí)現(xiàn)方法與現(xiàn)有的聚類實(shí)現(xiàn)方法之間的計(jì)算量對比圖;
圖4a是本發(fā)明實(shí)施例三提供的一種聚類實(shí)現(xiàn)方法的流程圖;
圖4b是本發(fā)明實(shí)施例三提供的一種聚類實(shí)現(xiàn)方法的具體應(yīng)用示意圖;
圖4c是本發(fā)明實(shí)施例三提供的一種聚類實(shí)現(xiàn)方法的數(shù)據(jù)流式處理示意圖;
圖5是本發(fā)明實(shí)施例提供的一種具體應(yīng)用場景的示意圖;
圖6是本發(fā)明實(shí)施例四提供的一種聚類實(shí)現(xiàn)裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部內(nèi)容。在更加詳細(xì)地討論示例性實(shí)施例之前應(yīng)當(dāng)提到的是,一些示例性實(shí)施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項(xiàng)操作(或步驟)描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時(shí)實(shí)施。此外,各項(xiàng)操作的順序可以被重新安排。當(dāng)其操作完成時(shí)所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
首先,為了便于理解,首先將現(xiàn)有的K-means聚類算法的實(shí)現(xiàn)原理進(jìn)行簡單介紹。
在圖1中示出了現(xiàn)有的K-means聚類算法的實(shí)現(xiàn)流程圖。其中,根據(jù)算法流程,給定的輸入數(shù)據(jù)集如下:
輸入數(shù)據(jù)集x(n*m):給定數(shù)據(jù)集x,包含n個(gè)數(shù)據(jù)點(diǎn)x[0]…x[n-1],其中,每個(gè)數(shù)據(jù)點(diǎn)是一個(gè)m維向量;另外,給定聚類的數(shù)目為k。
現(xiàn)有的K-means聚類算法的實(shí)現(xiàn)流程如下:
1、首先,對數(shù)據(jù)集x初始化,例如:歸一化;
2、之后,選擇k個(gè)初始聚類中心,例如:c[0]=data[0],…,c[k-1]=data[k-1];
3、對于數(shù)據(jù)集x[0]…x[n-1],分別計(jì)算其與聚類中心c[0],…,c[k-1]之間的歐式距離,得到d[i][j](表示數(shù)據(jù)集x中的第i個(gè)數(shù)據(jù)點(diǎn)x[i]與聚類中心c的第j個(gè)中心點(diǎn)c[j]的歐式距離);
4、對于x的每一個(gè)數(shù)據(jù)點(diǎn)x[i],取最近的聚類中心c[j]=argminj(d[i]j)(其中,j=0,1,…,k-1),作為該點(diǎn)所屬的新類別。
5、對于每個(gè)聚類中心c[j],根據(jù)新的劃分重新計(jì)算新的聚類中心;
6、重復(fù)執(zhí)行3、4、5,直到所有的c[j]值的變化小于給定閾值或達(dá)到最大迭代次數(shù)。
通過對現(xiàn)有的K-means聚類算法的實(shí)現(xiàn)流程進(jìn)行復(fù)雜度分析,可以看出該算法的主要計(jì)算量在第3和第4兩個(gè)步驟上,時(shí)間復(fù)雜度達(dá)到O(n*k*m),空間復(fù)雜度達(dá)到O(n*k*m)。
針對K-means聚類算法,目前主要的算法加速方式包括:通過對數(shù)據(jù)集進(jìn)行劃分,然后通過MPI(Message Passing Interface,信息傳遞接口)、OpenMP(Open Multi-Processing,共享存儲(chǔ)并行編程)或MapReduce(一種大規(guī)模數(shù)據(jù)集的并行運(yùn)算)的方式進(jìn)行多線程、多進(jìn)程、或多機(jī)的方式加速。
而現(xiàn)有的針對K-means聚類算法的實(shí)現(xiàn)流程的主要缺陷在于:單機(jī)數(shù)據(jù)聚類的上限比較低,主要受限于時(shí)間和空間復(fù)雜度;已有的算法加速方案沒有考慮到K-means算法的多個(gè)計(jì)算步驟中的一些冗余性;已有方案沒有考慮到當(dāng)今主流的硬件體系結(jié)構(gòu)和指令集,無法充分發(fā)揮硬件的計(jì)算效能。
實(shí)施例一
圖1為本發(fā)明實(shí)施例一提供的一種聚類實(shí)現(xiàn)方法的流程圖,該方法可以由聚類實(shí)現(xiàn)裝置執(zhí)行,該裝置可由軟件和/或硬件實(shí)現(xiàn),并一般可集成于用于完成聚類功能的服務(wù)器或者終端設(shè)備中,并一般可以由所述服務(wù)器或者終端設(shè)備的CPU(Central Processing Unit,中央處理器)或者GPU(Graphics Processing Unit,圖形處理器)來執(zhí)行。如圖1所示,本實(shí)施例的方法具體包括:
110、對待聚類數(shù)據(jù)集的聚類中心進(jìn)行初始化。
其中,初始化聚類中心的數(shù)量與預(yù)設(shè)的聚類數(shù)目相匹配。所述聚類數(shù)目具體是指最終需要聚類出的聚類類別的數(shù)量值。
在本實(shí)施例中,所述待聚類數(shù)據(jù)集中包括多個(gè)需要進(jìn)行聚類的數(shù)據(jù)點(diǎn),可以結(jié)合所述數(shù)據(jù)點(diǎn)以及所述聚類數(shù)目,對所述待聚類數(shù)據(jù)集的聚類中心進(jìn)行初始化。例如,從M個(gè)所述數(shù)據(jù)點(diǎn)中選擇k數(shù)據(jù)點(diǎn)作為所述k個(gè)聚類中心的初始化值。
其中,M為所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)總數(shù),k為所述聚類數(shù)目。
120、根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心。
通過對現(xiàn)有的K-means聚類算法的實(shí)現(xiàn)流程進(jìn)行分析可知:K-means聚類算法中主要的計(jì)算量集中在算法迭代過程,主要為:1、計(jì)算待聚類數(shù)據(jù)集中各數(shù)據(jù)點(diǎn)與各聚類中心的歐式距離;2、利用上一步得出的歐式距離計(jì)算待聚類數(shù)據(jù)集中每個(gè)數(shù)據(jù)點(diǎn)的標(biāo)簽(即,與所有聚類中心最小歐式距離對應(yīng)的聚類中心);3、利用新的數(shù)據(jù)點(diǎn)標(biāo)簽更新聚類中心。在上述迭代過程中,主要計(jì)算量集中在計(jì)算歐式距離,此處我們將其展開:
其中,如前所述,待聚類數(shù)據(jù)集x(n*m),包含n個(gè)數(shù)據(jù)點(diǎn),其中,每個(gè)數(shù)據(jù)點(diǎn)是一個(gè)m維向量;另外,給定聚類的數(shù)目為k。
由上式可知,在常規(guī)的K-means計(jì)算中,對于待聚類數(shù)據(jù)集中的每一個(gè)數(shù)據(jù)點(diǎn)xi,都需計(jì)算k次對于聚類中心中的每一個(gè)中心點(diǎn)cj都需計(jì)算n次
由于最終計(jì)算的是xi與每一個(gè)cj的歐式距離的最小值,對所有的cj,是等價(jià)的,故計(jì)算可以省略,也即:在本實(shí)施例中,在計(jì)算所述最近聚類中心過程中消除了數(shù)據(jù)點(diǎn)自身平方計(jì)算帶來的冗余。
相應(yīng)的,在計(jì)算di,j時(shí),不再計(jì)算的平方,僅通過計(jì)算可以大大化簡計(jì)算量。
130、根據(jù)所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)的所述最近聚類中心的計(jì)算結(jié)果,更新所述聚類中心。
在本實(shí)施例中,在確定與各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心后,可以將各數(shù)據(jù)點(diǎn)分別歸集于對應(yīng)的最近聚類中心所屬的類別中,以實(shí)現(xiàn)對各個(gè)數(shù)據(jù)點(diǎn)進(jìn)行一次聚類。
在一次聚類完成后,可以進(jìn)而選取各個(gè)類別中包括的各數(shù)據(jù)點(diǎn)的均值作為該類別的新的聚類中心,以實(shí)現(xiàn)對所述聚類中心的更新。
140、判斷是否滿足聚類迭代結(jié)束條件:若是,結(jié)束流程;否則,返回執(zhí)行120。
在本實(shí)施例中,所述聚類迭代結(jié)束條件可以根據(jù)實(shí)際情況進(jìn)行預(yù)設(shè),例如:聚類中心的一次更新值小于設(shè)定閾值,或者迭代次數(shù)超過設(shè)定迭代門限值等,本實(shí)施例對此并不進(jìn)行限制。
本發(fā)明實(shí)施例提供的聚類實(shí)現(xiàn)方法,在使用K-means聚類算法的過程中,通過分析確定K-means聚類算法自身算法的執(zhí)行步驟中存在的冗余,使用巧妙的變換消除了在計(jì)算各個(gè)數(shù)據(jù)點(diǎn)的最小聚類中心時(shí),數(shù)據(jù)點(diǎn)自身平方計(jì)算帶來的冗余,優(yōu)化了現(xiàn)有的K-means聚類算法,降低了K-means聚類算法的計(jì)算復(fù)雜度。
實(shí)施例二
圖3a為本發(fā)明實(shí)施例二提供的一種聚類實(shí)現(xiàn)方法的流程示意圖。本實(shí)施例以上述實(shí)施例為基礎(chǔ)進(jìn)行具體化,在本實(shí)施例中,將根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心具體為:根據(jù)公式:計(jì)算所述待聚類數(shù)據(jù)集中第i個(gè)數(shù)據(jù)點(diǎn)xi的最近聚類中心Ci;其中,cj為第j個(gè)聚類中心,N為所述聚類數(shù)目,i∈[1,M],M為所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)總數(shù)。相應(yīng)的,本實(shí)施例的方法具體包括:
210、對待聚類數(shù)據(jù)集的聚類中心進(jìn)行初始化,其中,初始化聚類中心的數(shù)量與預(yù)設(shè)的聚類數(shù)目相匹配。
220、獲取所述待聚類數(shù)據(jù)集中的一個(gè)數(shù)據(jù)點(diǎn)xi,執(zhí)行230。
如前所述,需要計(jì)算待聚類數(shù)據(jù)集中的每個(gè)數(shù)據(jù)點(diǎn)的最小聚類中心,因此,需要分別獲取所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn),相應(yīng)的,i∈[1,M],M為所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)總數(shù)。
230、根據(jù)公式:計(jì)算所述待聚類數(shù)據(jù)集中第i個(gè)數(shù)據(jù)點(diǎn)xi的最近聚類中心Ci。
如實(shí)施例一所述,在計(jì)算最小聚類中心時(shí)通過對歐式距離的計(jì)算公式進(jìn)行展開,可以約去數(shù)據(jù)點(diǎn)自身平方項(xiàng)。
相應(yīng)的,可以通過公式:來計(jì)算每個(gè)數(shù)據(jù)點(diǎn)xi的最小聚類中心Ci‘。
其中,argminjf(x)代表當(dāng)f(x)取得最小值是x的取值。
通過對公式:進(jìn)行進(jìn)一步分析可知,在計(jì)算最小聚類中心過程中,針對每個(gè)數(shù)據(jù)點(diǎn),需要計(jì)算n*k次的乘2計(jì)算,以及k次
因此,可以將計(jì)算最小距離di,j等價(jià)于計(jì)算:
通過將等價(jià)于可以將n*k次乘2的乘法運(yùn)算變?yōu)閗次乘1/2的乘法運(yùn)算,進(jìn)一步減少計(jì)算量。
其中,在圖3b示出了本發(fā)明實(shí)施例二提供的聚類實(shí)現(xiàn)方法與現(xiàn)有的聚類實(shí)現(xiàn)方法之間的計(jì)算量對比圖。
具體的,優(yōu)化前后運(yùn)算量對比分析如表1所示。
表1
如表1所示,通過上述優(yōu)化方法對K-means聚類算法進(jìn)行優(yōu)化后的計(jì)算量減少n*k*(m-1)–2*k*m次操作。另外,優(yōu)化后算法更適合當(dāng)今主流計(jì)算體系架構(gòu)。因?yàn)樵谒惴▋?yōu)化過程中,將平方操作(xi-cj)2優(yōu)化出一個(gè)乘加操作(xi*cj)在當(dāng)前流行的計(jì)算體系架構(gòu)里,單指令可以直接支持乘加操作,比如ARM(Advanced RISC Machines,精簡指令集計(jì)算機(jī)微處理器)架構(gòu)里的MLA(Multiply Accumulate,乘加)指令可以實(shí)現(xiàn)乘加操作。
因此,最終優(yōu)化后的實(shí)現(xiàn)方式,執(zhí)行指令數(shù)將減少n*k*m+n*k*(m-1)–2*k*m=2*n*k*m+n*k–2*k*m。
240、判斷是否完成對所述待聚類數(shù)據(jù)集中全部數(shù)據(jù)點(diǎn)的最近聚類中心的計(jì)算:若是,執(zhí)行250;否則,返回執(zhí)行220。
250、根據(jù)所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)的所述最近聚類中心的計(jì)算結(jié)果,更新所述聚類中心。
260、判斷是否滿足聚類迭代結(jié)束條件:若是,結(jié)束流程;否則,返回執(zhí)行220。
在確定不滿足聚類迭代結(jié)束條件,需要返回220,重新開始依次獲取待聚類數(shù)據(jù)集中的一個(gè)數(shù)據(jù)點(diǎn),并分別計(jì)算與各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心。
本發(fā)明實(shí)施例的技術(shù)方案通過公式:計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心,充分利用到了K-means聚類算法執(zhí)行步驟中存在的冗余,并通過巧妙的方式將計(jì)算任務(wù)轉(zhuǎn)換成硬件擅長計(jì)算的指令,進(jìn)一步優(yōu)化了現(xiàn)有的K-means聚類算法,降低了K-means聚類算法的計(jì)算復(fù)雜度。
實(shí)施例三
圖4a為本發(fā)明實(shí)施例三提供的一種聚類實(shí)現(xiàn)方法的流程示意圖。本實(shí)施例以上述實(shí)施例為基礎(chǔ)進(jìn)行具體化,在本實(shí)施例中,將根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心進(jìn)一步具體為:將所述待聚類數(shù)據(jù)集切分為至少兩個(gè)數(shù)據(jù)子集;獲取一個(gè)數(shù)據(jù)子集作為當(dāng)前操作數(shù)據(jù)子集;將所述當(dāng)前操作數(shù)據(jù)子集拷貝至顯存中,并通過訪問所述顯存計(jì)算與所述當(dāng)前操作數(shù)據(jù)子集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心;返回執(zhí)行獲取一個(gè)數(shù)據(jù)子集作為當(dāng)前操作數(shù)據(jù)子集的操作,直至完成對所述待聚類數(shù)據(jù)集中全部數(shù)據(jù)子集的處理。相應(yīng)的,本實(shí)施例的方法具體包括:
310、對待聚類數(shù)據(jù)集的聚類中心進(jìn)行初始化,其中,初始化聚類中心的數(shù)量與預(yù)設(shè)的聚類數(shù)目相匹配。
320、將所述待聚類數(shù)據(jù)集切分為至少兩個(gè)數(shù)據(jù)子集。
除了計(jì)算復(fù)雜度,K-means聚類算法中另一核心問題是空間復(fù)雜度,優(yōu)化計(jì)算復(fù)雜度使算法收斂更快,優(yōu)化空間復(fù)雜度使算法規(guī)模更大,適用于更廣泛的領(lǐng)域。
一般來說,通過CPU執(zhí)行對所述待聚類數(shù)據(jù)的K-means聚類算法,無需考慮內(nèi)存容量問題,但是如果通過GPU實(shí)現(xiàn)上述K-means聚類算法,考慮到顯存的大小限制,往往無法實(shí)現(xiàn)大規(guī)模數(shù)據(jù)的聚類,此時(shí)常見的方案是通過多機(jī)的方式突破單機(jī)的存儲(chǔ)限制。針對這一問題,發(fā)明人創(chuàng)造性的提出了:對待聚類數(shù)據(jù)集分批處理的方式以在單機(jī)模式下支持更大的數(shù)據(jù)規(guī)模。
在GPU模式下,由于GPU顯存限制,無法將整個(gè)數(shù)據(jù)集放在顯存中。假設(shè)當(dāng)前顯存可支撐處理數(shù)據(jù)集x(大小為n*m)的任務(wù),而現(xiàn)有數(shù)據(jù)集的大小為p*n*m,無法全部放到顯存中??紤]到矩陣乘法(算法優(yōu)化后的K-means聚類算法中主要的計(jì)算過程為矩陣乘法)的可分離性,可以將數(shù)據(jù)集x(p*n*m)切分為p個(gè)(n*m)的子數(shù)據(jù)集,在單次迭代中,依次將一個(gè)數(shù)據(jù)子集從內(nèi)存中拷貝到GPU顯存中完成計(jì)算。其中,在圖4b中示出了本發(fā)明實(shí)施例三提供的一種聚類實(shí)現(xiàn)方法的具體應(yīng)用示意圖。
在本實(shí)施例中,為了實(shí)現(xiàn)在單機(jī)模式下支持更大的數(shù)據(jù)規(guī)模,需要對待聚類數(shù)據(jù)集進(jìn)行分批處理。即:將所述待聚類數(shù)據(jù)集切分為至少兩個(gè)數(shù)據(jù)子集,其中,切分的數(shù)據(jù)子集中包括的數(shù)據(jù)點(diǎn)可以相同也可以不同,但是,為了保證每次迭代的運(yùn)算速度,可選的,各所述數(shù)據(jù)子集中包括的數(shù)據(jù)點(diǎn)均相同。
其中,為了保證切分的每個(gè)數(shù)據(jù)子集中包括的數(shù)據(jù)點(diǎn)均相同,所述將所述待聚類數(shù)據(jù)集切分為至少兩個(gè)數(shù)據(jù)子集可以包括:
預(yù)先設(shè)定切分?jǐn)?shù)量Q;根據(jù)公式B=M%Q,計(jì)算待濾除數(shù)據(jù)點(diǎn)數(shù)量B,其中,M為所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)總數(shù),%為求余運(yùn)算;從所述待聚類數(shù)據(jù)集中濾除B個(gè)數(shù)據(jù)點(diǎn)后,生成齊整待聚類數(shù)據(jù)集;將所述齊整待聚類數(shù)據(jù)集切分為Q個(gè)包含相同數(shù)量數(shù)據(jù)點(diǎn)的數(shù)據(jù)子集。
在一個(gè)具體例子中,待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)總數(shù)為300,預(yù)先設(shè)定的切分?jǐn)?shù)量為7,顯然,無法保證每個(gè)數(shù)據(jù)子集中包括的數(shù)據(jù)點(diǎn)均相同。因此,可以首先計(jì)算300%7=6,因此,可以首先在待聚類數(shù)據(jù)集中去除6個(gè)數(shù)據(jù)點(diǎn),進(jìn)而可以保證剩下的294個(gè)數(shù)據(jù)點(diǎn)可以均勻的分配在7個(gè)數(shù)據(jù)子集中。
330、獲取一個(gè)數(shù)據(jù)子集作為當(dāng)前操作數(shù)據(jù)子集。
340、將所述當(dāng)前操作數(shù)據(jù)子集拷貝至顯存中,并通過訪問所述顯存計(jì)算與所述當(dāng)前操作數(shù)據(jù)子集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心。
在本實(shí)施例中,將所述當(dāng)前操作數(shù)據(jù)子集拷貝至顯存中可以包括:通過統(tǒng)一計(jì)算設(shè)備架構(gòu)流將所述當(dāng)前操作數(shù)據(jù)子集拷貝至顯存中。
在本實(shí)施例的一個(gè)可選的實(shí)施方式中,為了進(jìn)一步加快K-means聚類算法的收斂速度,可以使用CUDA(Compute Unified Device Architecture,統(tǒng)一計(jì)算設(shè)備架構(gòu)流)將數(shù)據(jù)拷貝過程進(jìn)行隱藏,其中,在圖4c示出了本發(fā)明實(shí)施例三提供的一種聚類實(shí)現(xiàn)方法的數(shù)據(jù)流式處理示意圖。
如圖4c所示,當(dāng)計(jì)算完當(dāng)前顯存中數(shù)據(jù)子集與各聚類中心的歐式距離之后,對該數(shù)據(jù)子集所占用的空間即可釋放,此時(shí)即可開始下一批數(shù)據(jù)的傳輸,而無需等待所有的計(jì)算完成,以此可實(shí)現(xiàn)數(shù)據(jù)拷貝的隱藏。
350、判斷是否完成對所述待聚類數(shù)據(jù)集中全部數(shù)據(jù)子集的處理:若是,執(zhí)行360;否則,返回執(zhí)行330。
360、根據(jù)所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)的所述最近聚類中心的計(jì)算結(jié)果,更新所述聚類中心。
370、判斷是否滿足聚類迭代結(jié)束條件:若是,結(jié)束流程;否則,返回執(zhí)行320。
本實(shí)施例的技術(shù)方案通過對待聚類數(shù)據(jù)集進(jìn)行數(shù)據(jù)切分,實(shí)現(xiàn)對待聚類數(shù)據(jù)集的分批處理,通過顯存復(fù)用,可在同樣計(jì)算資源下完成更大規(guī)模的數(shù)據(jù)聚類。另外,利用CUDA的流式操作將數(shù)據(jù)拷貝進(jìn)行隱藏,可進(jìn)一步加快K-means聚類算法的收斂速度。
進(jìn)一步的,在圖5中示出了本發(fā)明實(shí)施例的一種具體的應(yīng)用場景的示意圖,在本具體應(yīng)用場景中,所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)為圖片數(shù)據(jù)點(diǎn),其中,所述圖片數(shù)據(jù)點(diǎn)中包括至少兩個(gè)維度的圖片特征。
另外,需要說明的是,在發(fā)明人實(shí)現(xiàn)本發(fā)明的過程中使用的圖片特征一般是遠(yuǎn)大于2維的,通常會(huì)達(dá)到上千維,實(shí)驗(yàn)時(shí)采用的是1024維;通過對圖5所示的應(yīng)用場景進(jìn)行反復(fù)試驗(yàn)發(fā)現(xiàn),本發(fā)明實(shí)施例的技術(shù)方案可以極大加速超大規(guī)模圖片聚類流程,其中的K-means聚類算法執(zhí)行時(shí)間速度提升至少在10倍以上。而最好的GPU版本比最差的CPU版本快300倍以上。
實(shí)施例四
圖6為本發(fā)明實(shí)施例四提供的一種聚類實(shí)現(xiàn)裝置的結(jié)構(gòu)圖。如圖6所示,所述裝置包括:聚類中心初始化模塊41、最近聚類中心計(jì)算模塊42、聚類中心更新模塊43以及重復(fù)迭代模塊44。
聚類中心初始化模塊41,用于對待聚類數(shù)據(jù)集的聚類中心進(jìn)行初始化,其中,初始化聚類中心的數(shù)量與預(yù)設(shè)的聚類數(shù)目相匹配。
最近聚類中心計(jì)算模塊42,用于根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心,其中,在計(jì)算所述最近聚類中心過程中消除了數(shù)據(jù)點(diǎn)自身平方計(jì)算帶來的冗余。
聚類中心更新模塊43,用于根據(jù)所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)的所述最近聚類中心的計(jì)算結(jié)果,更新所述聚類中心。
重復(fù)迭代模塊44,用于返回執(zhí)行根據(jù)所述聚類中心,計(jì)算與所述待聚類數(shù)據(jù)集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心的操作,直至滿足聚類迭代結(jié)束條件。
本發(fā)明實(shí)施例提供的聚類實(shí)現(xiàn)裝置,在使用K-means聚類算法的過程中,通過分析確定K-means聚類算法自身算法的執(zhí)行步驟中存在的冗余,使用巧妙的變換消除了在計(jì)算各個(gè)數(shù)據(jù)點(diǎn)的最小聚類中心時(shí),數(shù)據(jù)點(diǎn)自身平方計(jì)算帶來的冗余,優(yōu)化了現(xiàn)有的K-means聚類算法,降低了K-means聚類算法的計(jì)算復(fù)雜度。
在上述各實(shí)施例的基礎(chǔ)上,所述最近聚類中心計(jì)算模塊,具體可以用于:
根據(jù)公式:計(jì)算所述待聚類數(shù)據(jù)集中第i個(gè)數(shù)據(jù)點(diǎn)xi的最近聚類中心Ci;
其中,cj為第j個(gè)聚類中心,N為所述聚類數(shù)目,i∈[1,M],M為所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)總數(shù)。
在上述各實(shí)施例的基礎(chǔ)上,所述最近聚類中心計(jì)算模塊進(jìn)一步可以包括:
待聚類數(shù)據(jù)集切分單元,用于將所述待聚類數(shù)據(jù)集切分為至少兩個(gè)數(shù)據(jù)子集;
當(dāng)前操作數(shù)據(jù)子集獲取單元,用于獲取一個(gè)數(shù)據(jù)子集作為當(dāng)前操作數(shù)據(jù)子集;
最近聚類中心顯存計(jì)算單元,用于將所述當(dāng)前操作數(shù)據(jù)子集拷貝至顯存中,并通過訪問所述顯存計(jì)算與所述當(dāng)前操作數(shù)據(jù)子集中的各數(shù)據(jù)點(diǎn)分別對應(yīng)的最近聚類中心;
重復(fù)處理單元,用于返回執(zhí)行獲取一個(gè)數(shù)據(jù)子集作為當(dāng)前操作數(shù)據(jù)子集的操作,直至完成對所述待聚類數(shù)據(jù)集中全部數(shù)據(jù)子集的處理。
在上述各實(shí)施例的基礎(chǔ)上,所述待聚類數(shù)據(jù)集切分單元具體可以用于:
預(yù)先設(shè)定切分?jǐn)?shù)量Q;
根據(jù)公式:B=M%Q,計(jì)算待濾除數(shù)據(jù)點(diǎn)數(shù)量B,其中,M為所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)總數(shù),%為求余運(yùn)算;
從所述待聚類數(shù)據(jù)集中濾除B個(gè)數(shù)據(jù)點(diǎn)后,生成齊整待聚類數(shù)據(jù)集;
將所述齊整待聚類數(shù)據(jù)集切分為Q個(gè)包含相同數(shù)量數(shù)據(jù)點(diǎn)的數(shù)據(jù)子集。
在上述各實(shí)施例的基礎(chǔ)上,所述最近聚類中心顯存計(jì)算單元具體可以用于:
通過統(tǒng)一計(jì)算設(shè)備架構(gòu)流將所述當(dāng)前操作數(shù)據(jù)子集拷貝至顯存中。
在上述各實(shí)施例的基礎(chǔ)上,所述待聚類數(shù)據(jù)集中包括的數(shù)據(jù)點(diǎn)可以為圖片數(shù)據(jù)點(diǎn),其中,所述圖片數(shù)據(jù)點(diǎn)中可以包括至少兩個(gè)維度的圖片特征。
本發(fā)明實(shí)施例所提供的聚類實(shí)現(xiàn)裝置可用于執(zhí)行本發(fā)明任意實(shí)施例提供的聚類實(shí)現(xiàn)方法,具備相應(yīng)的功能模塊,實(shí)現(xiàn)相同的有益效果。
注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對本領(lǐng)域技術(shù)人員來說能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過以上實(shí)施例對本發(fā)明進(jìn)行了較為詳細(xì)的說明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。