【機器學習】 關聯規則Apriori和mlxtend——推薦算法

引入:

啤酒與尿布的故事
關聯規律挖掘:從交易數據中發現:買了X 還會買Y 的規則
關聯規律挖掘‘購物籃分析’Market Basket Analysis(MBA)
關聯規律->應用于推薦系統

在這里插入圖片描述

1. 關聯規則代碼演示

使用的是mlxtend.frequent_patterns.Apriori()

import numpy as np
import pandas as pdfrom mlxtend.frequent_patterns import apriori,association_rules
#TransactionEncoder 事務,編碼
#事務:表示事件
#(比如每次去商場購買東西是一次事務,而實際購買到的東西就是項集)
from mlxtend.preprocessing import TransactionEncoder 
te = TransactionEncoder()
X =te.fit_transform(data)
colmns = te.columns_
df = pd.DataFrame(X,columns=colmns)
df.astype(np.uint8)
尿布橙汁甜菜萵苣葡萄酒豆奶
0000101
1101110
2110011
3100111
4110101
data=[['豆奶','萵苣'],['萵苣','尿布','葡萄酒','甜菜'],['豆奶','尿布','葡萄酒','橙汁'],['萵苣','豆奶','尿布','葡萄酒'],['萵苣','豆奶','尿布','橙汁']]result =apriori(df,min_support=0.6,use_colnames=True)
result 
supportitemsets
00.8(尿布)
10.8(萵苣)
20.6(葡萄酒)
30.8(豆奶)
40.6(尿布, 萵苣)
50.6(尿布, 葡萄酒)
60.6(尿布, 豆奶)
70.6(萵苣, 豆奶)

關聯規則

條目 —》另一些條目之間有關聯的

根據關聯性強,進行推薦

推薦系統(小公司:分類,)

關聯規則的三個計算:
支持度 support
置信度 confidence
提升度 lift

公式計算如下:

在這里插入圖片描述

association_rules(result,min_threshold=0.5)
antecedentsconsequentsantecedent supportconsequent supportsupportconfidenceliftleverageconviction
0(尿布)(萵苣)0.80.80.60.750.9375-0.040.8
1(萵苣)(尿布)0.80.80.60.750.9375-0.040.8
2(尿布)(葡萄酒)0.80.60.60.751.25000.121.6
3(葡萄酒)(尿布)0.60.80.61.001.25000.12inf
4(尿布)(豆奶)0.80.80.60.750.9375-0.040.8
5(豆奶)(尿布)0.80.80.60.750.9375-0.040.8
6(萵苣)(豆奶)0.80.80.60.750.9375-0.040.8
7(豆奶)(萵苣)0.80.80.60.750.9375-0.040.8

探究關聯規則的原始代碼

import numpy as np 
def createC1(dataSet):C1 = []for transaction in dataSet:for item in transaction:if not [item] in C1:C1.append([item]) #store all the item unrepeatlyC1.sort()#return map(frozenset, C1)#frozen set, user can't change it.return list(map(frozenset, C1))def scanD(D,Ck,minSupport):
#參數:數據集、候選項集列表 Ck以及感興趣項集的最小支持度 minSupportssCnt={}for tid in D:#遍歷數據集for can in Ck:#遍歷候選項if can.issubset(tid):#判斷候選項中是否含數據集的各項#if not ssCnt.has_key(can): # python3 can not supportif not can in ssCnt:ssCnt[can]=1 #不含設為1else: ssCnt[can]+=1#有則計數加1numItems=float(len(D))#數據集大小retList = []#L1初始化supportData = {}#記錄候選項中各個數據的支持度for key in ssCnt:support = ssCnt[key]/numItems#計算支持度if support >= minSupport:retList.insert(0,key)#滿足條件加入L1中supportData[key] = supportreturn retList, supportDatadef aprioriGen(Lk, k): #組合,向上合并#creates Ck 參數:頻繁項集列表 Lk 與項集元素個數 kretList = []lenLk = len(Lk)for i in range(lenLk):for j in range(i+1, lenLk): #兩兩組合遍歷L1 = list(Lk[i])[:k-2]; L2 = list(Lk[j])[:k-2]L1.sort(); L2.sort()if L1==L2: #若兩個集合的前k-2個項相同時,則將兩個集合合并retList.append(Lk[i] | Lk[j]) #set unionreturn retListdef apriori(dataSet, minSupport = 0.5):C1 = createC1(dataSet)D = list(map(set, dataSet)) #python3L1, supportData = scanD(D, C1, minSupport)#單項最小支持度判斷 0.5,生成L1L = [L1]k = 2while (len(L[k-2]) > 0):#創建包含更大項集的更大列表,直到下一個大的項集為空Ck = aprioriGen(L[k-2], k)#CkLk, supK = scanD(D, Ck, minSupport)#get LksupportData.update(supK)L.append(Lk)k += 1return L, supportDatadef generateRules(L, supportData, minConf=0.7):#頻繁項集列表、包含那些頻繁項集支持數據的字典、最小可信度閾值bigRuleList = [] #存儲所有的關聯規則for i in range(1, len(L)):  #只獲取有兩個或者更多集合的項目,從1,即第二個元素開始,L[0]是單個元素的# 兩個及以上的才可能有關聯一說,單個元素的項集不存在關聯問題for freqSet in L[i]:H1 = [frozenset([item]) for item in freqSet]#該函數遍歷L中的每一個頻繁項集并對每個頻繁項集創建只包含單個元素集合的列表H1if (i > 1):#如果頻繁項集元素數目超過2,那么會考慮對它做進一步的合并rulesFromConseq(freqSet, H1, supportData, bigRuleList, minConf)else:#第一層時,后件數為1calcConf(freqSet, H1, supportData, bigRuleList, minConf)# 調用函數2return bigRuleListdef calcConf(freqSet, H, supportData, brl, minConf=0.7):#針對項集中只有兩個元素時,計算可信度prunedH = []#返回一個滿足最小可信度要求的規則列表for conseq in H:#后件,遍歷 H中的所有項集并計算它們的可信度值conf = supportData[freqSet]/supportData[freqSet-conseq] #可信度計算,結合支持度數據if conf >= minConf:print (freqSet-conseq,'-->',conseq,'conf:',conf)#如果某條規則滿足最小可信度值,那么將這些規則輸出到屏幕顯示brl.append((freqSet-conseq, conseq, conf))#添加到規則里,brl 是前面通過檢查的 bigRuleListprunedH.append(conseq)#同樣需要放入列表到后面檢查return prunedHdef rulesFromConseq(freqSet, H, supportData, brl, minConf=0.7):#參數:一個是頻繁項集,另一個是可以出現在規則右部的元素列表 Hm = len(H[0])if (len(freqSet) > (m + 1)): #頻繁項集元素數目大于單個集合的元素數Hmp1 = aprioriGen(H, m+1)#存在不同順序、元素相同的集合,合并具有相同部分的集合Hmp1 = calcConf(freqSet, Hmp1, supportData, brl, minConf)#計算可信度if (len(Hmp1) > 1):    #滿足最小可信度要求的規則列表多于1,則遞歸來判斷是否可以進一步組合這些規則rulesFromConseq(freqSet, Hmp1, supportData, brl, minConf) 
data=[['豆奶','萵苣'],['萵苣','尿布','葡萄酒','甜菜'],['豆奶','尿布','葡萄酒','橙汁'],['萵苣','豆奶','尿布','葡萄酒'],['萵苣','豆奶','尿布','橙汁']] 
L, supportData = apriori(data,minSupport = 0.5)
# 頻繁項集
display(L)
#計算
display(supportData)

[[frozenset({‘葡萄酒’}), frozenset({‘尿布’}), frozenset({‘豆奶’}), frozenset({‘萵苣’})],
[frozenset({‘尿布’, ‘豆奶’}),
frozenset({‘尿布’, ‘萵苣’}),
frozenset({‘尿布’, ‘葡萄酒’}),
frozenset({‘萵苣’, ‘豆奶’})],
[]]

{frozenset({‘萵苣’}): 0.8,
frozenset({‘豆奶’}): 0.8,
frozenset({‘尿布’}): 0.8,
frozenset({‘甜菜’}): 0.2,
frozenset({‘葡萄酒’}): 0.6,
frozenset({‘橙汁’}): 0.4,
frozenset({‘萵苣’, ‘豆奶’}): 0.6,
frozenset({‘尿布’, ‘葡萄酒’}): 0.6,
frozenset({‘萵苣’, ‘葡萄酒’}): 0.4,
frozenset({‘尿布’, ‘萵苣’}): 0.6,
frozenset({‘葡萄酒’, ‘豆奶’}): 0.4,
frozenset({‘尿布’, ‘豆奶’}): 0.6,
frozenset({‘尿布’, ‘萵苣’, ‘豆奶’}): 0.4}

 generateRules(L,supportData,minConf=0.8)

[(frozenset({‘葡萄酒’}), frozenset({‘尿布’}), 1.0)]

核心思想簡單來說就是 :
1、發現頻繁項集過程為
①掃描(掃描所有數據)
②計數(計算各個候選集的支持度)
③比較(選出適合條件的頻繁項集)
④產生頻繁集
⑤連接、再剪枝產生候選集

2、產生關聯規則。過程:根據前面提到的置信度的定義,關聯規則的產生如下:
①對于每個頻繁項集L,產生L的所有非空子集。
②對于L的每個非空子集S,如果P(L)/P(S)>=min_conf,則輸出規則“Sa L-S”。(L-S表示在項集中除去S子集的項集。)

Apriori缺點:
①由頻繁k-1項集進行自連接生成的候選頻繁k項集數量巨大
②在驗證候選頻繁k項集的時候需要對整個數據庫進行掃描,非常耗時。

更多推薦算法參考:
史上最全機器學習算法(源于逼乎)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456083.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

預防和檢測如日中天?事件響應表示不服

近些年,企業安全工作的關注點,一直聚焦在如何預防黑客攻擊。但是,頻發的大型跨國企業的數據泄露事件表明,即使是對網絡安全更為重視,同時也投入了更多成本的金融業,也明白了“無論做了怎樣的安全防護&#…

python中的內部函數和閉包函數

內部函數 在函數內部聲明的函數就是內部函數。 格式: def 函數名():局部變量...def 內部函數名():Python功能代碼...示例: def funName():name dragon#定義一個內部函數def inner():print(我是內部函數)‘’‘注釋: 1.內部函數的本質就是局…

【機器學習】K-Means(非監督學習)學習及實例使用其將圖片壓縮

非監督學習之k-means K-means通常被稱為勞埃德算法,這在數據聚類中是最經典的,也是相對容易理解的模型。算法執行的過程分為4個階段。 1、從數據中選擇k個對象作為初始聚類中心; 2、計算每個聚類對象到聚類中心的距離來劃分; 3、再次計算…

CloudCC CRM:物聯網必將成為CRM的推動力

CRM熱門話題背后的主要推動力包括云、社交、移動和大數據,CloudCC CRM認為物聯網必將成為CRM的推動力,也就是傳感器將事物連接到互聯網,創建之前我們從未想到的新型服務。 社交:在銷售、市場和客戶服務部門,營銷人員正…

關于Video Renderer和Overlay Mixer

原文作者: 陸其明 整理日期: 2004/12/27 大家知道,Video Renderer (VR)是接收RGB/YUV裸數據,然后在顯示器上顯示的Filter。為提高計算機畫圖性能,根據你計算機顯卡的能力,VR會優先使用DirectDraw以及Overlay表面;如果…

【tensorflow】tensorflow -gpu安裝及jupyter環境更改

tensorflow -gpu安裝 首先,安裝Anoconda 1. 官網下載點我:2.安裝 點擊 python 3.6 version自動下載x64版,下載好之后,然后安裝。 如圖,打上勾之后,一路next3.打開終端 1)輸入conda –-version …

張震博士:SDT是未來安防發展方向

如何挖掘安防大數據價值是未來發展方向 發展實踐證明,科技強警已經成為未來發展的必然選擇,發展科技強警,必須用技術實力說話。作為科技強警的重要組成部分,安防視頻非常重要,但是,目前,安防視頻…

關于虛擬機第二塊網卡eth1(僅主機模式)的配置問題

這里發生了一個想不明白的事情,我的真機的網卡上面并沒有192.168.100.0網段的網卡 但是我在虛擬機上面添加了一塊網卡(僅主機模式)eth1 并配置為192.168.100.60(配置文件已經寫好) 開機卻能用eth1連接上xhell&#xff…

【機器學習】樸素貝葉斯介紹及實例--對短信進行二分類 使用多項式分布

貝葉斯 首先什么是貝葉斯? 一個例子,現分別有 A、B 兩個容器,在容器 A 里分別有 7 個紅球和 3 個白球,在容器 B 里有 1 個紅球和 9 個白球,現已知從這兩個容器里任意抽出了一個球,且是紅球,問這…

H.264碼流結構

a、對照:H.263的碼流結構H.263定義的碼流結構是分級結構,共四層。自上而下分別為:圖像層(picture layer)、塊組層(GOB layer)、宏塊層(macroblock layer)和塊層(block layer)。 PSC TR PTYPE PQUANT CPM PSBI TRB DBQUANT PEI PSPARE PEI…

Gartner分享物聯網和智慧城市最新數據

主題為“移我所想 Mobile is me”的2016世界移動大會上海展正在上海如火如荼的舉行,Gartner也在第一時間分享了最新的市場數據,包括企業級用戶最為關注的物聯網和智慧城市的調查預測報告,下面就一起來看看吧! 智慧城市與物聯網 物…

python中格式化字符串

format格式字符串 語法: 它通過{}和:來代替%。 注意: 字符串的format函數可以接受無限個參數,位置可以不按順序,可以不用或者用多次,不過2.6不能為空{},2.7才可以。 “映射”示例 通過位置 In [1]: {0},{…

讓360安全瀏覽器默認使用谷歌內核

瀏覽器默認內核的指定只需在head標簽中添加一行代碼即可&#xff1a; 若頁面需默認用極速核&#xff0c;增加標簽&#xff1a;<meta name"renderer" content"webkit"> 若頁面需默認用ie兼容內核&#xff0c;增加標簽&#xff1a;<meta name"…

作業幫電腦版在線使用_作業幫:創新科技驅動在線教育新模式

10月15日&#xff0c;在線教育領軍企業作業幫在中國校長大會在線教育論壇上&#xff0c;獨家發布《學習的真相&#xff1a;全國K12學情大數據及學習洞察》&#xff0c;宣布已推出作業幫直播課“名師大招”課程體系&#xff0c;集中展示多款面向K12人群的教育黑科技和硬件產品。…

【機器學習】DBSCAN聚類算法—優于Kmean—(理論+圖解+python代碼)

一、前言 二、DBSCAN聚類算法 三、參數選擇 四、DBSCAN算法迭代可視化展示 五、常用的評估方法&#xff1a;輪廓系數 六、用Python實現DBSCAN聚類算法 一、前言 去年學聚類算法的R語言的時候&#xff0c;有層次聚類、系統聚類、K-means聚類、K中心聚類&#xff0c;最后呢…

H264白皮書

理論上我是知道一點點的mpeg4的&#xff0c;但是貌似忘記了&#xff0c;本來要重新看mpeg4&#xff0c;結果有人告訴我h264肯定比mpeg4要好&#xff0c;結果就被派去看h264了&#xff0c;看完了一個什么白皮書以后&#xff0c;只好替h264吹噓一下了&#xff1a; 1。Intra pred…

python中的內建函數

內建函數 以下是目前我們已經滲透過的內建函數: 類型相關 int() 創建或者將其他數據轉化為整型float() 創建或者將其他數據轉化為浮點型bool() 創建或者將其他數據轉化為布爾型complex() 創建或者將其他數據轉化為復數str() 創建或者將其他數據轉化為字符串list() 創建或…

卡巴斯基:風險無國界 網絡安全從業者要與小網民保持一致

“互聯網沒有國界&#xff0c;每個國家碰到的問題基本上是類似的。對于網絡犯罪這件事&#xff0c;并不針對哪個國家&#xff0c;任何有弱點、有機會的地方&#xff0c;黑客都會去。”卡巴斯基公司CEO尤金卡巴斯基在接受未來網&#xff08;微信公眾號lovek618&#xff09;記者采…

js/jquery循環提取table單元格值

<table id"tbitem"><tr><td>測試數據1</td></tr><tr><td>測試數據2</td></tr><tr><td>測試數據3</td></tr><tr><td>測試數據4</td></tr><tr><td&g…

windows無法訪問指定設備路徑或文件_完全免費的文件數據恢復工具:Microsoft Windows File Recovery...

意外刪除文件的經歷是大多數人都遇到過&#xff0c;但是幸運的是有一種“后悔藥”可以吃&#xff0c;因為我們可以使用一些【數據恢復軟件】以找回一些已刪除的文件。市面上有很多這類型的軟件&#xff0c;例如EasyRecovery、DiskGenius、Recuva 等軟件。但是&#xff0c;功能強…