相關性是兩個或多個變量之間的壹種重要的、可發現的規律性。關聯分析的目的是發現給定數據記錄集中數據項之間的隱藏關聯,並描述數據之間的緊密程度。
幾個基本概念
1.項目集
這是壹個集合的概念。壹籃子商品中的壹個消費品就是壹個物品,幾個物品的集合就是壹個物品集,比如{啤酒,尿布}形成壹個二元物品集。
2.關聯規則
壹般用的形式寫,其中x是前提,y是對應的相關結果,用來表示數據內部隱含的相關性。比如買紙尿褲的消費者經常買啤酒。
相關性的強度由三個概念控制和評估——支持、信任和促進。
例如,65,438+00,000名消費者購買了商品,其中包括65,438+0000片紙尿褲、2,000瓶啤酒、500個面包、800片紙尿褲和面包、65,438+000片紙尿褲和面包。
3.支持(支持)
支持度是指{X,Y}出現在所有項集中的可能性,即壹個項集同時包含X和Y的概率:
作為建立強關聯規則的第壹個閾值,該指標度量了所研究的關聯規則的數量。通過設置最小閾值(minsup),剔除出現率低的無意義規則,保留頻繁項集隱含的規則。
設置最小閾值為5%,因為{尿布,啤酒}的支持度為800/10000=8%,滿足基本損失要求,成為頻繁項集,保留規則;但是{紙尿褲和面包}的支持度是100/10000=1%,被拒絕。
4.信心
置信度表示在先決條件X出現的情況下,相關結果Y出現的概率:
這是生成強關聯規則的第二個閾值,它衡量所研究的關聯規則的“質量”可靠性。同樣,我們需要為置信度設置壹個最小閾值(mincon ),以實現進壹步的篩選。
具體來說,當置信度的最小閾值設置為70%時,置信度為800/1000=80%,而置信度為800/2000=40%,則被拒絕。
5.電梯
提升程度表示在包含X的條件下同時包含Y的可能性與在不包含X的項集中包含Y的可能性的比率:
這個指標和置信度壹樣,衡量規則的可靠性,可以看作是置信度的補充指標。
r中的Apriori算法
算法步驟:
1.選擇所有滿足最小支持度閾值的項集,即頻繁項集;
2.從頻繁項集中找出滿足最小置信度的所有規則。
& gt庫(arules) #加載arules包
& gt點擊_詳情=閱讀。transactions ("click _ detail.txt ",format = "basket ",sep = ",",cols = c (1)) # Read txt文檔(文檔代碼為ANSI)。
& gt規則& lt-apriori (click _ detail,parameter = list (supp = 0.01,conf = 0.5,target = "rules")) #調用apriori算法。
& gt規則
419規則集
& gtinspect(rules[1:10])#查看十大規則。
解釋
1)庫(arules):加載包arules。當然,如果妳之前沒有下載過這個包,妳必須先安裝. packages(arules)。
2)點擊_詳細=閱讀。transactions ("click _ detail.txt ",format = "basket ",sep = ",",cols = c (1)):讀取數據。
read.transactions(file,format =c("basket "," single "),sep = NULL,
cols = NULL,rm.duplicates =FALSE,encoding = "unknown ")
文件:文件名,對應click_detail中的“click_detail.txt”。
格式:有兩種文件格式,分別是“筐”和“單”。click_detail.txt使用購物籃。
籃子:籃子就是壹個籃子,客戶買的所有東西都放在同壹個籃子裏,所有客戶的交易都是籃子組合的結果。在下面的表單中,每個事務都是獨立的。
文件形式:
項目1,項目2
項目1
項目2,項目3
讀後感:
項目
1 {item1,
項目2}
2 {item1}
3 {item2,
第3項}
單:單的意思,顧名思義,就是單獨的交易。簡而言之,交易記錄是:客戶1買了產品1,客戶1買了產品2,客戶2買了產品3...(產品1,產品2,產品3可以是單個產品,也可以是多個產品)。
trans1 item1
trans2 item1
運輸2項目2
讀後感:
項目交易ID
1 { item 1 } trans 1
2 {item1,
項目2}交易2
Sep:文件中的數據是如何分隔的?默認值為空格,click_detail由逗號分隔。
Cols:對於basket,col=1,表示第壹列是數據的事務ID;如果col=NULL,則表示數據中沒有事務ID列;對於single,col=c(1,2)表示第壹列是事務id,第二列是項目id。
Rm.duplicates:是否刪除重復項,默認為FALSE。
編碼:我寫到這裏研究編碼的含義,發現txt可能不是ANSI類型。如果TXT是UTF-8,寫編碼= UTF-8,就OK了。
3)規則& lt-apriori (click _ detail,parameter = list (supp = 0.01,conf = 0.5,target = "rules")): apriori函數。
apriori(數據,參數=空,外觀=空,控制=空)
數據:數據
參數:設置參數。默認情況下,parameter = list (supp = 0.1,conf = 0.8,Maxlen = 10,Minlen = 1,target = "rules ")。
補充:支持程度
Conf:信心
Maxlen,minlen:每個項集中包含的最大和最小項數。
目標:“規則”或“頻繁項集”(輸出關聯規則/頻繁項集)
外觀:限制先決條件X(lhs)和關聯結果Y(rhs)中包含哪些項目。例如,如果設置了lhs=beer,則只輸出與lhs中的beer關聯的規則。默認情況下,所有項目都將無限期顯示。
Control:控制函數的性能,例如,如果項目集可以按升序排序=1或降序排序=-1,是否向用戶報告進度(verbose=F/T)
補充
通過支持控制:規則。sorted _ sup = sort (rules,by = "support ")
通過信心控制:規則。sorted _ con = sort (rules,by = "confidence ")
通過升降控制:規則。sorted _ lift = sort (rules,by = "lift ")
Apriori算法
兩步法:
1.頻繁項集的生成:找出所有滿足最小支持度閾值的項集,稱為頻繁項集;
2.規則生成:對於每個頻繁項集L,找出所有非空子集;然後,對於每個這樣的子集A,如果支持度(l)與支持度(A)之比大於最小可靠度,則存在規則A = = >;(左半部分).
頻繁項集生成所需的計算開銷遠遠大於規則生成所需的計算開銷。
頻繁項目集的生成
幾個概念:
1,壹個包含k個項目的數據集,可能產生2 k個候選集。
2.超越原理:如果壹個項集是頻繁的,那麽它的所有子集都是頻繁的(很容易理解頻繁項集的含義);相反,如果壹個項目集是非頻繁的,它的所有子集也必須是非頻繁的。
3基於支持度度量的壹個關鍵性質:壹個項集的支持度不會超過其子集的支持度(很好理解,支持度是* * *重合的概率,假設項集{A,B,C}和{A,B}是自己的,A,B,C重合的概率肯定不會超過A,B重合的概率。
在Apriori中使用上述規則,如下圖所示。當尋找頻繁項集時,從上到下掃描。當壹個項集是非頻繁項集時(這個項集的支持度小於Minsup),那麽它下面的項集壹定是非頻繁項集,這部分會被剪枝。
壹個例子(在百度的壹個PPT上):
當我理解了頻繁項集的含義後,我簡單地在R上重現了這個例子,這裏采用了eclat算法,應該類似於apriori:
代碼:
item & lt-列表(
c(“面包”、“牛奶”),
c(“面包”、“尿布”、“啤酒”、“雞蛋”),
c(“牛奶”、“尿布”、“啤酒”、“可樂”),
c(“面包”、“牛奶”、“尿布”、“啤酒”),
c(“面包”、“牛奶”、“尿布”、“可樂”)
)
名稱(項目)& lt- paste("tr ",c(1:5),sep = " ")
項目
trans & lt-as(item," transactions") #將列表轉換為事務。
rules = eclat(trans,parameter = list(supp = 0.6,
target = "頻繁項集"),control = list(sort=1))
Inspect(rules) #查看頻繁項目集
運行後的結果:
& gt檢查(規則)
項目支持
1 {啤酒,
尿布} 0.6
2 {尿布,
牛奶} 0.6
3 {面包,
尿布} 0.6
4 {面包,
牛奶} 0.6
5啤酒0.6
6 {牛奶} 0.8
7 {面包} 0.8
8 {尿布} 0.8
這個例子的頻繁項集就這麽多了,然後我發現項集{面包,牛奶,尿布}不見了。當我回頭看例子時,這個項目集實際上只出現了兩次,所以沒有這樣的項目集。
規則的生成
每個頻繁K項集最多可以生成2k-2條關聯規則。
將項集Y分成兩個非空子集X和Y-X,使得x->: Y-X滿足置信度閾值。
定理:如果規則X->;Y-X不滿足置信閾值,那麽X '-->;Y-X '的規則必須不滿足置信度閾值,其中X '是X的子集。
Apriori按照下圖逐層計算。當發現壹個不滿足置信度的項集時,可以修剪該項集的所有子集的規則。