English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
대규모 데이터 집합에서 상품 간의 숨겨진 관계를 찾는 것을 관계 분석이나 관계 규칙 학습이라고 합니다. 이 과정은 두 단계로 나뉩니다: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 = [] for i in range(lenLk): for j in range(i ,lenLk):+1= list(Lk[i])[:k 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) prunedH.append(conseq) return prunedH7def rulesFromConseq(freqSet,H,supportData,brl,minConf=0. ):# 규칙 재생성 m = len(H[0])+1) > ):1 if len(freqSet)>=(m = calcConf(freqSet,H,supportData,brl,minConf)1if (len(Hmp 1) > ):1 Hmp1= aprioriGen(Hmp+1) ,m1,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
이것이 이 문서의 전체 내용입니다. 많은 도움이 되었기를 바랍니다. 또한, 나리아 튜토리얼에 많은 지지를 부탁드립니다.
고지사항: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 자체적으로 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공적으로 편집한 것도 아니며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용을 발견하시면, notice#w로 이메일을 보내 주세요.3codebox.com에 이메일을 보내시면, #을 @으로 변경하여 신고하시고 관련 증거를 제공해 주세요. 실제로 확인되면, 이 사이트는 즉시 저작권 침해 내용을 삭제할 것입니다.