本發(fā)明屬于數(shù)據(jù)挖掘分析技術領域,涉及數(shù)據(jù)關聯(lián)分析方法,更為具體的說,是涉及一種改進的fp-growth方法。
背景技術:
關聯(lián)分析又稱關聯(lián)挖掘,是指在交易數(shù)據(jù)、關系數(shù)據(jù)或其他信息載體中,查找存在于項目集合或?qū)ο蠹现g的頻繁模式、關聯(lián)、相關性或因果結(jié)構。在實際應用中,關聯(lián)分析能夠用于發(fā)現(xiàn)交易數(shù)據(jù)庫中不同商品(項)之間的聯(lián)系,例如常見的購物籃分析。
關聯(lián)分析適用性廣泛,為了挖掘數(shù)據(jù)庫中數(shù)據(jù)的關聯(lián)關系,常用的方法有apriori方法。apriori方法主要是根據(jù)數(shù)據(jù)庫中具有最小支持度的數(shù)據(jù)集生成關聯(lián)規(guī)則。但其缺陷也很明顯,計算機系統(tǒng)的開銷會隨著數(shù)據(jù)庫的記錄的增加呈現(xiàn)出幾何級數(shù)的增加,這就造成了計算效率的低下。而fp-growth方法能夠很好地解決這個問題。
fp-growth方法通過掃描2次數(shù)據(jù)庫形成頻繁模式樹,由此得到壓縮的數(shù)據(jù)庫映射,再根據(jù)得到的頻繁模式樹進行關聯(lián)分析。growth算法相比于apriori算法有更強的適用性和更高的計算效率,但在某些數(shù)據(jù)的應用中尚有缺陷。例如航空數(shù)據(jù)數(shù)據(jù)量大重復率低,傳統(tǒng)fp-growth算法建立fp-tree效率低下,速度慢,無法令人滿意。雖然有學者針對fp-growth算法的不足提出了很多改進算法,但是這些改進算法并不能滿足航空領域數(shù)據(jù)分析的需求,不能反映航空領域數(shù)據(jù)的特點,處理效率也不能滿足需求。因此,如何使得fp-growth算法能夠更好地適應航空領域數(shù)據(jù)分析需求、提升效率,成為亟待解決的問題。
技術實現(xiàn)要素:
針對fp-growth算法中,由于航空數(shù)據(jù)數(shù)據(jù)量大重復率低特點,導致的傳統(tǒng)fp-growth算法建立fp-tree效率低和速度慢的問題,本發(fā)明設計了一種改進的fp-growth方法,能夠顯著提高fp-growth算法的運行效率。
為了達到上述目的,本發(fā)明提供如下技術方案:
改進的fp-growth方法,包括如下步驟:
步驟1,對數(shù)據(jù)庫遍歷,獲取每個項的支持度,按順序排列支持度得到list,根據(jù)list對數(shù)據(jù)庫中的事務排序;
步驟2,根據(jù)得到的list,將數(shù)據(jù)庫中的事務插入到一個fp-tree中;
步驟3,運用bloomfilter判斷當前節(jié)點的子節(jié)點是否存在當前項,如果當前項存在于當前節(jié)點的子節(jié)點中,則尋找到該節(jié)點進行插入;如果當前項不存在于當前節(jié)點的子節(jié)點中,則產(chǎn)生一個新的節(jié)點進行插入;
步驟4,挖掘數(shù)據(jù)庫中各項之間的關聯(lián)關系。
進一步的,步驟1具體包括如下步驟:
步驟11,掃描一遍數(shù)據(jù)集,計算每個項的支持度;
步驟12,按照最小支持度刪除不符合要求的項;
步驟13,按照支持度的逆序排列,排列結(jié)果即為list;
步驟14,將數(shù)據(jù)庫中的各個事務按照list重新排列。
進一步的,步驟2具體包括:
步驟21,將當前事務的當前項插入當前節(jié)點的子節(jié)點中,對于第一次插入則當前節(jié)點為null節(jié)點;如果當前節(jié)點的子節(jié)點存在當前項,則將該子節(jié)點的支持度加1,如果不存在,則創(chuàng)建一個新的節(jié)點,新節(jié)點支持度為1;
步驟22,將當前節(jié)點移動到該子節(jié)點或新節(jié)點;
步驟23,將當前事務中的當前項移動到下一項,重復步驟21至步驟23;如果當前事務中的當前項沒有下一項則移動到下一事務,重復步驟21至步驟23,如果沒有下一事務則完成fp-tree的建立。
進一步的,步驟3中bloomfilter的判斷過程如下:
計算數(shù)據(jù)集x中每一個字符串的k個hash值,然后將k個hash值插入到位數(shù)組v中,將要查詢的事務分別計算k個hash值,模擬插入步驟,建立一個新的位數(shù)組v′,將與v進行對比,如果相同則說明要查詢的事務在原事務集中。
進一步的,插入規(guī)則為,如果對應位的值為0,hash值為1,則將位數(shù)組中對應位置變?yōu)?,如果位數(shù)組中對應位置已經(jīng)為1,則不作變動。
進一步的,步驟4具體包括如下步驟:
步驟41,按照list的逆序選擇第一個節(jié)點n1,將包含n1的路徑保存,刪除其余的節(jié)點路徑,并更新fp-tree中的支持度,生成條件模式樹;
步驟42,按照list的逆序?qū)ふ襫1的下一個節(jié)點n2,根據(jù)新樹中的支持度刪除不頻繁項;
步驟43,按照list的逆序繼續(xù)尋找n2下一個節(jié)點,重復步驟42,直到list中的第一個元素;
步驟44,合并所有的頻繁項集,所得是以n1為節(jié)點的頻繁項集;
步驟45,遞歸尋找n1的下一個節(jié)點,重復步驟41-步驟44,直到節(jié)點為null。
進一步的,所述步驟42中,如果有公共前綴,則進行合并。
與現(xiàn)有技術相比,本發(fā)明具有如下優(yōu)點和有益效果:
本發(fā)明方法通過判斷插入步驟與查詢步驟中位數(shù)組的異同,簡化fp-tree的插入時間,從而降低了建立fp-tree的時間,提高了方法的運行效率;在bloomfilter判斷后,當數(shù)據(jù)不存在時直接插入一個新的節(jié)點,從而減少了遍歷的判斷過程,提高算法效率。與傳統(tǒng)的fp-growth方法相比,在測試數(shù)據(jù)量比較大的時候本發(fā)明方法運行效率有明顯的提高,能夠顯著優(yōu)化航空數(shù)據(jù)的運算效率。
附圖說明
圖1為本發(fā)明提供的改進的fp-growth方法步驟流程圖。
圖2為改進的fp-growth算法和fp-growth算法運算時間對比圖。
具體實施方式
以下將結(jié)合具體實施例對本發(fā)明提供的技術方案進行詳細說明,應理解下述具體實施方式僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍。
本發(fā)明提供的改進的fp-growth方法,如圖1所示,包括如下步驟:
s1、對數(shù)據(jù)庫遍歷,獲取每個項的支持度,得到list,根據(jù)list對數(shù)據(jù)庫中的事務排序;
具體的,s1步驟具體包括如下步驟:
s11、掃描一遍數(shù)據(jù)集,計算每個項的支持度。
s12、按照最小支持度刪除不符合要求的項,即如果當前項的支持度小于最小支持度則刪去該項;
s13、按照支持度的逆序排列,排列結(jié)果即為list;
s14、將數(shù)據(jù)庫中的各個事務按照list重新排列。
s2、根據(jù)得到的list,將數(shù)據(jù)庫中的事務插入到一個fp-tree中;
具體的,s2步驟包括如下步驟:
s21,將當前事務的當前項插入當前節(jié)點的子節(jié)點中,對于第一次插入則當前節(jié)點為null節(jié)點;
如果當前節(jié)點的子節(jié)點存在當前項,則將該子節(jié)點的支持度加1,如果不存在,則創(chuàng)建一個新的節(jié)點,新節(jié)點支持度為1;
s22、將當前節(jié)點移動到該子節(jié)點或新節(jié)點;
s23、將當前事務中的當前項移動到下一項,重復步驟21至步驟23;如果當前事務中的當前項沒有下一項則移動到下一事務,重復步驟21至步驟23,如果沒有下一事務則完成fp-tree的建立。
s3、運用bloomfilter判斷當前節(jié)點的子節(jié)點是否存在當前項;
具體操作為:計算數(shù)據(jù)集x中每一個字符串的k個hash值,然后將k個hash值插入到位數(shù)組v中,插入規(guī)則為,如果對應位的值為0,hash值為1,則將位數(shù)組中對應位置變?yōu)?,如果位數(shù)組中對應位置已經(jīng)為1,則不作變動。將要查詢的事務分別計算k個hash值,然后模擬插入步驟,建立一個新的位數(shù)組v′,然后將與v進行對比,如果相同則說明要查詢的事務在原事務集中,即當前項存在于當前節(jié)點的子節(jié)點中。如果當前項存在于當前節(jié)點的子節(jié)點中,則尋找到該節(jié)點進行插入。如果當前項不存在于當前節(jié)點的子節(jié)點中,則產(chǎn)生一個新的節(jié)點進行插入。
該過程中,如果經(jīng)過bloomfilter判斷后,數(shù)據(jù)不存在,則可以直接插入一個新的節(jié)點,從而減少了遍歷的判斷過程,提高了算法的運行效率。
s4、挖掘數(shù)據(jù)庫中各項之間的關聯(lián)關系。
具體的,該步驟包括如下步驟:
s41、按照list的逆序選擇第一個節(jié)點n1,將包含n1的路徑保存,刪除其余的節(jié)點路徑,并更新fp-tree中的支持度,生成條件模式樹。
s42、按照list的逆序?qū)ふ襫1的下一個節(jié)點n2,根據(jù)新樹中的支持度刪除不頻繁項,如果有公共前綴,則進行合并。
s43、按照list的逆序繼續(xù)尋找n2下一個節(jié)點,重復步驟s42,直到list中的第一個元素。
s44、合并所有的頻繁項集,所得是以n1為節(jié)點的頻繁項集。
s45、遞歸尋找n1的下一個節(jié)點,重復s41-s44步驟,直到節(jié)點為null。
本發(fā)明利用真實航空數(shù)據(jù),分別用fp-growth方法和本發(fā)明提供的改進的fp-growth方法進行運算,并針對上述兩個方法從運算時間方面進行了對比,結(jié)果如圖2所示。由圖2可知:兩種算法在測試數(shù)據(jù)量比較低的時候運行速度是一樣的,但在測試數(shù)據(jù)量比較大的時候就有了明顯的區(qū)別。從觀察結(jié)果可知,改進的fp-growth在提高運行效率的方面擁有良好的表現(xiàn),能夠顯著優(yōu)化傳統(tǒng)的fp-growth算法在航空數(shù)據(jù)方面的運算效率。
本發(fā)明方案所公開的技術手段不僅限于上述實施方式所公開的技術手段,還包括由以上技術特征任意組合所組成的技術方案。應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍。