本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及到一種基于Adaboost算法的權(quán)重聚類和欠抽樣的不平衡數(shù)據(jù)集分類方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,人們獲取的信息類型和數(shù)量都在快速地增加。大量的數(shù)據(jù)噪聲和更加復(fù)雜的數(shù)據(jù)發(fā)布類型,會(huì)給我們的數(shù)據(jù)分析帶來(lái)新的挑戰(zhàn)。其中,不平衡數(shù)據(jù)集的分類已經(jīng)成為數(shù)據(jù)挖掘中最具挑戰(zhàn)性的問(wèn)題之一,它廣泛存在于醫(yī)療診斷,信用評(píng)估等領(lǐng)域。在不平衡數(shù)據(jù)中,多數(shù)類的樣本數(shù)量遠(yuǎn)遠(yuǎn)大于少數(shù)類的數(shù)量,如果使用普通的機(jī)器學(xué)習(xí)方法和評(píng)價(jià)標(biāo)準(zhǔn),很有可能會(huì)導(dǎo)致少數(shù)類被忽略,甚至直接被當(dāng)做噪聲處理掉。因此,普通的機(jī)器學(xué)習(xí)算法對(duì)不平衡數(shù)據(jù)集進(jìn)行學(xué)習(xí)分類時(shí)往往難以取得較好的效果。
針對(duì)不平衡數(shù)據(jù)分類問(wèn)題,研究者進(jìn)行了大量研究,提出了許多解決方案。其中,基于數(shù)據(jù)層的方法前期對(duì)數(shù)據(jù)樣本進(jìn)行預(yù)處理,達(dá)到盡量平衡化數(shù)據(jù)樣本的效果。如SMOTE方法,采用人工合成新樣本的方式以平衡樣本分布。然而,SMOTE在合成樣本的過(guò)程中具有一定的盲目性,它不能對(duì)合成樣本數(shù)量進(jìn)行精確控制,同時(shí)也沒(méi)有充分考慮到多數(shù)類近鄰樣本,往往導(dǎo)致嚴(yán)重的樣本重疊。在這種情況下,SMOTEBoost算法將SMOTE方法數(shù)據(jù)層上的改進(jìn)與集成學(xué)習(xí)相結(jié)合,在Adaboost算法每次迭代中引入合成樣本,使得分類器對(duì)類別平衡關(guān)注。而RUSBoost算法則將欠抽樣方法與Adaboost算法結(jié)合,在不平衡數(shù)據(jù)集中的多數(shù)類采用欠抽樣的方式提取一部分樣本,并與少數(shù)類樣本組成樣本平衡分布的訓(xùn)練集,從而在不平衡數(shù)據(jù)集上取得較好的泛化能力。然而RUSBoost算法在每一輪的Adaboost迭代的欠采樣中,是從多數(shù)類樣本隨機(jī)地進(jìn)行抽取,因此這種方法會(huì)造成多數(shù)類樣本信息的丟失。即使通過(guò)Boosting的方法對(duì)這種丟失的信息進(jìn)行一定程度上的彌補(bǔ),但這彌補(bǔ)的程度是隨機(jī)而不可定的。
在此背景下,提出基于權(quán)重聚類和欠抽樣的不平衡數(shù)據(jù)分類算法。算法吸收Adaboost算法修改權(quán)重的方法,在訓(xùn)練的進(jìn)行過(guò)程中,依據(jù)權(quán)重將多數(shù)類樣本集合分為有序且相關(guān)性較小的子集,再?gòu)淖蛹羞M(jìn)行抽樣和少數(shù)類組成訓(xùn)練集合用于分類器算法訓(xùn)練。通過(guò)這樣的方式,在不過(guò)分提高計(jì)算開(kāi)銷的情況下,優(yōu)化了隨機(jī)欠采樣,提高了分類準(zhǔn)確率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提出基一種于權(quán)重聚類和欠抽樣的不平衡數(shù)據(jù)分類算法。由于傳統(tǒng)聚類算法處理在算法完成后便將子集固定了下來(lái),它對(duì)多數(shù)類數(shù)據(jù)集有序程度的規(guī)劃很可能不是最優(yōu)的,不能滿足集成算法的動(dòng)態(tài)要求。而且,聚類算法往往要對(duì)數(shù)據(jù)集中的所有樣本進(jìn)行迭代的距離計(jì)算,這會(huì)帶來(lái)非常大的計(jì)算開(kāi)銷。其次,傳統(tǒng)的欠抽樣方法沒(méi)有考慮不平衡數(shù)據(jù)不同分布情況對(duì)抽樣效果的影響。因此本發(fā)明的方法在聚類方式和前抽樣方式上對(duì)傳統(tǒng)的方法進(jìn)行改進(jìn),在Adaboost算法的迭代過(guò)程中對(duì)簇根據(jù)樣本權(quán)重方差對(duì)簇進(jìn)行分割,達(dá)到自動(dòng)聚類的效果,再?gòu)淖蛹幸罁?jù)樣本權(quán)重進(jìn)行抽樣和少數(shù)類組成訓(xùn)練集合用于分類器算法訓(xùn)練。通過(guò)這樣的方式,在不過(guò)分提高計(jì)算開(kāi)銷的情況下,優(yōu)化了隨機(jī)欠采樣,提高了分類準(zhǔn)確率。
為了達(dá)到以上目的,本發(fā)明在Adaboost算法模型的基礎(chǔ)上,依據(jù)樣本權(quán)重方差,在算法的每輪迭代過(guò)程中對(duì)簇進(jìn)行分裂,從而將多數(shù)類樣本劃分為幾個(gè)特定的簇,再?gòu)拿總€(gè)簇中抽取合適地樣本組成平衡分布的訓(xùn)練集。算法具體實(shí)現(xiàn)步驟如下:
步驟1:建立Adaboost算法模型
Adaboost算法是一種典型的集成學(xué)習(xí)方法,可以有效地提高學(xué)習(xí)模型的泛化能力。它首先賦予每個(gè)訓(xùn)練樣本以相同權(quán)值,算法迭代若干輪得到若干弱分類器;對(duì)于訓(xùn)練錯(cuò)誤的樣本,算法增加其權(quán)值,也就是讓后續(xù)弱分類器更關(guān)注這類較難分類正確的樣本。對(duì)于訓(xùn)練正確的樣本,算法減小其權(quán)值,以降低下一輪被弱分類器選中的機(jī)會(huì);最后通過(guò)對(duì)這些弱分類器加權(quán)求和集成最終的分類器.算法過(guò)程如下:
步驟1.1:給定訓(xùn)練集S={(x1,y1),(x2,y2),…,(xn,yn)}和預(yù)定的迭代次數(shù)T,wt(i)表示第t輪迭代中樣本xi的權(quán)值,初始t=1。
步驟1.2:初始化樣本權(quán)重:
wt(i)=1/n,i=1,2,…,n
步驟1.3:使用弱分類算法在帶權(quán)樣本上訓(xùn)練得到弱分類器ht,并更新訓(xùn)練樣本權(quán)重并對(duì)樣本權(quán)重進(jìn)行歸一化,公式如下:
其中εt為當(dāng)前樣本分布上的加權(quán)錯(cuò)誤率,計(jì)算公式如下:
若t<T,令t=t+1并重復(fù)步驟c;
步驟1.4:輸出強(qiáng)分類器:
步驟2:基于權(quán)重方差的子集分割方法在Adaboost算法中,當(dāng)h(xi)表示一個(gè)弱分類器,w表示樣本權(quán)重,y表示樣本類別時(shí),其方式如下:
通過(guò)在每輪迭代中對(duì)權(quán)重進(jìn)行修正后,較難分類正確的樣本往往有比較高的樣本權(quán)重,而較容易分類正確的樣本權(quán)重往往比較低。定義集合的權(quán)重方差WVar,當(dāng)有集合C,C中樣本數(shù)量為NC,集合中樣本權(quán)重為w時(shí),權(quán)重方差公式如下:
利用權(quán)重方差,可以將樣本有序性進(jìn)行評(píng)估。同類且性質(zhì)接近的樣本擁有近似的權(quán)重,當(dāng)一個(gè)集合中的樣本權(quán)重近似時(shí),集合擁有較小的權(quán)重方差值。因此將C分割為兩個(gè)子集C1、C2,定義子集方差和:
其中size表示集合中樣本的數(shù)量,當(dāng)兩個(gè)子集C1、C2的樣本權(quán)重比原集合C有序時(shí),則其子集方差和較小。當(dāng)集合C中樣本數(shù)量為NC時(shí),可能的子集分割情況的數(shù)量為NC-1,選取子集方差和最小的分割最為子集的分割,當(dāng)輸入一個(gè)帶分裂簇C時(shí),NC為C中樣本的個(gè)數(shù),wk為C中樣本的權(quán)重,k=1,2…NC。在計(jì)算C中權(quán)重方差后,對(duì)C中的樣本依據(jù)權(quán)重大小進(jìn)行排序,對(duì)集合中的樣本的進(jìn)行從左到右的遍歷,每次計(jì)算左右兩個(gè)集合樣本權(quán)重的最小方差和。
wsvarmin=min0<j<J{wsvar(P1,P2)}
計(jì)算所有可能分割的子集方差和后,選取其中子集方差和最小的情況,將原簇分割為兩個(gè)子簇。
步驟3:融合權(quán)重聚類和Adaboost集成學(xué)習(xí)算法模型,已知有輸入訓(xùn)練集S={xi,yi},i=1,2…N;其中少數(shù)類集合為S+,多數(shù)類集合為S-;S+,S-∈S;Cj是S-中的一個(gè)簇,初始C1=S-;J為簇的數(shù)量;WeakLearn表示弱學(xué)習(xí)算法,則融合權(quán)重聚類和Adaboost集成學(xué)習(xí)算法模型具體步驟如下:
步驟3.1:已知有輸入訓(xùn)練集S={xi,yi},i=1,2…N;其中少數(shù)類集合為S+,多數(shù)類集合為S-;S+,S-∈S;Cj是S-中的一個(gè)簇,初始C1=S-;J為簇的數(shù)量,首先初始化所有樣本的樣本權(quán)重,公式如下:
步驟3.2:使樣本集合中的多數(shù)類集合為初始第一個(gè)簇,即C1=S-
步驟3.3:從各個(gè)簇中抽取一定數(shù)量的樣本構(gòu)成有代表性的訓(xùn)練數(shù)據(jù)集,確定每個(gè)簇的樣本抽取數(shù)量。當(dāng)wk是第j個(gè)簇中樣本的權(quán)重,N為少數(shù)類樣本的數(shù)量,那么第j的簇Cj的抽樣數(shù)量SNCj為:
之后對(duì)每個(gè)簇采用TOP-K的方式,從沒(méi)個(gè)簇Cj中隨機(jī)抽取SNCj個(gè)樣本,并與所有的少數(shù)類樣本組成臨時(shí)訓(xùn)練集S′,訓(xùn)練集中的樣本權(quán)重為w′。
步驟3.4:使用弱學(xué)習(xí)算法,根據(jù)S′以及w′訓(xùn)練一個(gè)分類器h(t)←I(S′),并計(jì)算分類誤差,分類誤差計(jì)算公式如下:
由分類誤差計(jì)算β=εt/(1-εt),并更新所有的樣本權(quán)重,公式如下:
步驟3.5:對(duì)循環(huán)次數(shù)t,計(jì)算t%step,當(dāng)t%step==0and NS<MN時(shí),對(duì)所有簇進(jìn)行步驟2所示的分裂操作。
步驟3.6:若t<T,令t=t+1,并重復(fù)步驟g,否則輸出最終的集成分類器H(x):
與現(xiàn)有技術(shù)相比,本發(fā)明分析方法的優(yōu)點(diǎn)是:基于欠抽樣和Boosting集成學(xué)習(xí)方法,,提出一種新聚類模型,在Adaboost算法迭代過(guò)程中,通過(guò)樣本權(quán)重方差綜合考慮多數(shù)類樣本對(duì)分類訓(xùn)練的重要性,并通過(guò)TOP-K的方法將有代表性的樣本抽取出來(lái)組成平衡分布的訓(xùn)練集。實(shí)際仿真結(jié)果和理論模型分析基本相一致,證實(shí)了本方法的正確性。另外,從不同數(shù)據(jù)分布的不平衡數(shù)據(jù)集的實(shí)驗(yàn)分析結(jié)果和仿真結(jié)果可以看出,在各種不平衡數(shù)據(jù)集分布情況下,該發(fā)明的方法都能很好地對(duì)有代表性的多數(shù)類樣本進(jìn)行聚類。在樣本重疊嚴(yán)重的情況下情況下,該方法明顯優(yōu)于層次聚類方法。而在少數(shù)類子集分離的情況下,相比層次聚類方法,該方法能在較少?gòu)?fù)雜度的情況下取得較好的效果。因此,本發(fā)明的方法在聚類過(guò)程中能取得更好的聚類效果,相比傳統(tǒng)方法也能取得更高的分類精確度。
附圖說(shuō)明
圖1是本發(fā)明提出的基于權(quán)重聚類和欠抽樣的不平衡數(shù)據(jù)分類方法的流程圖;
圖2是人工生成的三種不同數(shù)據(jù)分布情況下的二維數(shù)據(jù)圖;
圖3是本發(fā)明提出權(quán)重聚類方法和K-Mean聚類、層次聚類方法在普通不平衡二維數(shù)據(jù)上的聚類結(jié)果對(duì)比圖;
圖4是本發(fā)明提出方法和K-Mean聚類、層次聚類方法在少數(shù)類和多數(shù)類樣本嚴(yán)重重疊數(shù)據(jù)上的聚類結(jié)果對(duì)比圖;
圖5是本發(fā)明提出方法和K-Mean聚類、層次聚類方法在不平衡數(shù)據(jù)中少數(shù)類子集分離情況下的聚類結(jié)果對(duì)比圖;
圖6是本發(fā)明提出方法和隨機(jī)權(quán)重欠抽樣方法、最鄰近欠抽樣方法在普通不平衡二維數(shù)據(jù)上的欠抽樣效果對(duì)比圖;
圖7是本發(fā)明提出方法和隨機(jī)權(quán)重欠抽樣方法、最鄰近欠抽樣方法在少數(shù)類和多數(shù)類樣本嚴(yán)重重疊數(shù)據(jù)上的欠抽樣效果對(duì)比圖;
圖8是本發(fā)明提出方法和隨機(jī)權(quán)重欠抽樣方法、最鄰近欠抽樣方法在不平衡數(shù)據(jù)中少數(shù)類子集分離情況下的欠抽樣效果對(duì)比圖。
具體實(shí)施方法
為了更加詳細(xì)的描述本發(fā)明提出的一種基于權(quán)重聚類和欠抽樣的不平衡數(shù)據(jù)分類方法,下面將結(jié)合附圖和仿真實(shí)驗(yàn)對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
本發(fā)明在Adaboost集成學(xué)習(xí)模型的基礎(chǔ)上,通過(guò)樣本權(quán)重方差對(duì)多數(shù)類樣本簇進(jìn)行分裂,達(dá)到聚類的效果。在前抽樣階段中,從每個(gè)簇中抽取最具代表性的多數(shù)類樣本,與少數(shù)類樣本組成平衡分布的數(shù)據(jù)集供Adaboost算法進(jìn)行訓(xùn)練,最終輸出集成的強(qiáng)分類器H(x)。
具體方法包括以下步驟:
步驟1、已知有輸入訓(xùn)練集S={xi,yi},i=1,2…N;其中少數(shù)類集合為S+,多數(shù)類集合為S-;S+,S-∈S;Cj是S-中的一個(gè)簇,初始C1=S-;J為簇的數(shù)量,初始J=1;WeakLearn表示弱學(xué)習(xí)算法,本例中采用CART算法為弱學(xué)習(xí)算法,供Adaboost用作基分類器訓(xùn)練用。
步驟2、設(shè)定簇分裂步數(shù)Step=5,簇的最大數(shù)量MN,通常MN=size(S-)/size(S+)。
步驟3、對(duì)所有的樣本權(quán)重進(jìn)行歸一化:
步驟4:確定每個(gè)簇的樣本抽取數(shù)量SNCj。當(dāng)wk是第j個(gè)簇中樣本的權(quán)重,N為少數(shù)類樣本的數(shù)量,那么第j的簇Cj的抽樣數(shù)量SNCj為:
步驟5:每個(gè)簇采用TOP-K的方式,從每個(gè)簇Cj中抽取權(quán)重最大的SNCj個(gè)樣本,并與所有的少數(shù)類樣本組成臨時(shí)訓(xùn)練集S′,訓(xùn)練集中的樣本權(quán)重為w′。
步驟6:使用CART算法為基分類器,根據(jù)S′以及w′訓(xùn)練一個(gè)分類器h(t)←I(S′),并計(jì)算分類誤差εt,分類誤差計(jì)算公式如下:
步驟7:由分類誤差計(jì)算β=εt/(1-εt),并更新所有的樣本權(quán)重,公式如下:
步驟8:對(duì)循環(huán)次數(shù)t,計(jì)算t%step,當(dāng)t%step==0and NS<MN時(shí),對(duì)所有簇進(jìn)行分裂操作。當(dāng)簇為C,C中樣本數(shù)量為NC,集合中樣本權(quán)重為w時(shí),計(jì)算器權(quán)重方差,公式如下:
利用權(quán)重方差,可以將樣本有序性進(jìn)行評(píng)估。同類且性質(zhì)接近的樣本擁有近似的權(quán)重,當(dāng)一個(gè)集合中的樣本權(quán)重近似時(shí),集合擁有較小的權(quán)重方差值。因此將C分割為兩個(gè)子集C1、C2,定義子集方差和:
其中size表示集合中樣本的數(shù)量,當(dāng)兩個(gè)子集C1、C2的樣本權(quán)重比原集合C有序時(shí),則其子集方差和較小。當(dāng)集合C中樣本數(shù)量為NC時(shí),可能的子集分割情況的數(shù)量為NC-1,選取子集方差和最小的分割最為子集的分割,當(dāng)輸入一個(gè)帶分裂簇C時(shí),NC為C中樣本的個(gè)數(shù),wk為C中樣本的權(quán)重,k=1,2…NC。在計(jì)算C中權(quán)重方差后,對(duì)C中的樣本依據(jù)權(quán)重大小進(jìn)行排序,對(duì)集合中的樣本的進(jìn)行從左到右的遍歷,每次計(jì)算左右兩個(gè)集合樣本權(quán)重的最小方差和。
wsvarmin=min0<j<J{wsvar(P1,P2)}
計(jì)算所有可能分割的子集方差和后,選取其中子集方差和最小的情況,將原簇分割為兩個(gè)子簇。
步驟9:若t<T,令t=t+1,并回到步驟4,否則輸出最終的集成分類器H(x):
本發(fā)明提出的方法可分為三個(gè)部分:1)對(duì)多數(shù)類的聚類,2)從多數(shù)類簇中進(jìn)行欠抽樣,3)訓(xùn)練集成分類器。當(dāng)少數(shù)類樣本數(shù)量為Np,多數(shù)類樣本數(shù)量為Nn,則本發(fā)明提出的方法在三個(gè)部分的時(shí)間復(fù)雜度分別是O(Nn log(Nn)t),O(Np log Nn),and O(tB),其中t,d,和B分別代表聚類用的迭代次數(shù),樣本的特征個(gè)數(shù)和基分類器的時(shí)間復(fù)雜度。與本方法相比,K-Means聚類方法和層次聚類方法的時(shí)間復(fù)雜度為O(Ntd)和O(N 2d logN),其中N=Nn+Np。因此,本發(fā)明提出的方法在時(shí)間復(fù)雜度上接近K-Means算法并遠(yuǎn)遠(yuǎn)小于層次聚類算法。
實(shí)施例1:
在該實(shí)施中,使用的數(shù)據(jù)為人工生成的1000條二維數(shù)據(jù),多數(shù)類與少數(shù)類的比例為9:1。其中圖2(a)為多數(shù)類和少數(shù)類邊界較為明顯的普通不平衡數(shù)據(jù)。圖2(b)為多數(shù)類與少數(shù)類重疊的數(shù)據(jù)。圖2(c)顯示了少數(shù)類子集分離情況的不平衡數(shù)據(jù)。其中‘x’表示該點(diǎn)為多數(shù)類樣本,‘o’表示該點(diǎn)為少數(shù)類樣本。表1展示了實(shí)驗(yàn)對(duì)比所采用的算法,本實(shí)施在這三種分布的不平衡數(shù)據(jù)情況下,將本發(fā)明提出的基于樣本權(quán)重方差聚類方法與K-Means(CEU)和層次聚類方法做聚類(EHCU)效果對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)中相同灰度的樣本點(diǎn)表示同一簇的樣本。在聚類的基礎(chǔ)上,本實(shí)施將發(fā)明的欠抽樣方法與傳統(tǒng)基于權(quán)重隨機(jī)欠抽樣(CEU)、最鄰近抽樣方法(EHCU)進(jìn)行抽樣效果對(duì)比實(shí)驗(yàn)。
表1實(shí)驗(yàn)對(duì)比算法
圖3-5分別顯示了三種算法在三個(gè)人工生成數(shù)據(jù)集上的聚類結(jié)果,其中(a)圖為本發(fā)明提出方法的聚類;(b)為K-Means聚類結(jié)果圖;(c)為層次聚類結(jié)果圖。由圖3可知,當(dāng)樣本類別重疊不嚴(yán)重時(shí),本發(fā)明的方法和層次聚類方法能分辨與少數(shù)類樣本接觸較多的多數(shù)類樣本,并能很好地將少量與少數(shù)類重疊的多數(shù)類樣本分為單獨(dú)的幾個(gè)簇。由圖4可知,當(dāng)數(shù)據(jù)重疊程度較高時(shí),K-Means聚類和層次聚類不能取得較好的聚類效果,而本發(fā)明的方法能夠識(shí)別重疊部分的多數(shù)類樣本,并將其與其他樣本區(qū)分。由圖5可知,當(dāng)少數(shù)類子集分離時(shí),本發(fā)明提出的方法能夠關(guān)注子集間的多數(shù)類樣本。而K-Means聚類更趨向與樣本的空間分布,將少數(shù)類與相近的多數(shù)類分為同一簇,其效果并不理想。
圖6-8分別顯示了三種算法在三個(gè)人工生成數(shù)據(jù)集上的欠抽樣效果,其中(a)圖為本發(fā)明提出方法的欠抽樣效果圖;(b)為基于權(quán)重隨機(jī)欠抽樣(CEU)效果圖;(c)為最鄰近抽樣方法(EHCU)效果圖。由圖6可知,當(dāng)樣本類別重疊不嚴(yán)重時(shí),本發(fā)明提出的方法能夠較好地識(shí)別類別邊界。由圖7可知,當(dāng)樣本重疊嚴(yán)重時(shí),基于基于K-Means聚類的隨機(jī)權(quán)重抽樣和基于層次聚類的最鄰近抽樣并不能取得太好的效果,且不能對(duì)重疊噪聲進(jìn)行控制。由圖8可知,當(dāng)少數(shù)類樣本子集分離是,本發(fā)明的方法相比K-Means聚類的隨機(jī)權(quán)重抽樣能取得更好的效果。
實(shí)施例2:
在該實(shí)施中,選擇22組具有不同實(shí)際應(yīng)用背景的KEEL數(shù)據(jù)作為實(shí)驗(yàn)測(cè)試數(shù)據(jù)。所選取的數(shù)據(jù)集中,最小的多數(shù)類和少數(shù)類數(shù)量比為9.09,最大的為128。對(duì)于含有多個(gè)類別的數(shù)據(jù),合并某些類別或只取兩個(gè)類別。實(shí)驗(yàn)結(jié)果如表2所示。為了使結(jié)果更加可靠,實(shí)驗(yàn)對(duì)每個(gè)數(shù)據(jù)集的每次驗(yàn)證進(jìn)行5次實(shí)驗(yàn)并取AUC結(jié)果的平均值。表2顯示了各個(gè)對(duì)比算法和本文提出算法在22個(gè)不平衡數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果。
表2AUC指標(biāo)實(shí)驗(yàn)結(jié)果
結(jié)果顯示,本發(fā)明提出的算法在較多數(shù)據(jù)集上比其他算法有更好的表現(xiàn),且綜合平均AUC值最大。與表現(xiàn)第二好的算法相比,算法平均提升2%。因此,與其它算法相比,本文提出的算法在分類性能上有較好的提升。