国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

孤立森林算法研究及并行化實(shí)現(xiàn)

2021-07-06 02:14誠(chéng),狄
關(guān)鍵詞:標(biāo)準(zhǔn)差長(zhǎng)度樣本

王 誠(chéng),狄 萱

(南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003)

0 引 言

異常檢測(cè)是近年來數(shù)據(jù)挖掘中熱門的研究課題之一,被廣泛應(yīng)用于醫(yī)保欺詐[1]、網(wǎng)絡(luò)入侵[2]、醫(yī)療診斷[3]等領(lǐng)域。隨著物聯(lián)網(wǎng)、云計(jì)算等技術(shù)的不斷發(fā)展,數(shù)據(jù)量日漸增長(zhǎng),傳統(tǒng)單機(jī)版異常檢測(cè)算法難以對(duì)大規(guī)模數(shù)據(jù)進(jìn)行高效檢測(cè)。因此,針對(duì)大規(guī)模數(shù)據(jù)設(shè)計(jì)相應(yīng)算法,具有重要的應(yīng)用價(jià)值。近年來,已有的異常檢測(cè)算法分為三類,分別是基于統(tǒng)計(jì)[4]、密度[5]和聚類[6]的算法。Liu等[7-8]提出的孤立森林算法,通過計(jì)算測(cè)試數(shù)據(jù)在已構(gòu)建的孤立森林模型下的平均路徑長(zhǎng)度代入公式求其異常值,該算法大大減少了計(jì)算時(shí)間,適用于高維數(shù)據(jù)。Liao等[9]提出一種基于信息熵的改進(jìn)孤立森林算法,該算法通過計(jì)算數(shù)據(jù)集中各個(gè)特征下的信息熵,優(yōu)先選擇信息熵小的特征作為切割特征,并且改進(jìn)了路徑長(zhǎng)度的計(jì)算公式,對(duì)噪聲特征具有較強(qiáng)的抵抗性。Yang等[10]提出了一種基于孤立的嵌入式無監(jiān)督特征選擇(IBFS)算法,該算法通過計(jì)算孤立森林在訓(xùn)練過程中每個(gè)特征的得分,選出表現(xiàn)優(yōu)異的特征集合進(jìn)行異常檢測(cè),提高了異常檢測(cè)精度。Yong等[11]根據(jù)Hadoop平臺(tái)業(yè)調(diào)度機(jī)制和孤立森林算法的思想,將孤立森林算法的模型構(gòu)建和異常預(yù)測(cè)兩個(gè)過程進(jìn)行了并行化設(shè)計(jì),但其運(yùn)算過程中需要多個(gè)MapReduce操作完成并行運(yùn)算,多次讀寫硬盤,耗費(fèi)大量時(shí)間。

孤立森林算法異常檢測(cè)不需要計(jì)算距離和密度,避免了大量的計(jì)算,因此能夠更好地支持高維數(shù)據(jù)的異常檢測(cè),同時(shí)孤立森林的每棵孤立二叉樹的構(gòu)建過程都是獨(dú)立的,能夠利用分布式平臺(tái)對(duì)孤立森林算法進(jìn)行并行化設(shè)計(jì)。孤立森林算法存在一些不足之處:

(1)在深入研究孤立森林算法過程中發(fā)現(xiàn),孤立森林算法在計(jì)算測(cè)試樣本的異常值時(shí),計(jì)算的是測(cè)試樣本在孤立森林的平均路徑長(zhǎng)度,而孤立森林算法的核心思想是:在一棵孤立二叉樹中,若某個(gè)葉子節(jié)點(diǎn)的路徑長(zhǎng)度短,則認(rèn)為該節(jié)點(diǎn)是異常點(diǎn)。當(dāng)某棵孤立二叉樹沒有相對(duì)短的路徑的葉子節(jié)點(diǎn)時(shí),則說明其難以區(qū)分異常點(diǎn)。

(2)Yong等[11]指出,孤立森林算法異常檢測(cè)的精度與孤立二叉樹的數(shù)量有關(guān),隨著數(shù)據(jù)量的增多,所需構(gòu)建孤立二叉樹的數(shù)量也相應(yīng)增多,從而導(dǎo)致耗費(fèi)大量?jī)?nèi)存和時(shí)間,影響算法效率。

針對(duì)第一點(diǎn)不足,對(duì)孤立森林中每棵孤立二叉樹的路徑長(zhǎng)度的標(biāo)準(zhǔn)差進(jìn)行歸一化加權(quán),計(jì)算異常值。若標(biāo)準(zhǔn)差大,則說明該棵孤立二叉樹中各葉子節(jié)點(diǎn)間的路徑長(zhǎng)度差異大,具有較好的異常檢測(cè)能力,應(yīng)賦予較高的權(quán)值,否則賦予較低的權(quán)值。通過加權(quán)計(jì)算測(cè)試樣本在孤立森林的異常值,以提高異常檢測(cè)的精確度。針對(duì)第二點(diǎn)不足,利用Spark平臺(tái)實(shí)現(xiàn)改進(jìn)算法的并行化。Spark平臺(tái)是基于內(nèi)存設(shè)計(jì)的,避免了Hadoop平臺(tái)MapReduce操作需要頻繁讀寫磁盤,能夠加快整體的異常檢測(cè)速度。

1 相關(guān)工作

1.1 孤立森林算法

孤立森林是由多棵孤立二叉樹組成的,孤立二叉樹的構(gòu)建過程是算法的核心,孤立二叉樹的構(gòu)建過程如下:

(1)從數(shù)據(jù)集D中隨機(jī)選擇m個(gè)樣本點(diǎn)作為生成本棵孤立二叉樹的樣本集Ds。

(2)從樣本集Ds中隨機(jī)選擇一個(gè)特征f和一個(gè)切割值p。若節(jié)點(diǎn)N包含的所有樣本在特征f下的最大值和最小值分別為f_max和f_min,則有p∈[f_min,f_max]。

(3)若樣本的特征f的值小于切割值p,則將該樣本分到節(jié)點(diǎn)N的左孩子;否則,分到右孩子。

(4)重復(fù)(2)、(3)兩步,分別對(duì)節(jié)點(diǎn)N的左右孩子節(jié)點(diǎn)進(jìn)行切分,生成孤立二叉樹。當(dāng)孩子節(jié)點(diǎn)中有多條相同的數(shù)據(jù)或只有一條數(shù)據(jù)或孤立二叉樹已達(dá)到設(shè)置的最大高度時(shí),停止生成孤立二叉樹。

(5)孤立森林最終由用戶指定數(shù)目的孤立二叉樹組成。根據(jù)樣本點(diǎn)d在每棵孤立二叉樹中的路徑長(zhǎng)度h(d),利用公式(1)計(jì)算d的異常值,從而評(píng)價(jià)其異常情況。

(1)

1.2 Spark大數(shù)據(jù)計(jì)算框架

Spark[12-13]是加州大學(xué)伯克利分校的AMP實(shí)驗(yàn)室開發(fā)的一款基于內(nèi)存的并行分布式計(jì)算框架。相較于Hadoop框架中的分布式計(jì)算模塊MapReduce需要頻繁讀寫磁盤I/O操作,Spark框架基于內(nèi)存的設(shè)計(jì),將每一輪的輸出結(jié)果都緩存在內(nèi)存中,避免了從HDFS中讀取數(shù)據(jù),更適合需要多次迭代的算法。Spark的運(yùn)行架構(gòu)模型如圖1所示,其基本運(yùn)行流程是:

圖1 Spark運(yùn)行架構(gòu)模型

(1)Spark在驅(qū)動(dòng)節(jié)點(diǎn)Driver端運(yùn)行main()方法并創(chuàng)建SparkContext以構(gòu)建Spark Application的運(yùn)行環(huán)境,創(chuàng)建完成后的SparkContext向資源管理器Cluster Manager申請(qǐng)所需要的CPU、內(nèi)存等資源并申請(qǐng)運(yùn)行多個(gè)執(zhí)行節(jié)點(diǎn)Executor,Cluster Manager分配并啟動(dòng)各個(gè)Executor。

(2)SparkContext構(gòu)建有向無環(huán)圖DAG以反映彈性分布式數(shù)據(jù)集RDD之間的依賴關(guān)系,并將其分解成任務(wù)集TaskSet發(fā)送給有向無環(huán)圖調(diào)度器TaskScheduler。

(3)各Executor向SparkContext申請(qǐng)Task,TaskScheduler將Task分發(fā)給各個(gè)Executor,同時(shí)SparkContext將打好的程序Jar包發(fā)送給各個(gè)Executor,各Executor執(zhí)行結(jié)束后將結(jié)果收集給Driver端[14],最終釋放資源。

2 改進(jìn)孤立森林算法的并行化實(shí)現(xiàn)

2.1 加權(quán)孤立森林的構(gòu)建算法

如公式(1)所示,孤立森林在計(jì)算測(cè)試樣本異常值時(shí),計(jì)算的是測(cè)試樣本在孤立森林的平均路徑長(zhǎng)度,忽略了各孤立二叉樹的異常檢測(cè)能力的差異性,即每個(gè)葉子節(jié)點(diǎn)的路徑都很長(zhǎng)的孤立二叉樹難以區(qū)分異常點(diǎn),而具有短路徑的葉子節(jié)點(diǎn)的孤立二叉樹能夠更好地區(qū)分異常點(diǎn)。如圖2和圖3所示,圖2的孤立二叉樹比圖3的孤立二叉樹具有更強(qiáng)的區(qū)分異常點(diǎn)的能力。因此該文通過計(jì)算每棵孤立二叉樹的路徑長(zhǎng)度標(biāo)準(zhǔn)差對(duì)具有更強(qiáng)區(qū)分異常點(diǎn)能力的樹進(jìn)行加權(quán),同時(shí)減小區(qū)分異常點(diǎn)能力較差的樹的權(quán)值。

圖2 區(qū)分異常能力強(qiáng)的孤立二叉樹

圖3 區(qū)分異常能力差的孤立二叉樹

若一棵孤立二叉樹的葉子節(jié)點(diǎn)集合為Node={node1,node2,…,noden},葉子節(jié)點(diǎn)的路徑長(zhǎng)度集合為Hnode={h1,h2,…,hn},則該棵樹的路徑長(zhǎng)度標(biāo)準(zhǔn)差σ的計(jì)算公式為:

(2)

其中,n為葉子節(jié)點(diǎn)的總個(gè)數(shù),μ為該棵樹所有葉子節(jié)點(diǎn)路徑長(zhǎng)度的均值。

若孤立森林中所有孤立二叉樹的路徑長(zhǎng)度標(biāo)準(zhǔn)差集合為σ={σ1,σ2,…,σn},其中最大值為σmax,最小值為σmin,對(duì)路徑長(zhǎng)度標(biāo)準(zhǔn)差集合進(jìn)行歸一化,公式為:

(3)

若數(shù)據(jù)集D中每個(gè)樣本點(diǎn)d在每棵孤立二叉樹中的路徑長(zhǎng)度為集合Hd={h1,h2,…,hn},孤立二叉樹的權(quán)重集W={w1,w2,…,wn},則樣本點(diǎn)d的異常值計(jì)算公式為:

(4)

具體算法實(shí)現(xiàn)如下:

算法1:加權(quán)孤立森林的構(gòu)建算法。

輸出:孤立森林,權(quán)重集W。

(1)對(duì)數(shù)據(jù)集D進(jìn)行隨機(jī)采樣,抽取m個(gè)數(shù)據(jù)放入集合Ds中。

(2)調(diào)用孤立二叉樹生成算法,并傳入相關(guān)參數(shù),生成單棵孤立二叉樹。

(3)利用公式(2)計(jì)算當(dāng)前生成的孤立二叉樹的路徑長(zhǎng)度標(biāo)準(zhǔn)差。

(4)重復(fù)1、2兩步,直到生成n棵孤立二叉樹及路徑長(zhǎng)度標(biāo)準(zhǔn)差集合。

(5)利用公式(3)對(duì)路徑長(zhǎng)度標(biāo)準(zhǔn)差集合進(jìn)行歸一化,生成權(quán)重集W。

(6)返回由n棵孤立二叉樹組成的孤立森林及權(quán)重集W。

算法2:樣本點(diǎn)異常值計(jì)算流程。

輸入:數(shù)據(jù)集D,權(quán)重集W;

輸出:數(shù)據(jù)集D的異常值集N。

(1)計(jì)算數(shù)據(jù)集D中每個(gè)樣本點(diǎn)在每棵孤立二叉樹中的路徑長(zhǎng)度集合Hd。

(2)利用公式(4),加權(quán)計(jì)算每個(gè)樣本點(diǎn)的異常值,并合為異常值集N。

(3)返回?cái)?shù)據(jù)集D的異常值集N。

2.2 改進(jìn)孤立森林算法的并行化設(shè)計(jì)

該文利用Spark平臺(tái)實(shí)現(xiàn)改進(jìn)孤立森林算法的并行化。主要步驟包括:數(shù)據(jù)抽樣、模型構(gòu)建和異常預(yù)測(cè)。整體框架如圖4所示。

圖4 改進(jìn)孤立森林算法并行化框架

(1)數(shù)據(jù)抽樣。

單機(jī)版的孤立森林算法需要對(duì)原始數(shù)據(jù)集進(jìn)行隨機(jī)抽樣,利用抽樣后的數(shù)據(jù)集生成孤立二叉樹。而Spark平臺(tái)數(shù)據(jù)存儲(chǔ)核心RDD是分布式數(shù)據(jù)集,如果直接對(duì)各個(gè)分區(qū)的數(shù)據(jù)進(jìn)行定量隨機(jī)抽樣,不能保證抽樣后得到的數(shù)據(jù)集是全局隨機(jī)的。雖然Spark提供了sample抽樣算子,但會(huì)導(dǎo)致非確定性大小的采樣樣本集。因此,該文設(shè)計(jì)從HDFS中讀取數(shù)據(jù)文件,轉(zhuǎn)化成RDD記為RDD_data,在Driver端首先利用count算子計(jì)算RDD_data數(shù)據(jù)總量,創(chuàng)建RandomData-Generator類,根據(jù)RDD_data數(shù)據(jù)總量、孤立二叉樹數(shù)量、隨機(jī)采樣樣本數(shù)量,隨機(jī)生成包含行號(hào)索引值的二維數(shù)組,并將其映射為(rowId(行號(hào)),treeIdArray(該行數(shù)據(jù)對(duì)應(yīng)的孤立二叉樹ID集合))的格式,最后將該形式的變量廣播到各個(gè)Executor端,以減少Shuffle成本。利用zipWithIndex算子,為RDD_data添加全局索引號(hào),在各個(gè)Executor端利用廣播來的變量中的行號(hào)對(duì)RDD_data數(shù)據(jù)內(nèi)容篩選過濾,并通過flatMap、reduceByKey算子生成(treeId(孤立二叉樹ID),ContentArray(構(gòu)建此ID孤立二叉樹所需的數(shù)據(jù)集))格式的數(shù)據(jù)集:RDD_sample。

(2)模型構(gòu)建。

將RDD_sample數(shù)據(jù)集map到各個(gè)Executor端進(jìn)行孤立二叉樹的并行同步構(gòu)建并計(jì)算各個(gè)孤立二叉樹的路徑長(zhǎng)度標(biāo)準(zhǔn)差,數(shù)據(jù)格式分別為:(treeId(孤立二叉樹ID),tree(孤立二叉樹))、(treeId(孤立二叉樹ID),stdPath(路徑長(zhǎng)度標(biāo)準(zhǔn)差))。利用collect算子將多棵孤立二叉樹及各自的路徑長(zhǎng)度標(biāo)準(zhǔn)差收集到Driver端,并將多棵樹的路徑長(zhǎng)度標(biāo)準(zhǔn)差合并歸一化成一個(gè)數(shù)據(jù)格式為(treeId(孤立二叉樹ID),weight(權(quán)重))的權(quán)重集。最后將構(gòu)建好的模型及權(quán)重集分別存入RDD_model和RDD_weight中。

(3)異常預(yù)測(cè)。

將構(gòu)建好的模型RDD_model廣播給各個(gè)Executor,測(cè)試數(shù)據(jù)集并行遍歷每一棵孤立二叉樹,得到每一個(gè)測(cè)試數(shù)據(jù)樣本在模型下的路徑長(zhǎng)度集合,集合中元素的數(shù)據(jù)格式為(treeId(孤立二叉樹ID),pathLength(路徑長(zhǎng)度)),利用權(quán)重集RDD_weight對(duì)每一個(gè)測(cè)試數(shù)據(jù)樣本的路徑長(zhǎng)度集合進(jìn)行加權(quán)計(jì)算,得到每一個(gè)測(cè)試數(shù)據(jù)樣本的異常值,從而評(píng)價(jià)其異常情況。

3 實(shí)驗(yàn)設(shè)計(jì)與結(jié)果分析

3.1 實(shí)驗(yàn)數(shù)據(jù)集

實(shí)驗(yàn)數(shù)據(jù)集選取自威斯康星州數(shù)據(jù)集Breastw、UCI數(shù)據(jù)集Shuttle和KDD CUP 99數(shù)據(jù)集Http[15],數(shù)據(jù)集的具體信息如表1所示。

表1 數(shù)據(jù)集具體信息

3.2 異常檢測(cè)精確度

該文使用表1中的三個(gè)數(shù)據(jù)集對(duì)三種算法進(jìn)行實(shí)驗(yàn)對(duì)比分析。其中,三個(gè)算法的參數(shù)均為:孤立二叉樹數(shù)量n=100,隨機(jī)采樣樣本數(shù)量m=256,樹的高度限制l=8。采用ROC曲線下的面積AUC指標(biāo)來評(píng)價(jià)算法異常檢測(cè)精確度。AUC值的范圍為[0,1],其值越接近1則說明算法的檢測(cè)效果越好。具體的實(shí)驗(yàn)結(jié)果如表2所示。

表2 三種算法的AUC值

從表2中可以看出,對(duì)于Breastw、Shuttle和Http三個(gè)數(shù)據(jù)集,改進(jìn)孤立森林算法相對(duì)于原始孤立森林算法的AUC值分別提高了2.22%、2.51%、1.65%,這是因?yàn)楦倪M(jìn)孤立森林算法改進(jìn)了異常值計(jì)算公式,為高異常檢測(cè)能力的孤立二叉樹賦予更高的權(quán)值,從而讓異常點(diǎn)更為突出。并行化改進(jìn)孤立森林算法與改進(jìn)孤立森林算法的AUC值沒有明顯差異,因此并行化改進(jìn)孤立森林算法在異常檢測(cè)精度上能與改進(jìn)孤立森林算法保持一致。同時(shí),改進(jìn)孤立森林算法由于需要計(jì)算路徑長(zhǎng)度標(biāo)準(zhǔn)差并歸一化為權(quán)重集,相對(duì)于原始孤立森林算法增加了些許時(shí)間開銷,但在小規(guī)模數(shù)據(jù)集上可以忽略不計(jì)。并行化改進(jìn)孤立森林算法相較于單機(jī)的改進(jìn)孤立森林算法耗費(fèi)了更多的時(shí)間,這是由于數(shù)據(jù)規(guī)模小時(shí),集群初始化、任務(wù)調(diào)度及節(jié)點(diǎn)間的數(shù)據(jù)通信時(shí)間遠(yuǎn)大于算法本身的運(yùn)算時(shí)間。

3.3 并行性能實(shí)驗(yàn)

實(shí)驗(yàn)環(huán)境是基于Spark平臺(tái)的計(jì)算集群,該集群共有4個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的CPU核數(shù)為1核,內(nèi)存為2 G,硬盤為30 G,Java版本為1.8.0,Scala版本為2.11.0,Hadoop版本為2.7.6,Spark版本為2.4.0。實(shí)驗(yàn)數(shù)據(jù)集是由Breastw數(shù)據(jù)集構(gòu)造的行數(shù)為100萬行、300萬行、500萬行、800萬行的大規(guī)模數(shù)據(jù)集。分別對(duì)這四個(gè)大規(guī)模數(shù)據(jù)集進(jìn)行對(duì)比實(shí)驗(yàn),其中自變量為孤立二叉樹數(shù)目,分別為100棵、200棵、300棵、400棵、500棵。同時(shí)計(jì)算當(dāng)孤立二叉樹數(shù)量為100時(shí),改進(jìn)孤立森林算法在Spark集群下的加速比,評(píng)價(jià)其并行性能。實(shí)驗(yàn)結(jié)果如圖5~圖6所示。

從圖5中可以看出,在不同數(shù)據(jù)規(guī)模下,隨著孤立二叉樹數(shù)目的不斷增加,單機(jī)和并行化的孤立森林算法的運(yùn)行時(shí)間都呈線性增加,單機(jī)算法的增幅更陡峭,并行算法的增幅平緩。當(dāng)數(shù)據(jù)量達(dá)到800萬行、孤立二叉樹數(shù)目為500棵時(shí),單機(jī)運(yùn)行時(shí)間是并行化后的運(yùn)行時(shí)間的4.34倍。從圖6中可以看出并行化改進(jìn)孤立森林算法總體上有很好的加速比。隨著數(shù)據(jù)量的不斷增大,加速比隨著節(jié)點(diǎn)數(shù)的增加而明顯增大,當(dāng)數(shù)據(jù)量達(dá)到800萬行、節(jié)點(diǎn)數(shù)為4時(shí),加速比提升到了2.88。因此,并行化改進(jìn)孤立森林算法能夠更高效地處理需要構(gòu)建大量孤立二叉樹的大規(guī)模數(shù)據(jù)集。

圖5 不同規(guī)模數(shù)據(jù)集下運(yùn)行時(shí)間對(duì)比

圖6 100棵孤立二叉樹下的加速比

4 結(jié)束語

該文針對(duì)孤立森林算法在計(jì)算測(cè)試樣本的異常值時(shí),忽略了孤立二叉樹間檢測(cè)異常能力差異性以及大規(guī)模數(shù)據(jù)下構(gòu)建大量孤立二叉樹需要耗費(fèi)大量?jī)?nèi)存時(shí)間這兩點(diǎn)不足進(jìn)行改進(jìn),加權(quán)計(jì)算測(cè)試樣本在孤立森林中的異常值并基于Spark平臺(tái)設(shè)計(jì)實(shí)現(xiàn)并行化改進(jìn)孤立森林算法。通過多個(gè)對(duì)比實(shí)驗(yàn)結(jié)果表明,并行化改進(jìn)孤立森林算法能夠加快大規(guī)模數(shù)據(jù)集下的異常檢測(cè)速度,同時(shí)提高了異常檢測(cè)精度。下一步將把該算法與實(shí)際應(yīng)用場(chǎng)景相結(jié)合,檢驗(yàn)其實(shí)際應(yīng)用價(jià)值。

猜你喜歡
標(biāo)準(zhǔn)差長(zhǎng)度樣本
過程能力指數(shù)法在改進(jìn)中小學(xué)教學(xué)質(zhì)量中的應(yīng)用
規(guī)劃·樣本
愛的長(zhǎng)度
特殊長(zhǎng)度的測(cè)量
隨機(jī)微分方程的樣本Lyapunov二次型估計(jì)
長(zhǎng)度單位
語音信號(hào)幅值分布的統(tǒng)計(jì)分析
基于支持向量機(jī)的測(cè)厚儀CS值電壓漂移故障判定及處理
方差中亟待澄清的兩個(gè)錯(cuò)誤觀點(diǎn)
一支煙的長(zhǎng)度——《重九 重九》編后記