日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现关联算法_python使用Apriori算法进行关联性解析

發布時間:2024/7/23 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现关联算法_python使用Apriori算法进行关联性解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從大規模數據集中尋找物品間的隱含關系被稱作關聯分析或關聯規則學習。過程分為兩步:1.提取頻繁項集。2.從頻繁項集中抽取出關聯規則。

頻繁項集是指經常出現在一塊的物品的集合。

關聯規則是暗示兩種物品之間可能存在很強的關系。

一個項集的支持度被定義為數據集中包含該項集的記錄所占的比例,用來表示項集的頻繁程度。支持度定義在項集上。

可信度或置信度是針對一條諸如{尿布}->{葡萄酒}的關聯規則來定義的。這條規則的可信度被定義為“支持度({尿布,葡萄酒})/支持度({尿布})”。

尋找頻繁項集

Apriori原理:如果某個項集是頻繁的,那么它的所有子集也是頻繁的。反過來,如果一個項集是非頻繁項集,那么它的所有超集也是非頻繁的。

Apriori算法是發現頻繁項集的方法。該算法首先生成所有單個物品的項集列表,接著掃描交易記錄來查看哪些項集滿足最小支持度要求,那些不滿足最小支持度的項集會被去除掉。然后對剩下來的集合進行組合以生成包含兩個元素的項集。接下來重新掃描交易記錄,去掉不滿足最小支持度的項集,該過程重復進行直到所有項集都被去掉。

Apriori偽代碼

當列表中項的個數大于0時:

檢查數據以確認每個項集都是頻繁的

保留頻繁項集并構建k+1項組成的候選項集的列表

從頻繁項集中挖掘關聯規則

當可信度大于最小可信度時,可以認為是含有關聯規則的。可以觀察到,如果某條規則不滿足最小可信度要求,那么該規則的所有子集也不會滿足最小可信度要求。

可以首先從一個頻繁項集開始,接著創建一個規則列表,其中規則右部只包含一個元素,然后對這些規則進行測試,接下來合并,通過合并所有剩余規則右部來創建新的規則列表,其中規則右部包含兩個元素,以此類推。

每個頻繁項集:

while(len(L)>1)

(k規則列表)

滿足最小置信度

創建k+1規則

整體代碼:

import numpy as np

def loadDataSet():

return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]

def createC1(dateSet):

c1 = []

for line in dateSet:

for item in line:

if not [item] in c1:

c1.append([item])

c1.sort()

return list(map(frozenset,c1))

def scanData(data,ck,minSupport):#尋找滿足最小支持度的項集

ssCnt = {}

for tid in data:

for can in ck:

if can.issubset(tid):

if can not in ssCnt.keys():

ssCnt[can] = 0

ssCnt[can] += 1

numItems = len(data)

retList = []

supportData = {}

for key in ssCnt.keys():

support = ssCnt[key]/numItems

if support >= minSupport:

retList.append(key)

supportData[key] = support

return retList,supportData

def aprioriGen(Lk,k): #根據k-1項集生成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:

retList.append(Lk[i] | Lk[j])

return retList

def apriori(dataSet,minSupport = 0.5):#生成頻繁項集

c1 = createC1(dataSet)

D = list(map(set,dataSet))

l1,supportData = scanData(D,c1,minSupport)

L = [l1]

k = 2

while(len(L[k-2])>0):

ck = aprioriGen(L[k-2],k)

lk,supk = scanData(D,ck,minSupport)

k = k + 1

L.append(lk)

supportData.update(supk)

return L,supportData

def generaterRules(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,suppurtData,brl,minConf = 0.7):#計算滿足置信度的規則

prunedH = []

for conseq in H:

conf = suppurtData[freqSet]/suppurtData[freqSet-conseq]

if conf > minConf:

brl.append((freqSet-conseq,conseq,conf))

prunedH.append(conseq)

return prunedH

def rulesFromConseq(freqSet,H,supportData,brl,minConf=0.7):#遞歸生成規則

m = len(H[0])

if len(freqSet)>=(m+1):

Hmp1 = calcConf(freqSet,H,supportData,brl,minConf)

if (len(Hmp1) > 1):

Hmp1 = aprioriGen(Hmp1,m+1)

rulesFromConseq(freqSet,Hmp1,supportData,brl,minConf)

data = [line.split() for line in open('mushroom.dat').readlines()]

L,support = apriori(data,minSupport=0.3)

for i in range(len(L)):

for item in L[i]:

if item & {'2'}:

print(item)

代碼及數據集下載:Apriori

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的python实现关联算法_python使用Apriori算法进行关联性解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。