使用apriori演算法進行關聯分析
關聯分析:從大規模資料集中尋找物品之間的隱含關係。目標包括兩項:發現頻繁項集和發現關聯規則
主要問題在於,尋找物品的不同組合是一項十分耗時的任務,所需的計算代價很高,蠻力搜尋方法並不能解決這個問題。
一、關聯分析
{尿布與啤酒}
Apriori演算法
優點:易編碼實現
缺點:在大資料上可能較慢
適用資料型別:數值型或者標稱型資料
頻繁項集(frequent item sets)是指那些經常出現在一起的物品集合
一個項集的支援度被定義為資料集中包含該項集的記錄所佔的比例。
可信度或置信度是針對一條諸如{尿布}->{葡萄酒}的關聯規則來定義的
支援度和可信度是用來量化關聯分析是否成功的方法。假設想找到支援度大於0.8的所有項集,應該如何去做?一個方法是生成一個物品所有可能組合的清單,計算量大
Apriori演算法
二、Apriori原理
我們對那些經常在一起被購買的商品非常感興趣
一般過程:
收集資料:使用任意方法
準備資料:任何資料型別都可以,因為我們只儲存集合
分析資料:使用任意方法
訓練演算法:使用Apriori演算法來找到頻繁項集
測試演算法:不需要測試過程
使用演算法:用於發現頻繁項集以及物品之間的關聯規則
Apriori原理是說如果某個項集是頻繁的,那麼它的所有子集也是頻繁的。這個原理直觀上並沒有什麼幫助,但是如果反過來看就有用了,也就是說如果一個項集是非頻繁集,那麼它的所有超集也是非頻繁的
Apriori演算法是發現頻繁項集的一種方法。Apriori演算法的兩個輸入引數分別是最小支援度和資料集
import numpy as np
def loadDataSet():
return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]
def createC1(dataSet):
C1 = []
for transaction in dataSet:
for item in transaction:
if not [item] in C1:
C1.append([item])
C1.sort()
return map(frozenset, C1)
def scanD(D, Ck, minSupport):
ssCnt = {}
for tid in D:
for can in Ck:
if can.issubset(tid):
if not ssCnt.has_key(can): ssCnt[can]=1
else: ssCnt[can] += 1
numItems = float(len(D))
retList = [] #
supportData = {}
for key in ssCnt:
support = ssCnt[key]/numItems
if support >= minSupport:
retList.insert(0, key)
supportData[key] = support #
return retList, supportData
dataSet=loadDataSet()
print(dataSet)
C1=createC1(dataSet)
print(C1)
D=map(set,dataSet)
print(D)
L1,suppoData0=scanD(D,C1,0.5)
print(L1)
def aprioriGen(Lk, k):
retList = []
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: #if first k-2 elements are equal
retList.append(Lk[i] | Lk[j])
return retList
def apriori(dataSet, minSupport=0.5):
C1 = createC1(dataSet)
D = map(set, dataSet)
L1, supportData = scanD(D, C1, minSupport)
L = [L1]
k = 2
while (len(L[k-2]) > 0):
Ck = aprioriGen(L[k-2], k)
Lk, supK = scanD(D, Ck, minSupport) #scan DB to get Lk
supportData.update(supK)
L.append(Lk)
k += 1
return L, supportData
四、從頻繁項集中挖掘關聯規則
上一節介紹如何使用Apriori演算法來發現頻繁項集,現在需要解決的問題是如何找出關聯規則
要找到關聯規則,我們首先從一個頻繁項集開始。如果有一個頻繁項集{豆奶,萵筍},那麼就可能有一條關聯規則“豆奶->萵筍”。
那一條規則P->H的可信度定義為support(P | H) / support(P)。
def generateRules(L, supportData, minConf=0.7):
bigRuleList = []
for i in range(1, len(L)):
for freqSet in L[i]:
H1 = [frozenset([item]) for item in freqSet]
if (i > 1):
rulesFromConseq(freqSet, H1, supportData, bigRuleList, minConf)
else:
calcConf(freqSet, H1, supportData, bigRuleList, minConf)
return bigRuleList
def calcConf(freqSet, H, supportData, br1, minConf=0.7):
prunedH = []
for conseq in H:
conf = supportData[freqSet]/supportData[freqSet-conseq]
if conf >= minConf:
print freqSet-conseq, '-->', conseq, 'conf:', conf
br1.append(conseq)
return prunedH
def rulesFromConseq(freqSet, H, supportData, br1, minConf=0.7):
m = len(H[0])
if (len(freqSet) > (m+1)):
Hmp1 = aprioriGen(H, m+1)
Hmp1 = calcConf(freqSet, Hmp1, supportData, br1, minConf)
if (len(Hmp1) > 1):
rulesFromConseq(freqSet, Hmp1, supportData, br1, minConf)
五、示例:發現國會投票中的模式
資料集:加州大學埃文分校的機器學習資料集合中有一個自1984年起的國會投票記錄的資料集:http://archive.ics.uci.edu/ml/datasets/Congressional+Voting+Records
想嘗試一些更新的資料,目前有不少組織致力於將政府資料公開化,其中的一個組織是智慧投票工程(Project Vote Smart, http://www.votesmart.org),它提供了一個公共的API,
相關文章
- 關聯分析(二)--Apriori演算法演算法
- Apriori 演算法-如何進行關聯規則挖掘演算法
- 關聯分析Apriori演算法和FP-growth演算法初探演算法
- 關聯規則分析 Apriori 演算法 簡介與入門演算法
- 關聯規則方法之apriori演算法演算法
- 關聯規則挖掘(二)-- Apriori 演算法演算法
- 關聯規則挖掘之apriori演算法演算法
- 第十四篇:Apriori 關聯分析演算法原理分析與程式碼實現演算法
- 機器學習系列文章:Apriori關聯規則分析演算法原理分析與程式碼實現機器學習演算法
- 關聯規則挖掘:Apriori演算法的深度探討演算法
- 關聯規則apriori演算法的python實現演算法Python
- Apriori演算法演算法
- Apriori演算法原理總結演算法
- Apriori演算法 java程式碼演算法Java
- Apriori演算法的介紹演算法
- 關聯分析(一)--FP-Growth演算法演算法
- 使用pprof進行效能分析
- 使用MDX實現多維關聯分析
- 使用shell進行日誌分析
- 使用HangFG進行Oracle Hang分析Oracle
- 使用pandas進行資料分析
- 如何用序列分類方式進行法律要素與當事人關聯性分析
- 菜市場價格分析 python pandas Apriori演算法 資料預處理Python演算法
- 使用ttTraceMon進行TimesTen故障分析
- ORACLE 使用TRACE進行SQL效能分析OracleSQL
- 模式識別中的Apriori演算法和FPGrowth演算法模式演算法
- 使用rabbitmq對文字使用tf_idf演算法進行分析的專案記錄MQ演算法
- 基於Apriori關聯規則的電影推薦系統(附python程式碼)Python
- 使用AI進行需求分析的案例研究AI
- 用python對英雄聯盟選用英雄進行分析Python
- 什麼是關聯分析?
- UserService 新增使用者關聯索引 addUserPermission 分析索引
- 使用 XDebug + Webgrind 進行 PHP 程式效能分析WebPHP
- 影像分析,使用Halcon進行缺陷檢測
- 使用流量分析系統進行資產梳理
- 使用DBMS_PROFILER進行PL/SQL效能分析SQL
- 使用Java和Elastic Stack進行日誌分析JavaAST
- 【Python資料探勘課程】八.關聯規則挖掘及Apriori實現購物推薦Python