English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Die Suche nach impliziten Beziehungen zwischen Waren in großen Datenmengen wird als Verknüpfungsanalyse oder Lernen von Verknüpfungsregeln bezeichnet. Der Prozess gliedert sich in zwei Schritte:1. Häufige Item-Sets werden extrahiert.2. Aus häufigen Item-Sets werden Verknüpfungsregeln extrahiert.
Häufige Item-Sets sind Sammlungen von Waren, die oft gemeinsam vorkommen.
Verknüpfungsregeln sind Hinweise darauf, dass zwischen zwei Waren möglicherweise eine starke Beziehung besteht.
Der Unterstützunggrad eines Item-Sets wird definiert als der Prozentsatz der Datenzeilen im Datensatz, die dieses Item-Set enthalten, und wird verwendet, um die Häufigkeit des Item-Sets zu beschreiben. Der Unterstützunggrad ist auf das Item-Set angewendet.
Glaubwürdigkeit oder Vertrauen ist für eine Regel wie {Windel}-Die Regel über die Korrelation von {Windel} und {Wein} wird definiert durch die Regeln der Apriori-Algorithmus. Der Glaubwürdigkeitsgrad dieser Regel wird definiert als "Unterstützungsgrad ({Windel, Wein})"/Unterstützungsgrad ({Windel})
Die Suche nach häufigen Item-Sets
Apriori-Prinzip: Wenn ein Item-Set häufig ist, dann sind alle seine Teilmengen ebenfalls häufig. Umgekehrt, wenn ein Item-Set ein nicht häufiges Item-Set ist, dann sind alle seine Übermengen ebenfalls nicht häufig.
Die Apriori-Algorithmen sind Methoden zur Entdeckung häufiger Item-Sets. Der Algorithmus generiert zunächst eine Liste aller möglichen Item-Sets mit Einzelposten und scannt die Transaktionsdaten, um zu überprüfen, welche Item-Sets die Mindestunterstützungsanforderungen erfüllen. Diejenigen, die die Mindestunterstützungsanforderungen nicht erfüllen, werden entfernt. Anschließend werden die verbleibenden Sets kombiniert, um Item-Sets mit zwei Elementen zu erzeugen. Danach wird das Transaktionsdaten erneut gescannt, um Item-Sets zu entfernen, die die Mindestunterstützungsanforderungen nicht erfüllen, und dieser Prozess wird wiederholt, bis alle Item-Sets entfernt sind.
Apriori-Pseudocode
wenn die Anzahl der Elemente in der Liste größer als 0 ist:
Überprüfung der Daten, um zu bestätigen, dass jede Anteilsmenge häufig ist
Beibehaltung der häufigen Anteilsmengen und Erstellung von k+1Liste der Kandidaten-Anteilsmengen, die aus den Elementen bestehen
Aus dem häufigen Anteilmenge die Assoziationsregeln extrahieren
Wenn die Glaubwürdigkeit größer als die Mindestglaubwürdigkeit ist, kann angenommen werden, dass es eine Beziehung zwischen den Regeln gibt. Es kann beobachtet werden, dass wenn eine Regel die Mindestglaubwürdigkeitsanforderung nicht erfüllt, dann erfüllen auch alle Untermengen der Regel die Mindestglaubwürdigkeitsanforderung nicht.
Man kann zunächst mit einer häufigen Anteilmenge beginnen, eine Regel列表 erstellen, in der die Rechte Seite der Regel nur ein Element enthält, und diese Regeln testen, dann kombinieren, indem man alle verbleibenden Rechte Seiten der Regeln kombiniert, um eine neue Regel列表 zu erstellen, in der die Rechte Seite der Regel zwei Elemente enthält, und so weiter.
jeder häufige Anteilmenge:
while(len(L)>1)
(k-Regel列表)
erfüllende MindestKonsistenz
Erstellung von k+1Regeln
Gesamter Code:
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):# nach Anteilen suchen, die die Mindestunterstützung erfüllen 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): # basierend auf k-1Erzeugung der K-Anteilmenge 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. ):#Rekursive Generierung von Regeln 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)
Download von Code und Datensätzen:Apriori
Das ist der gesamte Inhalt dieses Artikels. Wir hoffen, dass er Ihnen bei Ihrem Lernen hilft und dass Sie die呐喊教程 mehr unterstützen.
Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrecht des jeweiligen Autors. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine rechtlichen Verantwortlichkeiten. Wenn Sie verdächtige Urheberrechtsinhalte finden, sind Sie herzlich eingeladen, eine E-Mail an notice#w zu senden.3codebox.com (Bitte ersetzen Sie # durch @ beim Senden von E-Mails zur Meldung von Verstößen und stellen Sie relevante Beweise zur Verfügung. Bei nachgewiesener Rechtsverletzung wird diese Website die beanstandeten Inhalte sofort löschen.)