本發(fā)明涉及一種基于歐氏距離改進(jìn)的kNN(k Nearest Neighbors)近鄰查找方法,可顯著提高傳統(tǒng)kNN方法的計(jì)算效率,并能通過(guò)多線程擴(kuò)展提升處理器的利用率,屬于數(shù)據(jù)挖掘分類(lèi)技術(shù)領(lǐng)域。
背景技術(shù):
隨著大數(shù)據(jù)(Big Data)時(shí)代的到來(lái),互聯(lián)網(wǎng)中的數(shù)據(jù)量呈指數(shù)級(jí)增長(zhǎng),如何針對(duì)海量數(shù)據(jù)提高挖掘處理效率變得至關(guān)重要。分類(lèi)是數(shù)據(jù)挖掘的基礎(chǔ),k-近鄰查找方法kNN是數(shù)據(jù)挖掘領(lǐng)域的經(jīng)典分類(lèi)方法,應(yīng)用非常廣泛,但是傳統(tǒng)kNN分類(lèi)方法具有較高的時(shí)間復(fù)雜度(為O(n))。對(duì)此,人們提出了多種改進(jìn)方案,主要的改進(jìn)思路分為兩大類(lèi):(1)基于樣本規(guī)約的方法;(2)基于全局索引的方法。其中,基于樣本規(guī)約的方法主要通過(guò)對(duì)于全樣本進(jìn)行預(yù)處理,過(guò)濾其中信息增益較少的部分樣本點(diǎn),以此降低分類(lèi)方法的時(shí)間復(fù)雜度。但是,該方法需要大量的數(shù)據(jù)預(yù)處理工作,并且由于部分樣本點(diǎn)被剔除,可能導(dǎo)致查詢(xún)的準(zhǔn)確率降低。基于全局索引結(jié)構(gòu)的方法主要通過(guò)對(duì)所有樣本在內(nèi)存中構(gòu)建索引,從而提高近鄰查找的效率。但是,該方法需要在內(nèi)存中預(yù)先構(gòu)建全局索引結(jié)構(gòu),以使各個(gè)樣本點(diǎn)之間具備相似關(guān)聯(lián),而這對(duì)處理器的內(nèi)存提出了較高的要求。
從現(xiàn)有的kNN改進(jìn)方案來(lái)看,大多難以同時(shí)做到既能降低計(jì)算的時(shí)間復(fù)雜度,而且又能突破傳統(tǒng)kNN方法的單線程處理模式。顯然,較高時(shí)間復(fù)雜度和串行單線程模式,都難以應(yīng)對(duì)海量數(shù)據(jù)處理的挑戰(zhàn)。另外,處理器的性能正在按摩爾定律和超摩爾定律不斷提升,能否高效利用計(jì)算機(jī)的處理能力,也已成為評(píng)判一個(gè)密集計(jì)算方法效能優(yōu)劣的重要標(biāo)準(zhǔn)。為此,本發(fā)明利用歐氏空間特性對(duì)傳統(tǒng)kNN方法進(jìn)行了優(yōu)化改進(jìn),一方面通過(guò)簡(jiǎn)化計(jì)算可以將三維空間以下情形的時(shí)間復(fù)雜度降為O(log n),同時(shí)對(duì)改進(jìn)方法進(jìn)行了多線程擴(kuò)展,使之能夠充分利用高性能計(jì)算設(shè)備的多核特性,以便適應(yīng)大數(shù)據(jù)處理的需求。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:針對(duì)現(xiàn)有技術(shù)中存在的問(wèn)題與不足,本發(fā)明提供一種基于歐氏距離改進(jìn)的kNN近鄰查找方法,可顯著提高傳統(tǒng)kNN方法的計(jì)算效率,將三維空間以下情形的計(jì)算時(shí)間復(fù)雜度由O(n)降為O(log n),同時(shí)通過(guò)多線程擴(kuò)展提升處理器的利用率,有效應(yīng)對(duì)大數(shù)據(jù)時(shí)代下的海量數(shù)據(jù)挖掘需求。
技術(shù)方案:一種基于歐氏距離改進(jìn)的kNN近鄰查找方法,與已有方法不同的是,該方法利用歐式空間的特性,一方面簡(jiǎn)化部分樣本點(diǎn)的計(jì)算開(kāi)銷(xiāo),將傳統(tǒng)kNN方法的乘方運(yùn)算簡(jiǎn)化為比較運(yùn)算,從而在三維空間以下情形將時(shí)間復(fù)雜度降為O(log n)。另一方面,借助簡(jiǎn)化過(guò)程引入的臨時(shí)變量,可以規(guī)避對(duì)全局集中式索引結(jié)構(gòu)的依賴(lài),將傳統(tǒng)kNN方法由串行單線程處理模式,非常方便地?cái)U(kuò)展為多線程處理模式,使之更有效地利用高性能計(jì)算設(shè)備的多核特性,提升處理器利用率并適應(yīng)大數(shù)據(jù)處理的需求。
假定由n(n>0)個(gè)樣本構(gòu)成樣本集合S={s0,s1,…,sn-1},同時(shí)共有t(t>0)個(gè)線程TD0、TD1、…、TDt-1進(jìn)行處理,在S中查找與待分類(lèi)樣本v0最相似的k(k>0)個(gè)近鄰,則本發(fā)明具體可以分為3個(gè)主要步驟:
步驟1,線程初始化處理。對(duì)任一線程TDj(0≤j≤t-1),令其中為取下整符號(hào),則TDj首先在Sj中隨機(jī)取k個(gè)樣本,構(gòu)成TDj關(guān)于待分類(lèi)樣本v0的初始k-近鄰集合再計(jì)算中各樣本與v0的歐氏距離,并選擇其中距離最大值,不妨記為dmaxj,假定與它對(duì)應(yīng)的樣本為smax;同時(shí)令并且令樣本集合
步驟2,單個(gè)線程求k-近鄰。對(duì)任一線程TDj(0≤j≤t-1),從中逐個(gè)選取每一樣本(不失一般性,令其為s)。首先,計(jì)算s各個(gè)維度與v0對(duì)應(yīng)維度的距離(即該維度上的差值的絕對(duì)值),并將其與radius進(jìn)行比較:只要其中有一個(gè)維度的距離大于radius,則直接丟棄s;否則,計(jì)算s與v0的歐氏距離d。
將計(jì)算所得d與dmaxj進(jìn)行比較,如果d大于dmaxj,則直接丟棄s;否則令并再在所得新的中選擇距離v0最遠(yuǎn)的樣本(仍用smax表示),v0和樣本smax的距離仍用dmaxj表示,同時(shí)更新當(dāng)中所有樣本處理完后,則得到線程TDj的k-近鄰集合計(jì)算并記錄中各樣本與v0的歐氏距離。
步驟3,多線程歸并求k-近鄰。將t個(gè)線程的k-近鄰集合進(jìn)行歸并,得到該集合中共有t*k個(gè)樣本,并對(duì)應(yīng)t*k個(gè)歐氏距離。通過(guò)在t*k個(gè)歐氏距離中選取k個(gè)最小值,很容易得到全局樣本集合S中關(guān)于待分類(lèi)樣本v0的k個(gè)近鄰。
有益效果:
1.該方法利用歐式空間的特性,以相對(duì)簡(jiǎn)單的加減運(yùn)算替代傳統(tǒng)kNN方法中比較復(fù)雜的平方和運(yùn)算,能夠顯著降低計(jì)算的時(shí)間復(fù)雜度。
2.該方法在簡(jiǎn)化計(jì)算時(shí)會(huì)引入一些臨時(shí)變量,通過(guò)它們可以避免采用復(fù)雜的全局集中式索引結(jié)構(gòu),從而提高了方法的多線程并發(fā)擴(kuò)展能力。
3.該方法適合以多線程模式對(duì)全樣本集合進(jìn)行處理,既能保證k-近鄰查找的準(zhǔn)確率,又能充分發(fā)揮高性能計(jì)算設(shè)備的處理器優(yōu)勢(shì),可以有效應(yīng)對(duì)大數(shù)據(jù)時(shí)代下的海量數(shù)據(jù)挖掘需求。
附圖說(shuō)明
圖1(a)為線程初始化處理過(guò)程,其中v0為待分類(lèi)樣本,假定線程隨機(jī)選取了3個(gè)樣本a、b、c作為初始的3-近鄰;圖1(b)為線程求k-近鄰的過(guò)程中,新選擇的樣本d,由于d和v0的距離小于r1,故原來(lái)選取的樣本a被新選擇的樣本d替換掉。
圖2為多個(gè)線程對(duì)于全局樣本集合S中樣本(用樣本編號(hào)1、2、3、…表示)的區(qū)隔選擇處理方式。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實(shí)施例僅用于說(shuō)明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。
本發(fā)明在具體實(shí)施時(shí),假定共有300個(gè)樣本(每個(gè)樣本為h維,h≥1)構(gòu)成樣本集合S={s0,s1,…,s299},同時(shí)共有3個(gè)線程TD0、TD1、TD2進(jìn)行處理,在S中查找與待分類(lèi)樣本v0最相似的10(即k=10)個(gè)近鄰,則本發(fā)明具體實(shí)施步驟如下:
(1)線程TD0、TD1、TD2進(jìn)行初始化處理。首先,線程TD0、TD1、TD2分別從S0={s0,s3,s6,…,s297}、S1={s1,s4,s7,…,s298}、S2={s2,s5,s8,…,s299}中隨機(jī)取10個(gè)樣本,得到3個(gè)線程關(guān)于待分類(lèi)樣本v0的3個(gè)初始10-近鄰集合和接著,計(jì)算中各樣本(不妨記為u)與v0的歐氏距離,具體計(jì)算公式如下:
其中和xu,i分別為待分類(lèi)樣本v0和樣本u的第i維。
最后,在所得10個(gè)歐氏距離中選擇其中距離最大值,記為dmaxj,假定與它對(duì)應(yīng)的樣本為smax;同時(shí)令并且令樣本集合
(2)線程TD0、TD1、TD2分別針對(duì)S0、S1和S2求10-近鄰。以線程TD1為例,從中逐個(gè)選取每一樣本(令其為s)。首先,計(jì)算s各個(gè)維度與v0對(duì)應(yīng)維度的距離(即該維度上的差值的絕對(duì)值),并將其與radius進(jìn)行比較:只要其中有一個(gè)維度的距離大于radius,則直接丟棄s;否則,計(jì)算s與v0的歐氏距離d。
接著,將d與dmax1進(jìn)行比較,如果d大于dmax1,則直接丟棄s;否則令并再在所得新的中選擇距離v0最遠(yuǎn)的樣本(仍用smax表示),v0和樣本smax的距離仍用dmax1表示,同時(shí)更新當(dāng)中所有樣本處理完后,則得到線程TD1的10-近鄰集合計(jì)算并記錄中各樣本與v0的歐氏距離。
(3)歸并所有線程的10-近鄰集合,求全局10-近鄰。將3個(gè)線程的10-近鄰集合進(jìn)行歸并,得到該集合中共有30個(gè)樣本,并對(duì)應(yīng)30個(gè)歐氏距離。通過(guò)在30個(gè)歐氏距離中選取10個(gè)最小值,得到全局樣本集合S中關(guān)于待分類(lèi)樣本v0的10個(gè)近鄰。
需指出的是,本發(fā)明方法的效率與每次樣本的選擇有關(guān)。在最壞情況下,每個(gè)線程每次選擇和待查詢(xún)樣本v0相似性最小(即距離最大)的樣本,這將導(dǎo)致在過(guò)程(2)中沒(méi)有樣本被簡(jiǎn)化過(guò)濾;而在最好情況下,每個(gè)線程在初始化過(guò)程(1)剛好選中了待查詢(xún)樣本v0的k個(gè)近鄰,從而接下來(lái)的所有樣本都被過(guò)濾掉。但這兩種情況都是小概率事件。