頻繁項(xiàng)集報(bào)告_第1頁
頻繁項(xiàng)集報(bào)告_第2頁
頻繁項(xiàng)集報(bào)告_第3頁
頻繁項(xiàng)集報(bào)告_第4頁
頻繁項(xiàng)集報(bào)告_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、目錄第一章 緒論11.1研究背景和意義11.2本文主要內(nèi)容2第二章 頻繁項(xiàng)集32.1頻繁項(xiàng)集概述32.2頻繁項(xiàng)集名詞解析32.3頻繁項(xiàng)集分析指標(biāo)4第三章 A-Priori算法53.1 概述53.2 Apriori核心算法過程6第四章 PCY算法8第五章 A-Priori算法的java實(shí)現(xiàn)9第六章 Hadoop核心116.1 HDFS116.1.1 HDFS概述116.1.2 NameNode和SecondNameNode126.2 MapReduce14第七章 基于MapReduce的A-Priori算法實(shí)現(xiàn)16第一章 緒論1.1研究背景和意義購物籃模型的最早應(yīng)用源于真實(shí)購物籃的分析,也就是說

2、,超時和連鎖商店都會記錄每個結(jié)賬的購物籃的內(nèi)容、這里的“項(xiàng)”指的是商店出售的不同商店,而“購物籃”指的是單個購物籃中所裝的項(xiàng)集,通過發(fā)現(xiàn)頻繁項(xiàng)集,零售商可以知道哪些商品通常會被顧客購買,那些共同購買的頻度遠(yuǎn)高于各自獨(dú)立購買所預(yù)期的頻度的項(xiàng)對或項(xiàng)集。頻繁項(xiàng)集分析的應(yīng)用并不僅限于購物籃數(shù)據(jù),同樣的模型可以用于挖掘很多其他類型的數(shù)據(jù)。例如:(1)關(guān)聯(lián)概念 這里的項(xiàng)是詞,購物籃是文檔。文檔中的所有詞就構(gòu)成了對應(yīng)購物籃中的項(xiàng),如果要尋找多篇文章中共同出現(xiàn)的詞匯集合,那么這些集合大都被高頻常見詞所占據(jù),比如,我們想要尋找貓和狗的網(wǎng)頁摘要,但是停用詞“and”和“a”卻占據(jù)了頻繁項(xiàng)集中的主要比例,如果忽略所

3、有的停用詞,那么我們希望在高頻次對中發(fā)現(xiàn)某些能夠代表聯(lián)合概念的一部分詞對。(2)文檔抄襲 這里的項(xiàng)是文檔,購物籃是句子。一篇文檔中,如果包含某個句子,則任務(wù)該句子對應(yīng)的購物籃中包含文檔對應(yīng)的項(xiàng)。本應(yīng)用中,尋找那些在多個購物籃中共同出現(xiàn)的項(xiàng)對,如果發(fā)現(xiàn)這項(xiàng)的項(xiàng)對,也就是兩篇文檔有很多相同的句子,實(shí)際當(dāng)中,設(shè)置一到兩個句子相同都是抄襲發(fā)生的有力證據(jù)。(3)生態(tài)標(biāo)志物 這里的項(xiàng)包括兩種類型,一種是諸如基金或血蛋白之類的生物標(biāo)志物,另一類是痢疾,而購物籃是某個病人的數(shù)據(jù)集,包括他的基因組合血生化分析數(shù)據(jù),以及他的病史信息。頻繁項(xiàng)集有某個疾病和一個或多個生物標(biāo)志物構(gòu)成,它們組合在一起給出的疾病是一個檢測

4、建議。1.2本文主要內(nèi)容本文對頻繁項(xiàng)集的基本概念分析指標(biāo)進(jìn)行了解釋說明,詳細(xì)介紹了頻繁項(xiàng)集中的A-Priori算法,PCY算法,并通過JAVA對A-Priori算法進(jìn)行了實(shí)現(xiàn)?,F(xiàn)在正處于大數(shù)據(jù)時代,候選項(xiàng),頻繁項(xiàng)等數(shù)以百萬計(jì),目前的單個計(jì)算機(jī)來計(jì)算頻繁項(xiàng)集耗費(fèi)時間較大,故在文章的最后引入的Hadoop的HDFS和MapReduce技術(shù),對A-Priori進(jìn)行了分布式的實(shí)現(xiàn),大大的減少的計(jì)算時間。第二章 頻繁項(xiàng)集2.1頻繁項(xiàng)集概述頻繁項(xiàng)集最經(jīng)典和常用的應(yīng)用就是超市的購物籃分析。每個購物籃里有很多商品,每個商品都是一項(xiàng)元素,每個購物籃都是一個集合,所有購物籃就形成了一個系列集合。分析哪些商品經(jīng)常一

5、起頻繁出現(xiàn)在購物籃內(nèi),即找到頻繁項(xiàng)集,然后,再分析其他商品與頻繁項(xiàng)集的關(guān)系,即關(guān)聯(lián)規(guī)則。2.2頻繁項(xiàng)集名詞解析 頻繁項(xiàng):在多個集合中,頻繁出現(xiàn)的元素/項(xiàng),就是頻繁項(xiàng) 頻繁項(xiàng)集:有一系列集合,這些集合有些相同的元素,集合中同時出現(xiàn)頻率高的元素形成一個子集,滿足一定閾值條件,就是頻繁項(xiàng)集。 極大頻繁項(xiàng)集:元素個數(shù)最多的頻繁項(xiàng)集合,即其任何超集都是非頻繁項(xiàng)集。 k項(xiàng)集:k項(xiàng)元素組成的一個集合2.3頻繁項(xiàng)集分析指標(biāo)支持度:包含頻繁項(xiàng)集F的集合的數(shù)目。可信度:頻繁項(xiàng)F與某項(xiàng)j的并集 (即F U j )的支持度與頻繁項(xiàng)集F的支持度的比值。興趣度:F U j  可信度 與 包含

6、 j 的集合比率之間的差值。若興趣度很高,則 頻繁項(xiàng)集F會促進(jìn) j 的存在, 若興趣度為負(fù)值,且頻繁項(xiàng)集會抑制 j 的存在;若興趣度為0,則頻繁項(xiàng)集對 j 無太大影響。第三章 A-Priori算法3.1 概述目前暫時只集中關(guān)注頻繁項(xiàng)對的發(fā)現(xiàn)。假如我們都有足夠的內(nèi)存用于所有項(xiàng)對計(jì)數(shù),那么通過單便掃描讀取購物籃文件就很簡單。對于每個購物籃,我們使用一個雙重循環(huán)就可以生成所有的項(xiàng)對,沒生成一個相對,就給對應(yīng)的計(jì)數(shù)器加一,最后檢查所有項(xiàng)對的技術(shù)結(jié)果并找出那些超過支持度閥值S的項(xiàng)對,這就是頻繁項(xiàng)對。然而,當(dāng)項(xiàng)對的數(shù)目太多而無法再內(nèi)存中對所有的項(xiàng)對技術(shù)時,上述的方法就不行了,A-Priori算法被設(shè)計(jì)成能

7、夠減少必須計(jì)數(shù)的項(xiàng)對數(shù)目,代價(jià)是要對數(shù)據(jù)做兩便遍而不是一遍掃描。Apriori算法是一種最有影響的挖掘布爾關(guān)聯(lián)規(guī)則頻繁項(xiàng)集的算法。其核心是基于兩階段頻集思想的遞推算法。該關(guān)聯(lián)規(guī)則在分類上屬于單維、單層、布爾關(guān)聯(lián)規(guī)則。在這里,所有支持度大于最小支持度的項(xiàng)集稱為頻繁項(xiàng)集,簡稱頻集。3.2 Apriori核心算法過程1A-priori算法的第一遍掃描第一次掃描中,要建立兩張表。如有必要,第一章表要將項(xiàng)的名稱轉(zhuǎn)換為1到n之間的整數(shù),另一張表則是一個計(jì)數(shù)數(shù)組,第i個數(shù)組元素是上述第i個項(xiàng)的出現(xiàn)次數(shù)。這些項(xiàng)的計(jì)數(shù)值的初始值是0.在讀購物籃時,檢查購物籃中的每個項(xiàng)并將其名稱轉(zhuǎn)換為一個整數(shù),然后,將剛整數(shù)作為

8、計(jì)數(shù)數(shù)組的下表找到對應(yīng)的數(shù)組元素,最后對該數(shù)組加12A-Priori算法兩遍掃描之間的處理第一遍掃描之后,檢查所有項(xiàng)的計(jì)數(shù)值,以確定哪些項(xiàng)構(gòu)成單元素頻繁項(xiàng)集,對于A-Priori算法的第二遍掃描,只給頻繁項(xiàng)重新編號,編號的范圍是1到m,此時的表格是一個下表為1到n的數(shù)組,如果第i項(xiàng)不頻繁,則對于的第i個數(shù)組元素為0.否則為1到m之間的一個唯一整數(shù)。3A-Priori算法的第二遍掃描第二遍掃描中,對兩個頻繁項(xiàng)組成的所有項(xiàng)對計(jì)數(shù)。除非一個相對中的兩個項(xiàng)都頻繁,否則這個項(xiàng)對也不可能是頻繁的。第二遍掃描的技術(shù)細(xì)節(jié)包括,對每個購物籃,在頻繁項(xiàng)集表中檢查哪些項(xiàng)是頻繁的,通過一個雙重循環(huán)生成所有的頻繁項(xiàng)對,

9、對每個頻繁項(xiàng)對,在存儲計(jì)數(shù)值的數(shù)據(jù)結(jié)構(gòu)中對應(yīng)的計(jì)數(shù)值加1.最后,在第二遍掃描結(jié)束時,檢查計(jì)數(shù)值結(jié)構(gòu)以確定哪些項(xiàng)對是頻繁項(xiàng)對。第四章 PCY算法 第一次掃描結(jié)束后,每個桶中都有一個計(jì)數(shù)值,記錄所有哈希到該桶中的項(xiàng)對的數(shù)目值和。如果某個桶中的計(jì)數(shù)值不低于支持度閥值s,那么該桶稱為頻繁桶,對于哈希到某個頻繁桶中的項(xiàng)對,可以假設(shè)其為頻繁項(xiàng)對,但是如果某個桶中的計(jì)數(shù)值小于S,那么可以確定哈希到該桶內(nèi)的項(xiàng)對都是不頻繁的,即使它由兩個頻繁項(xiàng)構(gòu)成,這個事實(shí)對第二遍掃描很有幫助。PCY兩次掃描之間,哈希表被概括表示成一個位圖,其中每一位表示一個桶。位為1表示對于的桶是頻繁的,而0表示不頻繁。因此每32位表示的整

10、數(shù)替換成1位。如果大部分桶都不頻繁,那么可以預(yù)期第二遍掃描中所要計(jì)算的項(xiàng)對數(shù)目會遠(yuǎn)小于所以頻繁項(xiàng)組成的項(xiàng)對數(shù)目。所以,在第二遍掃描中,PCY可以在處理某些數(shù)據(jù)集時避免內(nèi)存抖動。第五章 A-Priori算法的java實(shí)現(xiàn)具體代碼見附錄下面是一個實(shí)例分析以及在JAVA程序中的測試結(jié)果加入存在5個購物籃,購物籃的內(nèi)容如下所示,支持度為3.下面是A-Priori的分析過程下面是對該實(shí)例在JAVA中運(yùn)行結(jié)果顯示第六章 Hadoop核心6.1 HDFSHadoop分布式文件系統(tǒng)(HDFS)被設(shè)計(jì)成適合運(yùn)行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。6.1.1 HDFS概述HDFS

11、:分布式文件系統(tǒng),海量數(shù)據(jù)的存儲。高容錯,可以部署在廉價(jià)的機(jī)器上,提供高吞吐量的數(shù)據(jù)訪問,適合那些需要處理海量數(shù)據(jù)集的應(yīng)用程序。支持以流的形式訪問文件系統(tǒng)中的數(shù)據(jù)。HDFS主要特性:支持超大文件;檢測和快速應(yīng)對硬件故障;流式數(shù)據(jù)訪問;簡化的一致性模型;不適用下面特性:低延遲數(shù)據(jù)訪問;大量小文件;多用戶寫入文件,修改文件;名字節(jié)點(diǎn)是分布式系統(tǒng)的管理者,負(fù)責(zé)管理文件系統(tǒng)命名空間,集群配置和數(shù)據(jù)塊復(fù)制;數(shù)據(jù)節(jié)點(diǎn)是文件存儲的基本單元,以數(shù)據(jù)塊的形式保存了HDFS中文件的內(nèi)容和數(shù)據(jù)塊的數(shù)據(jù)校驗(yàn)信息;數(shù)據(jù)塊:塊的大小代表著系統(tǒng)讀寫操作的最小單位。對于用戶來說是透明的。6.1.2 NameNode和Seco

12、ndNameNodeNameNode是HDFS主從結(jié)構(gòu)中主節(jié)點(diǎn)上運(yùn)行的主要進(jìn)程,指導(dǎo)主從結(jié)構(gòu)中的從節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)執(zhí)行底層的IO任務(wù)。NameNode維護(hù)這整個文件系統(tǒng)的目錄樹,文件/目錄的元信息和文件的數(shù)據(jù)塊索引,即每個文件的數(shù)據(jù)塊列表。這些信息以兩種形式存儲在本地文件系統(tǒng)中, 一種是命名空間鏡像(File System Image文件系統(tǒng)鏡像),另一種是命名空間鏡像的編輯日志(Edit log) 命名空間鏡像保存著某一時刻的目錄樹,元信息和數(shù)據(jù)庫索引等信息,后續(xù)對這些信息的修改,保存在編輯日志中。通過NameNode,客戶端可以了解到數(shù)據(jù)塊所在的數(shù)據(jù)節(jié)點(diǎn)信息。這些信息不保

13、存在上面所述的文件系統(tǒng)中,NameNode每次啟動,都會動態(tài)的重建這些信息, 這些信息構(gòu)成了名字節(jié)點(diǎn)的第二類關(guān)系。運(yùn)行時客戶端通過名字節(jié)點(diǎn)獲得上述信息,然后和數(shù)據(jù)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交互,讀寫文件。 名字節(jié)點(diǎn)還能夠獲取HDFS整體運(yùn)行狀態(tài)的一些信息,如系統(tǒng)的可用空間,已經(jīng)使用的空間,各數(shù)據(jù)節(jié)點(diǎn)的當(dāng)前狀態(tài)。 第二名字節(jié)點(diǎn)用于定期合并命名空間鏡像和鏡像編輯日志。每個集群都有一個第二名字節(jié)點(diǎn),在大規(guī)模的部署條件下,一般第二名字節(jié)點(diǎn)也獨(dú)占一臺服務(wù)器。第二名字節(jié)點(diǎn)和名字節(jié)點(diǎn)的區(qū)別是它不接收和記錄HDFS的任何實(shí)時變化,只是根據(jù)集群配置的時間間隔,不停的獲取HDFS某一個時間點(diǎn)的命名

14、空間鏡像和鏡像 的編輯日志,合并成一個新的命名空間鏡像,這個新的命名空間鏡像就會上傳到名字節(jié)點(diǎn),替換原來的命名空間鏡像,并情況編輯日志。 在數(shù)據(jù)節(jié)點(diǎn)上,HDFS的數(shù)據(jù)塊,以linux文件系統(tǒng)上的普通文件進(jìn)行保存??蛻舳诉M(jìn)行文件操作時,先由名字節(jié)點(diǎn)告知客戶端每個數(shù)據(jù)塊駐留在哪個數(shù)據(jù)節(jié)點(diǎn), 然后客戶端直接與數(shù)據(jù)節(jié)點(diǎn)守護(hù)進(jìn)程進(jìn)行通信,處理與數(shù)據(jù)塊對應(yīng)的本地文件,同時數(shù)據(jù)節(jié)點(diǎn)會和其他的數(shù)據(jù)節(jié)點(diǎn)進(jìn)行通信,復(fù)制數(shù)據(jù)塊,保證數(shù)據(jù)的冗余性。 數(shù)據(jù)節(jié)點(diǎn)作為從節(jié)點(diǎn),會不斷地向名字節(jié)點(diǎn)報(bào)告,初始化時,每個數(shù)據(jù)節(jié)點(diǎn)將當(dāng)前存儲的數(shù)據(jù)塊告知名字節(jié)點(diǎn),后續(xù)數(shù)據(jù)節(jié)點(diǎn)工作過程中,數(shù)據(jù)節(jié)點(diǎn)

15、仍然不斷 的更新名字節(jié)點(diǎn),為之通過本地修改的相關(guān)信息,并接受來自名字節(jié)點(diǎn)的指令,創(chuàng)建移動或者刪除本地磁盤上的數(shù)據(jù)塊。 6.2 MapReduceMapReduce是一種分布式計(jì)算模型,由Google提出,主要用于搜索領(lǐng)域,解決海量數(shù)據(jù)的計(jì)算問題.MR由兩個階段組成:Map和Reduce,用戶只需要實(shí)現(xiàn)map()和reduce()兩個函數(shù),即可實(shí)現(xiàn)分布式計(jì)算,非常簡單。這兩個函數(shù)的形參是key、value對,表示函數(shù)的輸入信息。 執(zhí)行步驟:1. map任務(wù)處理1) 讀取輸入文件內(nèi)容,解析成key、value對。對輸入文件的每一行,解析成key、value對。每一個鍵值對調(diào)用一

16、次map函數(shù)。2) 寫自己的邏輯,對輸入的key、value處理,轉(zhuǎn)換成新的key、value輸出。3) 對輸出的key、value進(jìn)行分區(qū)。4) 對不同分區(qū)的數(shù)據(jù),按照key進(jìn)行排序、分組。相同key的value放到一個集合中。5) (可選)分組后的數(shù)據(jù)進(jìn)行歸約。2.reduce任務(wù)處理1) 對多個map任務(wù)的輸出,按照不同的分區(qū),通過網(wǎng)絡(luò)copy到不同的reduce節(jié)點(diǎn)。2) 對多個map任務(wù)的輸出進(jìn)行合并、排序。寫reduce函數(shù)自己的邏輯,對輸入的key、value處理,轉(zhuǎn)換成新的key、value輸出。3) 把reduce的輸出保存到文件中。第七章 基于MapReduce的A-Pri

17、ori算法實(shí)現(xiàn)A-Priori 算法, 通過對數(shù)據(jù)庫的多趟掃描來發(fā)現(xiàn) 所有的頻繁項(xiàng)集, 在海量數(shù)據(jù)的條件下, 對數(shù)據(jù)庫的掃描將會耗費(fèi)大量的時間和內(nèi)存。本文充分利用云計(jì)算提供的分布式并行計(jì)算功能, 對A-priori 算法加以改進(jìn), 得到新的適用于云計(jì)算的頻繁項(xiàng)集挖掘方法, 該方法使查找L k 和L k+ 1 的過程獨(dú)立, 能夠提高海量數(shù)據(jù)挖掘的效率。新方法的基本思想如下:( 1) 把數(shù)據(jù)庫分成規(guī)模相當(dāng)?shù)腗 個數(shù)據(jù)子集,把數(shù)據(jù)子集發(fā)送到M 個站點(diǎn);( 2) 每個站點(diǎn)掃描它的數(shù)據(jù)子集, 產(chǎn)生一個局部的候選k 項(xiàng)集的集合, 記作Cpk , 每個候選項(xiàng)集的支持度計(jì)數(shù)為1; ( 3) 利用hash 函數(shù)

18、把M 個站點(diǎn)的Cpk中相同的項(xiàng)集和它的支持度計(jì)數(shù)發(fā)送到R 個站點(diǎn);( 4) R 個站點(diǎn)中的每個站點(diǎn)把相同項(xiàng)集的計(jì)數(shù)累加起來, 產(chǎn)生最后的實(shí)際支持度, 與最小支持度計(jì)數(shù)min_sup 比較, 確定局部頻繁k 項(xiàng)集的集合L( 5) 把R 個站點(diǎn)的輸出合并即產(chǎn)生全局頻繁k項(xiàng)集的集合L k 。附錄一:package com.cars;import java.util.*;public class Apriori private double minsup = 3;/ 最小支持度private double minconf = 0.2;/ 最小置信度/ 注意使用IdentityHashMap,否則由于關(guān)

19、聯(lián)規(guī)則產(chǎn)生存在鍵值相同的會出現(xiàn)覆蓋private IdentityHashMap ruleMap = new IdentityHashMap();private String transSet = "MONKEY", "DONKEY", "MAKE", "MUCKY", "COKIE"/ 事務(wù)集/ 可以根據(jù)需要從構(gòu)造函數(shù)里傳入private int itemCounts = 0;/ 候選1項(xiàng)目集大小,即字母的個數(shù)private TreeSet frequencySet = new TreeSet

20、40;/ 頻繁項(xiàng)集數(shù)組,0:代表1頻繁集.,TreeSet()使用元素的自然順序?qū)υ剡M(jìn)行排序private TreeSet maxFrequency = new TreeSet();/ 最大頻繁集private TreeSet candidate = new TreeSet();private TreeSet candidateSet = new TreeSet40;/ 候選集數(shù)組0:代表1候選集private int frequencyIndex;public Apriori() maxFrequency = new TreeSet();itemCounts = counts();/ 初始

21、化1候選集的大小6個/ 初始化其他兩個for (int i = 0; i < itemCounts; i+) frequencySeti = new TreeSet();/初始化頻繁項(xiàng)集數(shù)組candidateSeti = new TreeSet();/初始化候選集數(shù)組candidateSet0 = candidate;/ 1候選集/主函數(shù)入口public static void main(String args) Apriori ap = new Apriori();ap.run();/方法運(yùn)行public void run() int k = 1;/求1頻繁集,保存到frequency

22、Set0中item1_gen();do k+;canditate_gen(k);frequent_gen(k); while (!is_frequent_empty(k);frequencyIndex = k - 1;print_canditate();maxfrequent_gen();print_maxfrequent();ruleGen();rulePrint();/記錄每個事務(wù)中的元素出現(xiàn)次數(shù)public double count_sup(String x) int temp = 0;for (int i = 0; i < transSet.length; i+) for (in

23、t j = 0; j < x.length(); j+) if (transSeti.indexOf(x.charAt(j) = -1)/返回指定字符在此字符串中第一次出現(xiàn)處的索引,如果不作為一個字符串,返回-1break;else if (j = (x.length() - 1)temp+;return temp;/統(tǒng)計(jì)1候選集的個數(shù)a,b,c,d,e,f,return值為6public int counts() String temp1 = null;char temp2 = 'a'/ 遍歷所有事務(wù)集String 加入集合,set自動去重了for (int i = 0

24、; i < transSet.length; i+) temp1 = transSeti;for (int j = 0; j < temp1.length(); j+) temp2 = temp1.charAt(j);/返回位置為j的temp1的值a/返回temp2的字符串表示,并且自動去重candidate.add(String.valueOf(temp2);/treeSet添加會去掉重復(fù)的值return candidate.size();/中元素個數(shù)不重復(fù),且遞增排序/求1頻繁集public void item1_gen() String temp1 = ""

25、;double m = 0;/得到1頻繁集的迭代器,迭代每一個候選項(xiàng)Iterator temp = candidateSet0.iterator();/使用方法iterator()要求容器返回一個Iterator。while (temp.hasNext() /遍歷temp(1候選集)temp1 = (String) temp.next();m = count_sup(temp1);/調(diào)用下面的方法,統(tǒng)計(jì)1候選集中每個元素個數(shù),計(jì)算支持度時,用此m/transSet.length/ 符合條件的加入 1候選集,即最小支持度大于三的全部加入頻繁集if (m >= 3) frequencySet

26、0.add(temp1);/1頻繁集加入頻繁項(xiàng)集數(shù)組,自動出去重復(fù)的集合/求K候選集public void canditate_gen(int k) String y = "", z = "", m = ""char c1 ,c2 ; / 這里減去2是因?yàn)樾枰獙︻l繁項(xiàng)個數(shù)是k-1個頻繁項(xiàng)的頻繁項(xiàng)集進(jìn)行便利Iterator temp1 = frequencySetk - 2.iterator();/iterator迭代器,用于數(shù)組遍歷Iterator temp2 = frequencySet0.iterator();/遍歷頻繁項(xiàng)集數(shù)組,

27、0:代表1頻繁集TreeSet h = new TreeSet();while (temp1.hasNext() y = (String) temp1.next();/c1 = y.charAt(y.length() - 1);/返回指定y.length() - 1(數(shù)組的最后一個)的char值while (temp2.hasNext() z = (String) temp2.next();c2 = z.charAt(0);/c2=a,b,c,d,e,f/頻繁集已經(jīng)排序,所以不會出現(xiàn)重復(fù)的情況if (c1 >= c2)continue;else m = y + z;/m為字符串組合yzh

28、.add(m);/m加入TreeSettemp2 = frequencySet0.iterator();candidateSetk - 1 = h;/ k候選集=>k頻繁集public void frequent_gen(int k) String s1 = ""Iterator ix = candidateSetk - 1.iterator();/遍歷K候選集ixwhile (ix.hasNext() s1 = (String) ix.next();/ix中的值s1if (count_sup(s1) >= (3) /s1項(xiàng)集支持度大于最小支持度frequenc

29、ySetk - 1.add(s1);/s1加入K頻繁集中 /判斷頻繁集為空public boolean is_frequent_empty(int k) if (frequencySetk - 1.isEmpty()return true;elsereturn false;/打印候選集 頻繁集public void print_canditate() for (int i = 0; i < frequencySet0.size(); i+) Iterator ix = candidateSeti.iterator();Iterator iy = frequencySeti.iterato

30、r();System.out.print("候選集" + (i + 1) + ":");while (ix.hasNext() System.out.print(String) ix.next() + "t");System.out.print("n" + "頻繁集" + (i + 1) + ":");while (iy.hasNext() System.out.print(String) iy.next() + "t");System.out.print

31、ln(); /求關(guān)聯(lián)項(xiàng)集合public void maxfrequent_gen() int i;for (i = 1; i < frequencyIndex; i+) maxFrequency.addAll(frequencySeti); /打印頻繁項(xiàng)集public void print_maxfrequent() Iterator iterator = maxFrequency.iterator();System.out.print("頻繁項(xiàng)集:");while (iterator.hasNext() System.out.print(String) iterat

32、or.next() + "t");System.out.println();System.out.println();/關(guān)聯(lián)規(guī)則項(xiàng)集public void ruleGen() String s;Iterator iterator = maxFrequency.iterator();while (iterator.hasNext() s = (String) iterator.next();subGen(s); /求關(guān)聯(lián)規(guī)則public void subGen(String s) String x = "", y = ""for (int i =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論