基于Storm的決策樹分類CVFDT并行化算法
【專利摘要】本發(fā)明公開一種基于Storm的決策樹分類CVFDT并行化算法,用于高效快速的獲取實時流數(shù)據(jù),從中提取出隱含的、未知的、潛在的和有用的信息,進行商用。通過Spout產(chǎn)生數(shù)據(jù)源,通過Bolt對數(shù)據(jù)進行傳遞和分析處理,最終構(gòu)建出一個決策樹的分類模型,構(gòu)建出的模型隨著傳輸數(shù)據(jù)流的變化而自動更新,更加具有實時性和高效性。
【專利說明】
基于Storm的決策樹分類GVFDT并行化算法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及流數(shù)據(jù)挖掘技術(shù)領(lǐng)域,尤其涉及基于Storm的決策樹分類CVFDT并行化算法。
【背景技術(shù)】
[0002]數(shù)據(jù)挖掘近年來正逐漸成為經(jīng)濟學,人工智能等領(lǐng)域的研究熱點,在當前的大數(shù)據(jù)環(huán)境下,流式數(shù)據(jù)具有快速性、連續(xù)性、變化性和多樣性等特點。由于數(shù)據(jù)的快速到達和數(shù)據(jù)規(guī)模巨大的原因,且數(shù)據(jù)流的隱含分布變化會帶來概念漂移問題,傳統(tǒng)流數(shù)據(jù)的分類方法在實時性和存儲限制等方面面臨更多的挑戰(zhàn)。實時的流數(shù)據(jù)分類算法在大數(shù)據(jù)計算平臺的實現(xiàn)過程中也會遇到執(zhí)行效率和算法準確率等各方面的問題。
【發(fā)明內(nèi)容】
[0003 ]為了解決現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明提出一種基于Storm的CVFDT算法在流數(shù)據(jù)挖掘時抵抗概念漂移的并行化技術(shù)架構(gòu),來提高對數(shù)據(jù)流的處理能力,更好的分析數(shù)據(jù)流中蘊含的信息(例如:用戶行為軌跡、交通信息、天氣信息等),優(yōu)化數(shù)據(jù)處理效率,提升數(shù)據(jù)分析精度。
[0004]Storm是一套分布式的、可靠的,可容錯的用于處理流式數(shù)據(jù)的系統(tǒng)。Storm定義了一批實時計算的原語(例如:簡單Spout和Bolt原語)。如同Hadoop大大簡化了并行批量數(shù)據(jù)處理,Storm的這些原語大大簡化了并行實時數(shù)據(jù)處理,是為了適應用海量數(shù)據(jù)和大規(guī)模計算等新需求而發(fā)展出來的模型架構(gòu)。Storm適用場景廣泛,也可以在Storm之上使用各種編程語言。一方面Storm在編寫和運行大型分布式程序計算方面具有很大的優(yōu)勢,主要是Storm具有的方便和簡捷的特性。另一方面,Storm具有良好的容錯性和很高的健壯性等特點,消息處理過程出現(xiàn)異常時Storm會重新安排問題的處理邏輯,并且Storm集群非常容易管理。這些特點使Storm在研究領(lǐng)域和應用領(lǐng)域都受到了極大的歡迎,并且得到了廣泛的應用。用戶在使用Storm平臺進行大規(guī)模數(shù)據(jù)處理時,可以將主要精力放在如何編寫Spout和Bolt上,其它并行計算中的復雜問題諸如分布式文件系統(tǒng)、工作調(diào)度、容錯、消息傳遞等都交給Storm系統(tǒng)來處理,在很大程度上降低了整個編程難度。
[0005]基于Storm的決策樹分類CVFDT并行化算法,包括以下步驟:
[0006]Al、啟動一個Storm拓撲,設(shè)置噴發(fā)節(jié)點并分配并發(fā)數(shù);
[0007]A2、由ReadLogSpout產(chǎn)生訓練樣本流(x,y)并分配給ReadAttBolt ,ReadAttBolt將數(shù)據(jù)轉(zhuǎn)化為Instance類型并發(fā)送給CVFDTBolt;
[0008]A3、CVFDTBolt初始化根節(jié)點、窗口 W、替代子樹集合,并將決策樹模型根節(jié)點發(fā)送送給 CheckingSplitBolt;
[0009]A4、樣本((x,y),ID)被添加到窗口 W中,窗口未滿則繼續(xù)添加下一個樣本直到窗口中樣本數(shù)達到閾值w;
[0010]A5、釋放先到達的樣本,刪除釋放的樣本所經(jīng)過節(jié)點的統(tǒng)計值Ni jk,其中i代表屬性,j代表屬性取值,k代表類別,Ni jk表示該節(jié)點對于每個屬性i的每個屬性值j,屬于k類的樣本的個數(shù),然后從窗口中刪除釋放的樣本以更新窗口;
[0011]A6、當葉子節(jié)點中的樣本數(shù)達到分裂所需的最小值,對當前節(jié)點中屬性的信息增益進行計算,并在信息增益最高的屬性上進行分裂,每一個屬性值對應一個分枝;
[0012]A7、當替代子樹中的樣本數(shù)達到用戶輸入的最小值f,統(tǒng)計接下來到達的測試樣本,比較在此節(jié)點下所有替代子樹的精度:如果某個替代子樹的精度比原葉子節(jié)點高,則原葉子節(jié)點將被該替代子樹替代;否則執(zhí)行AS;
[0013]A8、CVFDT決策樹建樹完成并隨概念漂移更新。
[0014]本發(fā)明提高了數(shù)據(jù)決策的效率,減少了數(shù)據(jù)預處理的時間,能夠快速的處理實時的流數(shù)據(jù);龐大流數(shù)據(jù)經(jīng)過系統(tǒng)處理,迅速分析并構(gòu)建出實時精確的CVFDT算法分類模型;在分類得到的結(jié)果中可以獲取用戶的潛藏的信息,進行商用,創(chuàng)造出更大的利益。
【附圖說明】
[0015]圖1為本發(fā)明實施例基于Storm的決策樹分類CVFDT并行化算法結(jié)構(gòu)圖;
[0016]圖2為圖1中實施例的流程圖;
[0017]圖3為圖1中實施例的時序圖。
【具體實施方式】
[0018]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0019]基于Storm的決策樹分類CVFDT并行化算法的過程如圖2:
[°02°] I)、實例化TopologyBuiler,配置后續(xù)Spout和Bolt的消息分發(fā)關(guān)系。
[0021 ] 2)、設(shè)置的兩個噴發(fā)節(jié)點ReadLogSpout和Att_Spout,分配并發(fā)數(shù)為I,從文件中讀取數(shù)據(jù)或接收源源不斷的訓練樣本。
[0022]3)、設(shè)置一個ReadAttBolt,并發(fā)數(shù)為I,接收由ReadLogSpout噴發(fā)出的數(shù)據(jù),將傳遞過來的String類型的數(shù)據(jù)轉(zhuǎn)化為算法所需要的Instance類,將發(fā)送消息給CVFDTBoltc^g定該節(jié)點接收噴發(fā)節(jié)點的策略為隨機方式。
[0023]4)AttSpout獲取訓練樣本的所有屬性,計算所有屬性的個數(shù)size,并將每個屬性打上標簽attlndex進行分發(fā),采用fieldsGroupingO方法進行屬性的分發(fā),確保每個屬性只被 CkeckingSp IitBo It 接收一次。
[0024]5)、CVFDTBolt處理ReadAttBolt發(fā)送過來的數(shù)據(jù),初始化一個滑動窗口W和分類模型的各項參數(shù),建立初始決策樹并接收訓練樣本進行對初始決策樹的更新操作,將葉子節(jié)點node及各項參數(shù)發(fā)送給CheckingSplitBolt進行并行化操作。
[°°25] 6)、CheckingSplitBolt根據(jù)AttSpout發(fā)送過來的屬性個數(shù)和設(shè)置線程數(shù)量,設(shè)置多個線程并行的對數(shù)據(jù)進行預處理計算出各個屬性的信息增益值,效率大大高于單個線程的情況,但并不是設(shè)的線程越多效率越高,需要根據(jù)不同數(shù)據(jù),不同屬性個數(shù)以及屬性值等,測試得出最佳的線程數(shù)。
[0026]7)經(jīng)測試證明,設(shè)置4個線程同時計算8個屬性時效率最高,用list存儲屬性,size不超過2。計算出每個屬性的信息增益值后,將屬性、屬性信息增益值、屬性總個數(shù)、模型信息等發(fā)送給ChooseMaxBolt。
[0027]8)ChooseMaxBoIt定義一個HashMap〈Attribute ,Double〉,將CheckingSpIitBoIt傳過來的各個屬性以及對應的信息增益值保存在HashMap中,其中key代表是哪個屬性,value是該屬性的信息增益值。對該HashMap中的信息增益值排序得到最大和次大的增益值。
[0028]9)、ChooseMaxBolt計算出最大增益值G(a)和次大增益值G(b)以及Hoeffding約束值,計算是否達到節(jié)點分裂的要求,若達到則進行節(jié)點分裂。根據(jù)CVFDTBolt構(gòu)建的初始決策樹不斷更新當前的分類模型。
[0029]10)、由DataSpout噴發(fā)出的數(shù)據(jù)傳遞給ClassifyBolt ,ClassifyBolt接收未標記樣本以及不斷更新的決策樹,實現(xiàn)分類。EvaluateBolt接收CVFDTBolt建立并更新的決策樹,以及測試樣本,并調(diào)用評價方法對當前的決策樹進行評估。
[0030]本發(fā)明方案所公開的技術(shù)手段不僅限于上述實施方式所公開的技術(shù)手段,還包括由以上技術(shù)特征任意組合所組成的技術(shù)方案。
【主權(quán)項】
1.基于Storm的決策樹分類CVFDT并行化算法,其特征在于,包括以下步驟: Al、啟動一個Storm拓撲,設(shè)置噴發(fā)節(jié)點并分配并發(fā)數(shù); A2、由ReadLogSpout產(chǎn)生訓練樣本流(x,y)并分配給ReadAttBo 11,ReadAttBo11將數(shù)據(jù)轉(zhuǎn)化為Instance類型并發(fā)送給CVFDTBolt; A3、CVFDTBolt初始化根節(jié)點、窗口 W、替代子樹集合,并將決策樹模型根節(jié)點發(fā)送送給CheckingSplitBolt; A4、樣本((X,y ),ID)被添加到窗口 W中,窗口未滿則繼續(xù)添加下一個樣本直到窗口中樣本數(shù)達到閾值w; A5、釋放先到達的樣本,刪除釋放的樣本所經(jīng)過節(jié)點的統(tǒng)計值Nljk,其中i代表屬性,j代表屬性取值,k代表類別,Nljk表示該節(jié)點對于每個屬性i的每個屬性值j,屬于k類的樣本的個數(shù),然后從窗口中刪除釋放的樣本以更新窗口; A6、當葉子節(jié)點中的樣本數(shù)達到分裂所需的最小值,對當前節(jié)點中屬性的信息增益進行計算,并在信息增益最高的屬性上進行分裂,每一個屬性值對應一個分枝; A7、當替代子樹中的樣本數(shù)達到用戶輸入的最小值f,統(tǒng)計接下來到達的測試樣本,比較在此節(jié)點下所有替代子樹的精度:如果某個替代子樹的精度比原葉子節(jié)點高,則原葉子節(jié)點將被該替代子樹替代;否則執(zhí)行AS; A8、CVFDT決策樹建樹完成并隨概念漂移更新。
【文檔編號】G06F17/30GK105824913SQ201610147697
【公開日】2016年8月3日
【申請日】2016年3月15日
【發(fā)明人】季木, 季一木, 張永潘, 王汝傳, 談海宇, 岳棟, 張殿超, 郎賢波
【申請人】南京郵電大學