关联规则算法c语言样例及分析_推荐系统总结系列-关联规则算法(四)
基于關(guān)聯(lián)規(guī)則的推薦有三種方法:Apriori關(guān)聯(lián)規(guī)則算法FP Tree關(guān)聯(lián)規(guī)則算法;PrefixSpan關(guān)聯(lián)規(guī)則算法;
關(guān)聯(lián)規(guī)則挖掘推薦算法:
關(guān)聯(lián)規(guī)則挖掘是一種在大規(guī)模交易中識(shí)別類(lèi)似規(guī)則關(guān)系模式的通用技術(shù),可以應(yīng)用到推薦系統(tǒng)中。交易T是所有有效產(chǎn)品集合P={p 1 ,p 2 ,...,p n }的子集,表示被一起購(gòu)買(mǎi)的產(chǎn)品集合,關(guān)聯(lián)規(guī)則X=>Y表示只要交易T中包含了X里面的元素,那么認(rèn)為Y里面的元素也有可能被T包含。常見(jiàn)的規(guī)則挖掘算法是Apriori算法,關(guān)聯(lián)規(guī)則的衡量指標(biāo)是:支持度(support)和可信度(confidence)。將關(guān)聯(lián)規(guī)則應(yīng)用到推薦系統(tǒng)的主要問(wèn)題就是需要將評(píng)分轉(zhuǎn)換為交易,一般情況把所有的向前(正向)的評(píng)分集合<可以是做過(guò)去均值化操作后的評(píng)分矩陣>或者用戶的購(gòu)買(mǎi)行為可以看做一次交易。
Apriori算法概述:
Apriori算法是常用的用于挖掘出數(shù)據(jù)關(guān)聯(lián)規(guī)則的算法,它用來(lái)找出數(shù)據(jù)值中頻繁出現(xiàn)的數(shù)據(jù)集合,這些找出的集合有助于我們的業(yè)務(wù)決策,同時(shí)我們也可以認(rèn)為這些頻繁出現(xiàn)的數(shù)據(jù)集合中的數(shù)據(jù)項(xiàng)存在一定的關(guān)聯(lián)性,簡(jiǎn)而言之,可以認(rèn)為這些數(shù)據(jù)項(xiàng)之間存在某種“相似性”。比如在電商的網(wǎng)購(gòu)數(shù)據(jù)中,如果發(fā)現(xiàn)某一些商品經(jīng)常一起被購(gòu)買(mǎi),那么我們可以認(rèn)為這些商品之間存在某種“相似性”,從而我們可以優(yōu)化網(wǎng)站中這些商品的排列位置、優(yōu)化商品的倉(cāng)庫(kù)位置或者將這些“相似”的物品推薦給正在瀏覽對(duì)應(yīng)物品的客戶,從而可以達(dá)到增加經(jīng)濟(jì)效益、節(jié)約成本的目的。
交易集:包含所有數(shù)據(jù)的一個(gè)數(shù)據(jù)集合,數(shù)據(jù)集合中的每條數(shù)據(jù)都是一筆交易;項(xiàng):交易集中的每個(gè)商品被成為一個(gè)項(xiàng);模式/項(xiàng)集(ItemSet):項(xiàng)組合被成為模式/項(xiàng)集;支持度(Support):一個(gè)項(xiàng)集在在整個(gè)交易集中出現(xiàn)的次數(shù)/出現(xiàn)的頻度,比如:Support({A,C})=2表示A和C同時(shí)出現(xiàn)的次數(shù)是2次;最小支持度:交易次數(shù)達(dá)到最小支持度的情況下,該項(xiàng)集才會(huì)被計(jì)算;頻繁項(xiàng)集:如果項(xiàng)集的支持度大于等于最小支持度,那么該項(xiàng)集被成為頻繁項(xiàng)集;置信度(Confidence):關(guān)聯(lián)規(guī)則左件和右件同時(shí)出現(xiàn)的頻繁程度,該值越大,表示同時(shí)出現(xiàn)的幾率越大;關(guān)聯(lián)規(guī)則:LHS ? RHS(confidence) -----> 如果客戶購(gòu)買(mǎi)了左件(LHS),也可能購(gòu)買(mǎi)右件(RHS),購(gòu)買(mǎi)的置信度為confidence
Apriori算法原理:
Apriori算法本質(zhì)的作用是找出購(gòu)物數(shù)據(jù)集中的最頻繁的K項(xiàng)集;Apriori算法采用了迭代的方法,先搜索出候選1項(xiàng)集及對(duì)應(yīng)的支持度,剪枝去掉低于最小支持度的1項(xiàng)集,得到頻繁1項(xiàng)集。然后對(duì)剩下的頻繁1項(xiàng)集進(jìn)行連接,得到候選的頻繁2項(xiàng)集,篩選去掉低于最小支持度的候選頻繁2項(xiàng)集,得到頻繁2項(xiàng)集,以此類(lèi)推,迭代下去,直到無(wú)法找到頻繁k+1項(xiàng)集為止,對(duì)應(yīng)的頻繁k項(xiàng)集的集合即為算法的輸出結(jié)果。
輸入:數(shù)據(jù)集合D,支持度閾值α;輸出:最大的頻繁K項(xiàng)集
1. 掃描整個(gè)數(shù)據(jù)集,得到所有出現(xiàn)過(guò)的1項(xiàng)集,得到候選頻繁1項(xiàng)集。2. 令k = 1;3. 挖掘頻繁k項(xiàng)集;掃描數(shù)據(jù)計(jì)算候選頻繁k項(xiàng)集的支持度去除候選頻繁k項(xiàng)集中支持度低于閾值的數(shù)據(jù)集,得到頻繁k項(xiàng)集。如果得到的頻繁k項(xiàng)集為空,則直接返回頻繁k-1項(xiàng)集的集合作為算法結(jié)果,算法結(jié)束。如果得到的頻繁k項(xiàng)集只有一項(xiàng),則直接返回頻繁k項(xiàng)集的集合作為算法結(jié)果,算法結(jié)束。基于頻繁k項(xiàng)集和頻繁1項(xiàng)集,連接生成候選頻繁k+1項(xiàng)集。4. k=k+1,轉(zhuǎn)入步驟3。
Apriori算法總結(jié):
priori算法是一種非常經(jīng)典的頻繁項(xiàng)集的挖掘算法,很多算法都是基于Apriori算法的一種擴(kuò)展,比如:FP-Tree、GSP、CBA等等。理解掌握Apriori算法原理,對(duì)于對(duì)數(shù)據(jù)挖掘相關(guān)算法的學(xué)習(xí)具有非常好的作用。不過(guò),現(xiàn)在一般很少直接使用Aprior算法來(lái)進(jìn)行數(shù)據(jù)挖掘了,原因是:Apriori算法的數(shù)據(jù)挖掘效率比較低。
FP Tree算法概述:
Apriori算法作為挖掘頻繁項(xiàng)集的算法,需要多次掃描數(shù)據(jù),I/O瓶頸比較高,為了解決這個(gè)問(wèn)題,提出了FP-Tree算法,也稱(chēng)為FP Growth算法;在FP Tree算法中,不管存在多少數(shù)據(jù)量,只需要掃描兩次數(shù)據(jù)集,因此提高了算法的運(yùn)行效率。FP Tree算法改進(jìn)了Apriori算法的I/O瓶頸,類(lèi)似BIRCH聚類(lèi),利用樹(shù)結(jié)構(gòu)來(lái)提高算法的執(zhí)行效率,是一種利用空間換時(shí)間的一種算法效率提升方式。備注:FP Tree是我們?cè)谏a(chǎn)環(huán)境中常用的一種數(shù)據(jù)挖掘頻繁項(xiàng)集的算法。
FP Tree算法原理:
為了減少I(mǎi)/O次數(shù),FP Tree算法引入了一些數(shù)據(jù)結(jié)構(gòu)來(lái)臨時(shí)存儲(chǔ)數(shù)據(jù),主要包含
三個(gè)部分:
1. 項(xiàng)頭表:記錄所有的1項(xiàng)頻繁集以及出現(xiàn)的次數(shù),按照次數(shù)降序排列。2. FP Tree:將原始數(shù)據(jù)集映射到內(nèi)存中的一棵FP樹(shù)。3. 節(jié)點(diǎn)鏈表:基于項(xiàng)頭表保存的在FP Tree中對(duì)應(yīng)的項(xiàng)的存儲(chǔ)位置的一個(gè)鏈表。FP Tree算法可以分為一下兩個(gè)過(guò)程:1. 項(xiàng)頭表和FP Tree的構(gòu)建2. FP Tree的挖掘
FP-Tree算法原理之項(xiàng)頭表構(gòu)建:
掃描所有數(shù)據(jù),得到所有一項(xiàng)集的支持度,然后刪除支持度低于閾值的項(xiàng),得到頻繁一項(xiàng)集,將所有頻繁一項(xiàng)集按照支持度降序排列,放入項(xiàng)頭表中。
FP-Tree算法原理之FP Tree構(gòu)建:
FP Tree樹(shù)的構(gòu)建是FP-Tree算法的關(guān)鍵點(diǎn),主要分為兩個(gè)過(guò)程:
1. 掃描數(shù)據(jù),對(duì)于每條數(shù)據(jù)刪除非頻繁的1項(xiàng)集,并按照支持度降序排列,得到排序后的數(shù)據(jù)集。
2. 基于排序好的數(shù)據(jù)集構(gòu)建FP Tree。初始狀態(tài)FP樹(shù)是空的,建立FP樹(shù)時(shí)我們一條條的讀入排序后的數(shù)據(jù)集,插入FP樹(shù),插入時(shí)按照排序后的順序,插入FP樹(shù)中,排序靠前的節(jié)點(diǎn)是祖先節(jié)點(diǎn),而靠后的是子孫節(jié)點(diǎn)。如果有共用的祖先,則對(duì)應(yīng)的公用祖先節(jié)點(diǎn)計(jì)數(shù)加1。插入后,如果有新節(jié)點(diǎn)出現(xiàn),則項(xiàng)頭表對(duì)應(yīng)的節(jié)點(diǎn)會(huì)通過(guò)節(jié)點(diǎn)鏈表鏈接上新節(jié)點(diǎn)。直到所有的數(shù)據(jù)都插入到FP樹(shù)后,FP樹(shù)的建立完成。
FP-Tree算法原理之FP Tree挖掘:
當(dāng)構(gòu)建好FP樹(shù)、項(xiàng)頭表以及節(jié)點(diǎn)鏈表后,就可以開(kāi)始進(jìn)行頻繁項(xiàng)集的挖掘了。首先從項(xiàng)頭表的底部項(xiàng)依次向上挖掘,對(duì)于項(xiàng)頭表對(duì)應(yīng)于FP樹(shù)的每一項(xiàng),找出對(duì)應(yīng)的條件模式基,所謂條件模式基是以我們要挖掘的節(jié)點(diǎn)作為葉子節(jié)點(diǎn)所對(duì)應(yīng)的FP子樹(shù),得到這個(gè)FP子樹(shù),我們將子樹(shù)中每個(gè)節(jié)點(diǎn)的的計(jì)數(shù)設(shè)置為葉子節(jié)點(diǎn)的計(jì)數(shù),并刪除計(jì)數(shù)低于支持度的節(jié)點(diǎn)。從這個(gè)條件模式基,我們就可以遞歸挖掘得到頻繁項(xiàng)集了。
尋找F節(jié)點(diǎn)的條件模式基;我們很容易得到F的頻繁2項(xiàng)集為{A:2,F:2}、{C:2,F:2}、{E:2,F:2}、{B:2,F:2}。遞歸合并二項(xiàng)集,得到頻繁三項(xiàng)集為{A:2,C:2,F:2}、{A:2,E:2,F:2},...。當(dāng)然一直遞歸下去,最大的頻繁項(xiàng)集為頻繁5項(xiàng)集,為{A:2,C:2,E:2,B:2,F:2}
FP-Tree算法總結(jié)歸納:
FP-Tree算法流程主要包括一下幾步:掃描數(shù)據(jù),得到所有的頻繁1項(xiàng)集的計(jì)數(shù),然后刪除支持度低于閾值的項(xiàng),將1項(xiàng)頻繁集放入項(xiàng)頭表,并按照支持度降序排列。讀取數(shù)據(jù)集中的數(shù)據(jù),將數(shù)據(jù)中的非頻繁1項(xiàng)集刪除,并按照支持度排序排列后將數(shù)據(jù)插入到FP樹(shù)中,插入時(shí)按照排序后的順序插入,并計(jì)算當(dāng)前節(jié)點(diǎn)的后序子孫節(jié)點(diǎn)的數(shù)目。直到所有數(shù)據(jù)均插入到FP樹(shù)后,FP樹(shù)構(gòu)建完成。從項(xiàng)頭表的底部項(xiàng)依次向上找到項(xiàng)頭表項(xiàng)對(duì)應(yīng)的條件模式基。從條件模式基遞歸挖掘得到項(xiàng)頭表項(xiàng)項(xiàng)的頻繁項(xiàng)集。如果不限制頻繁項(xiàng)集的項(xiàng)數(shù),則返回上一步驟的所有的頻繁項(xiàng)集,否則只返回滿足項(xiàng)數(shù)要求的頻繁項(xiàng)集。
PrefixSpan算法概述:
PrefixSpan全稱(chēng)Prefix-Projected Pattern Growth(即前綴投影的模式挖掘),是用于挖掘頻繁序列的數(shù)據(jù)挖掘算法,和Apriori算法以及FP Tree算法的挖掘目標(biāo)稍有不同。PrefixSpan算法是生產(chǎn)中常用的一種頻繁序列模式挖掘算法。備注:序列中的項(xiàng)集是具有時(shí)間上的先后關(guān)系的。
子序列:如果某個(gè)序列A所有的項(xiàng)集在序列B中都可以找到,則A是B的子序列。
頻繁序列:出現(xiàn)頻次超過(guò)支持度的子序列就叫做頻繁序列。
前綴序列:即序列前面部分的子序列。
后綴序列:即序列中位于前綴序列之后的子序列就叫做后綴序列。
前綴投影:即投影數(shù)據(jù)庫(kù),即序列數(shù)據(jù)庫(kù)S中所有相對(duì)于前綴的后綴序列的集合
PrefixSpan算法原理:
類(lèi)似Apriori算法,先找出所有子序列中長(zhǎng)度為1的前綴開(kāi)始挖掘序列模型(并且刪除原始序列中非頻繁的長(zhǎng)度為1的序列),搜索對(duì)應(yīng)的投影數(shù)據(jù)庫(kù)得到長(zhǎng)度為1的前綴對(duì)應(yīng)的頻繁序列,然后遞歸的挖掘長(zhǎng)度為2的前綴所對(duì)應(yīng)的頻繁序列,。。。以此類(lèi)推,一直遞歸到不能挖掘到更長(zhǎng)的前綴挖掘?yàn)橹埂?/p>
PrefixSpan算法流程:
輸入:序列數(shù)據(jù)庫(kù)S和支持度閾值α 輸出:所有滿足支持度要求的頻繁序列集
步驟:(備注:所找到的前綴即頻繁序列)
1. 找出所有子序列中長(zhǎng)度為1的前綴以及對(duì)應(yīng)的投影數(shù)據(jù)庫(kù);2. 對(duì)于長(zhǎng)度為1的前綴進(jìn)行計(jì)數(shù),將支持度低于閾值α的前綴對(duì)應(yīng)的項(xiàng)從序列數(shù)據(jù)庫(kù);S中刪除,同時(shí)得到所有的頻繁1項(xiàng)序列。3. 對(duì)于每個(gè)長(zhǎng)度為i滿足支持度的前綴進(jìn)行遞歸挖掘:
a. 找出前綴對(duì)應(yīng)的投影數(shù)據(jù)庫(kù),如果投影數(shù)據(jù)庫(kù)為空,則遞歸返回;b. 統(tǒng)計(jì)對(duì)應(yīng)投影數(shù)據(jù)庫(kù)中各項(xiàng)的支持度計(jì)數(shù),如果所有項(xiàng)的支持度計(jì)數(shù)都低于閾值α,則遞歸返回。;c. 將滿足支持度計(jì)數(shù)的各個(gè)單項(xiàng)和當(dāng)前的前綴進(jìn)行合并,得到若干新的前綴。;d. 令i=i+1,前綴為合并單項(xiàng)后的各個(gè)前綴,分別遞歸執(zhí)行第三步。
協(xié)同過(guò)濾各種方式總結(jié):
廣義的協(xié)同過(guò)濾算法主要包括三種算法:基于用戶(UserCF)的協(xié)同過(guò)濾算法;基于物品(ItemCF)的協(xié)同過(guò)濾算法;基于模型(ModelCF)的協(xié)同過(guò)濾算法;
使用關(guān)聯(lián)規(guī)則的協(xié)同過(guò)濾;使用聚類(lèi)算法的協(xié)同過(guò)濾;使用分類(lèi)算法的協(xié)同過(guò)濾;使用回歸的協(xié)同過(guò)濾;使用矩陣分解/隱語(yǔ)義模型的協(xié)同過(guò)濾;使用神經(jīng)網(wǎng)絡(luò)的協(xié)同過(guò)濾;
總結(jié)
以上是生活随笔為你收集整理的关联规则算法c语言样例及分析_推荐系统总结系列-关联规则算法(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 英语语法---分词短语详解
- 下一篇: 英语语法---形容词性从句详解