Data Mining SoSe 2015 Dennis Baurichter 22. Juli 2015 Inhaltsverzeichnis 1 Einleitung 3 2 Ähnlichkeit und Ähnlichkeitssuche 2.1 Distanzmaß . . . . . . . . . . . . . 2.2 Jaccard-Ähnlichkeit . . . . . . . . 2.3 Dokumente als Mengen: k-shingles 2.4 Minhash-Signaturen . . . . . . . . 2.4.1 Verwendung / Satz . . . . . 2.5 Lokalitätserhaltendes Hashing . . . 2.5.1 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 3 3 4 4 4 3 Häufigkeitsanalyse: Itemset Mining 3.1 Warenkorb-Modell . . . . . . . . . . . . . . 3.2 Support . . . . . . . . . . . . . . . . . . . . 3.3 Assoziationsregeln . . . . . . . . . . . . . . 3.4 A-Priori-Algorithmus . . . . . . . . . . . . . 3.4.1 Phase 1: Filtern von Kandidaten . . 3.4.2 Phase 2: Generieren von Kandidaten 3.4.3 Weiteres . . . . . . . . . . . . . . . . 3.4.4 Assoziationsregeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 5 5 5 5 5 5 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Dimensionalitätsreduktion und Visualisierung 4.1 Hauptkomponentenanalyse: PCA . . . . . 4.2 Boxplot . . . . . . . . . . . . . . . . . . . 4.3 Heatmap . . . . . . . . . . . . . . . . . . . 4.4 Parallelkoordinaten . . . . . . . . . . . . . 4.5 Dimensional Stacking . . . . . . . . . . . . 4.6 Multidimensionale Skalierung (MDS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 6 7 7 7 5 Clusteranalyse 5.1 Clusterverfahren . . . . . . . . . . . . . . . 5.2 Agglomeratives Clustern . . . . . . . . . . . 5.3 Abstandsmaße . . . . . . . . . . . . . . . . 5.4 Cluster-Repräsentation; Clustroid/Centroid 5.5 K-Means . . . . . . . . . . . . . . . . . . . . 5.6 Bewertung von Cluster-Strukturen . . . . . 5.7 DBSCAN . . . . . . . . . . . . . . . . . . . 5.8 Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 8 8 8 8 8 9 9 6 Netzwerkanalyse 6.1 Betweenness . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Berechnung mit Girvan-Newman Algorithmus . . . . 6.2 Finden von Communities . . . . . . . . . . . . . . . . . . . 6.3 Partitionieren durch Schnitte . . . . . . . . . . . . . . . . . 6.4 Probabilistische Modelle und Maximum-Likelihood-Schätzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 10 10 10 10 7 Link-Analyse 11 7.1 Random Surfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 7.2 Rekursive Senken-Elimination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2 7.3 7.4 Zufällige Sprünge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Themen-sensitives PageRank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 8 Data Mining auf Datenströmen 11 8.1 Stichproben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 8.2 Bloom-Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1 Einleitung 2 Ähnlichkeit und Ähnlichkeitssuche 2.1 Distanzmaß 1. d(x, y) ≥ 0 2. d(x, y) = 0 ⇔ x = y 3. d(x, y) = d(y, x) 4. d(x, z) ≤ d(x, y) + d(y, z) 2.2 Jaccard-Ähnlichkeit Für zwei (diskrete) Teilmengen S und T : SIM (S, T ) = |S ∩ T | |S ∪ T | 2.3 Dokumente als Mengen: k-shingles k-shingles: Mengen (alternativ bags) der Zeichen / Wörter aller vorkommenden Teilstrings der Länge k in einem Dokument. Häufig 4 ≤ k ≤ 9. 2.4 Minhash-Signaturen Gegeben M Einheiten (Zeichen / Wörter) und N Shingles Sj , sowie Hashfunktionen h mit Schlüssel- und Wertebereich {1, . . . , M } und möglichst wenigen Kollisionen. Die Shingles seien repräsentiert durch eine Matrix C ∈ MM,N ({0, 1}) mit C[i][j] = 1 ⇔ Zeichen si ∈ Sj . Dann berechnen wir Minhash-Signaturen [h1 (Sj ), h2 (Sj ), . . . , hn (Sj )] Berechnung von Minhash-Signaturen 1 initialize a l l signature entries sig[·][·] = ∞ 2 f o r i i n [1 , . . ., M ]: 3 compute h1 (i), h2 (i), . . . , hn (i) 3 4 5 6 7 f o r j i n [1 , . . ., N ]: i f C [ i ][ j ] == 1: f o r k i n [1 , . . ., n ]: sig [ k ][ j ] = min( sig [ k ][ j ] , hk (i)) 2.4.1 Verwendung / Satz Für eine zufällige Permutation π und zwei Mengen U und V gilt P(hπ (U ) = hπ (V )) = SIM (U, V ) 2.5 Lokalitätserhaltendes Hashing Idee: Ähnliche Dokumente basierend auf ihren Signaturen mit hoher Wahrscheinlichkeit auf den gleichen „Behälter“ hashen. Die Ähnlichkeitssuche wird dann nur noch in den Behältern betrieben. Betrachte N Signaturen der Länge n und zerlege die n Zeilen der n × N Signatur-Matrix in b = nr Bänder mit jeweils r Zeilen. Auf jedes Band wird eine Hashfunktion g angewendet, die Integer-Vektoren der Länge r auf eine ausreichend große Zahl von Behältern abbildet. Beispiel: S1 S2 ··· SN h1 (S1 ) h1 (S2 ) · · · h1 (SN ) r = 3 h2 (S1 ) h2 (S2 ) · · · h2 (SN ) h3 (S1 ) h3 (S3 ) · · · h3 (SN ) h4 (S1 ) ··· .. . Abbildung: g(h1 (S1 ), h2 (S1 ), h3 (S1 )) g(h4 (S1 ), h5 (S1 ), h6 (S1 )) .. . ··· ··· g(h1 (SN ), h2 (SN ), h3 (SN )) g(h4 (SN ), h5 (SN ), h6 (SN )) Dokumente mit der selben Teilsignatur werden also (sicher) auf den selben Behälter abgebildet, solche mit nicht identischen Teilsignaturen auf unterschiedliche Behälter. Man kann für jedes Band die selbe Hashfunktion verwenden, aber unterschiedliche Behälter-Arrays. 2.5.1 Analyse Sei s die Jaccard-Ähnlichkeit von zwei Dokumenten. Die Wahrscheinlichkeit, dass die Dokumente in einen gemeinsamen Behälter abgebildet werden, ist p ≥ 1 − (1 − sr )b . Die Funktion s 7→ 1 − (1 − sr )b hat eine sigmoide Form (S-förmiger Verlauf). Als Schwellwert für die Ähnlichkeit sollte z.B. t ≈ (1/b)1/r gewählt werden. Die LHS-Technik garantiert nicht, dass keine false positives oder false negatives auftreten. Die berechneten Kandidaten-Paare sollten noch geprüft werden, ob tatsächlich mindestens t Einträge übereinstimmen. 3 Häufigkeitsanalyse: Itemset Mining 3.1 Warenkorb-Modell Daten werden repräsentiert durch eine n : m-Beziehung: Artikel/Items ↔ Warenkörbe/Transaktionen Es sei I = {i1 , . . . , iN } die Menge aller Items (sehr viele Elemente). Jede Transaktion t ist eindeutig definiert durch ein Itemset It ⊂ I (wenige Elemente). 4 3.2 Support Sei T eine Menge von Transaktionen in Form von Itemsets. Der Support eines Itemsets I ist definiert durch supp(I) := #{t ∈ T : I ⊆ It } bzw. supp(I) := #{t ∈ T : I ⊆ It } |T | I ist häufig, wenn der Support einen vorgegebenen Schwellwert erreicht: supp(I) ≥ minsupp Ein häufiges Itemset I ist abgeschlossen / maximal, wenn alle echten Obermengen nicht häufig sind. 3.3 Assoziationsregeln I * I 0 bedeutet „wenn eine Transaktion I enthält, dann vmtl. auch I 0 “. 0) 0 Die Konfidenz ist definiert durch conf (I * I 0 ) = supp(I∪I supp(I) . Häufig interessant: conf (I * I ) ≥ minconf 3.4 A-Priori-Algorithmus Der Algorithmus sucht häufige Itemsets und macht sich dazu folgende Monotonie-Eigenschaft zunutze: I häufig ⇒ (∀J ⊂ I : J häufig) Es ist ein iterativer Algorithmus der zwei Phasen alterniert, um häufige Itemsets der Kardinalität k = 1, 2, 3, . . . zu finden. 3.4.1 Phase 1: Filtern von Kandidaten Ggf. wird eine Tabelle für Namen → Integer-Mapping angelegt. Dann werden in einer Tabelle die Itemsets, die in den Transaktionen vorkommen, gezählt. Betrachtet werden die Kandidaten-Itemsets aus Ck (C1 = alle 1-elementigen Itemsets). Die Itemsets, die den Schwellwert minsupp erreichen, werden neu nummeriert, von 1 bis m, und in Lk gespeichert. 3.4.2 Phase 2: Generieren von Kandidaten Aus den häufigen Itemsets Lk wird die Menge Ck+1 der Kandidaten der Länge k + 1 generiert. Dies sind alle (k + 1)-elementigen Mengen, die sich als Vereinigung von häufigen k-elementigen Itemsets (solchen aus Lk ) darstellen lassen. 3.4.3 Weiteres Der Algorithmus wird fortgesetzt, bis wahlweise Ck oder Lk leer ist. In einer effizienten Implementierung wird Ck nur implizit gebildet (nicht explizit vollständig gespeichert). A-Priori-Algorithmus 1 2 3 4 5 6 7 8 9 10 11 L1 = { frequent items } k = 2 while Lk−1 6= ∅: Ck = {A ∪ B : A, B ∈ Lk−1 ∧ |A ∪ B| = k} f o r It ∈ T : f o r I ∈ Ck : i f I ⊆ It : count [I ] += 1 Lk = {I ∈ Ck : count(I) ≥ minsupp } k += 1 return L1 ∪ L2 ∪ · · · ∪ Lk 5 3.4.4 Assoziationsregeln Nach Beendung des Algorithmus kann man für J ⊂ I, I häufig, Kandidaten für Assoziationsregeln betrachten: (I \ J) * J. Hier kann die Konfidenz berechnet und Regeln mit ausreichend hoher Konfidenz betrachtet werden. Oft beschränkt man sich auf Regeln mit |J| = 1. 4 Dimensionalitätsreduktion und Visualisierung 4.1 Hauptkomponentenanalyse: PCA Idee: Ersetze ursprüngliche Variablen durch eine geringere Anzahl informativer Linearkombinationen. Dabei soll möglichst viel der Varianz erhalten bleiben, während Redundanz / Korrelationen eliminiert werden. 4.2 Boxplot 4.3 Heatmap Darstellung in räumlicher bzw. Matrix-Struktur („Wärmebild“). Bsp: „umso mehr rot, umso höher“ 6 4.4 Parallelkoordinaten 4.5 Dimensional Stacking Wähle zwei Dimensionen i1 und i2 und teile sie in Intervalle auf. Die von den beiden Dimensionen aufgespannte Ebene wird so in Rechtecke unterteilt. Setze anhand weiterer Dimensionen rekursiv fort für jedes Rechteck, bis keine Dimensionen mehr über sind. 4.6 Multidimensionale Skalierung (MDS) TODO 5 Clusteranalyse 5.1 Clusterverfahren • hierarchisch – agglomerativ – divisiv • partitionierend 7 5.2 Agglomeratives Clustern Zunächst bildet jeder Datenpunkt eine eigene Gruppe. Diese werden so lange miteinander zu größeren Gruppen kombiniert, bis ein Abbruchkriterium erfüllt wird. Dies bedeutet in der Regel erheblichen Aufwand, da in jedem Schritt alle aktuellen Cluster paarweise miteinander verglichen werden müssen. 5.3 Abstandsmaße Single linkage: D(C, C 0 ) = minx∈C,x0 ∈C 0 d(x, x0 ) Complete linkage: D(C, C 0 ) = maxx∈C,x0 ∈C 0 d(x, x0 ) P P 1 0 Mean/average linkage: D(C, C 0 ) = |C||C 0| x∈C x0 ∈C 0 d(x, x ) Radius: D(C, C 0 ) = maxx∈C∪C 0 d(x, center(C ∪ C 0 )) 5.4 Cluster-Repräsentation; Clustroid/Centroid Cluster können bspw. durch ihr geometrisches Zentrum repräsentiert werden. Ist dies nicht möglich, gibt es verschiedene Möglichkeiten, einen Punkt als Centroid zu bestimmen. Bsp: x∗ = arg min x∈C x∗ = arg min x∈C X d(x, y) y∈C X d(x, y)2 y∈C ∗ x = arg min max d(x, y) x∈C y∈C 5.5 K-Means Der Algorithmus erwartet die Zahl der Cluster, K, als Parameter. Ist K nicht bekannt, kann man durch mehrfaches probieren einen Wert ermitteln. Die Initialisierung sollte möglichst divers sein. Bsp.-Strategie: Wähle einen zufälligen Punkt und danach immer den, dessen minimaler Abstand zu den bereits gewählten maximal ist. K-Means 1 initialize K cluster centroids c1 , . . . , cK 2 until no change i n clusters : 3 f o r a l l data points xi : 4 assign xi to the closest centroid 5 recompute centroids c1 , . . . , cK 5.6 Bewertung von Cluster-Strukturen Bsp. Dunn Index (mit D Inter-Cluster Distanz, ∆ Intra-Cluster Distanz): min1≤i6=j≤K D(Ci , Cj ) max1≤k≤K ∆(Ck ) Für die Wahl von K: „Ellenbogen-Heuristik“ 8 5.7 DBSCAN x dicht: x von ausreichend vielen Punkten umgeben y direkt dichte-erreichbar von x: y liegt in -Nachbarschaft von x und x ist dicht y dichte-erreichbar von x: ∃ Sequenz von x nach y, sodass xi+1 direkt dichte-erreichbar von xi ist x und y dichte-verbunden: ∃z : x, y dichte-erreichbar von z (symmetrische Relation) In DBSCAN gibt es drei Arten von Punkten: Kernobjekte, die selbst dicht sind dichte-erreichbare Objekte, die von einem Kernobjekt erreichbar, aber nicht dicht sind („Rand“ des Clusters) Rauschpunkte, die weder dicht, noch dichte-erreichbar sind DBSCAN garantiert, dass dichte-verbundene Punkte im selben Cluster landen und Rauschpunkte identifiziert werden. Lediglich dichte-erreichbare Punkte landen (zufällig) in einem der passenden Cluster. Im Gegensatz zu K-Means muss die Zahl der Cluster nicht vorgegeben werden und es wird keine spezielle Form der Cluster vorausgesetzt. Es können beliebige Distanzfunktionen verwendet werden; der Datenraum muss nicht geometrisch sein. 5.8 Algorithmus Zunächst wird jeder Punkt als NOISE markiert und seine -Umgebung berechnet. Dann wird für jeden noch als NOISE betrachteten Punkt x geprüft, ob er dicht ist. Ist dies der Fall, so wird ein neuer Cluster erzeugt und erweitert. Das Erweitern eines Clusters funktioniert folgendermaßen: Beginnend mit den Punkten in der -Umgebung von x werden die dichte-erreichbaren Punkte dem Cluster hinzugefügt. Für jeden dichten hinzugefügten Punkt y werden auch die Punkte in der -Umgebung von y als dichte-erreichbar betrachtet (und wie beschrieben behandelt). DBSCAN 1 def DBSCAN (, MinPts ) : 2 f o r x i n data points : 3 mark x as NOISE 4 NeighborPts [ x ] = points within - neighborhood of x ( including x ) 5 f o r x i n points marked as NOISE : 6 i f l e n ( NeighborPts [ x ]) ≥ MinPts : 7 C = new cluster 8 expandCluster (x , NeighborPts , C , , MinPts ) 9 10 def expandCluster (x , NeighborPts , C , , MinPts ) : 11 ExtendedPts = NeighborPts [ x ] 12 C += x 13 f o r y i n ExtendedPts marked as NOISE : 14 C += y 15 i f l e n ( NeighborPts [ y ]) ≥ MinPts : 16 ExtendedPts += NeighborPts [ y ] 6 Netzwerkanalyse Betrachte (soziale) Netzwerke, Kommunikationsverbindungen, etc. als gerichtete/ungerichtete, gewichtete/ungewichtete Graphen. Soziale Netzwerke zeigen üblicherweise Lokalität (Tendenz zur Gruppierung). Man kann hier bspw. Annahmen über Dreiecksbeziehungen machen (R(A, B) ∧ R(A, C) * R(B, C)). 9 Anders als bei der Clusteranalyse sind Gruppen/Communities typischerweise nicht disjunkt, sondern überlappend. 6.1 Betweenness Sei G = (V, E) ein Graph. Für U, V ∈ V sein SP (U, V ) die Menge der kürzesten Wege zwischen U und V . X betw(A, B) := U,V ∈V 1 |SP (U, V )| X J(A, B) ∈ P K P ∈SP (U,V ) Ein hoher Wert für die Betweenness betw(A, B) legt nahe, dass A und B zu unterschiedlichen Communities gehören. 6.1.1 Berechnung mit Girvan-Newman Algorithmus Überführe den Graphen für jeden Knoten X mittels Breitensuche in einen Baum mit Wurzel X. Jedes Blatt erhält Wert 1. Jeder Knoten verteilt Pseinen Wert gleichmäßig auf seine eingehenden Kanten. Jeder Knoten, der kein Blatt ist, erhält Wert 1 + Werte seiner ausgehenden Kanten. P Wert von (A, B) in Baum T betw(A, B) = T ∈Bäume 2 6.2 Finden von Communities Bsp: Eliminiere die Kanten, deren Betweenness eine Schranke überschreitet, und betrachte die Zusammenhangskomponenten. Dazu kann man die Kanten gemäß der Betweenness sortieren oder alternativ nach jeder Kanten-Elimination die Betweenness neu berechnen. Um Überlappungen zwischen Communities zuzulassen, kann man direkt nach stark zusammenhängenden Teilgraphen suchen und sie als Kern einer Community identifizieren (und erweitern). Eine Möglichkeit dazu ist die Suche nach maximalen Cliquen (NP-vollständig; häufig zu klein). Eine andere Möglichkeit ist, den Graphen zufällig in zwei Teile zu zerlegen, als bipartiten Graphen zu behandeln und vollständige bipartite Teilgraphen zu suchen (Hoffnung: bei Zerlegung wird eine Community in zwei etwa gleich große Teile zerlegt). Dieses Problem lässt sich auf das Finden häufiger Itemsets zurückführen (Knotenmenge = Items ∪˙ Transaktionen). 6.3 Partitionieren durch Schnitte ˙ . Ihr Gewicht ist Cut(S, T ) = Zahl der Kanten Ein Schnitt eines Graphen ist eine Partition von V = S ∪T zwischen S und T . Interpretiert man Kanten als soziale Beziehungen, möchte man nach Schnitten mit minimalem Gewicht suchen. Um zu vermeiden, dass S und T sehr starke Größenunterschiede aufweisen, betrachtet man das normalisierte Gewicht Cut(S, T ) Cut(S, T ) + V ol(S) V ol(T ) wobei V ol(S) = Zahl der Kanten mit min. einem Eckpunkt in S. 6.4 Probabilistische Modelle und Maximum-Likelihood-Schätzer Modellfindungs-Ansatz: Finde eine Wahrscheinlichkeitsverteilung, die für die tatsächlich beobachteten Daten maximal plausibel ist. Sei P = {Pθ : θ ∈ Θ} eine Klasse von Verteilungen und Pθ (D) die Wahrscheinlichkeit, die Daten D unter der Parametrisierung θ zu beobachten. Dann ist ` : θ 7→ P (D|θ) = Pθ (D) 10 die Likelihood-Funktion und θ∗ = arg max `(θ) θ∈Θ der Maximum-Likelihood (ML) Schätzer. Das Finden des ML-Schätzers ist oft einfacher, indem der Logarithmus der Likelihood-Funktion betrachtet wird. 7 Link-Analyse 7.1 Random Surfer Transitionsmatrix M = (mi,j ) mit mi,j = P(von Knoten i nach Knoten j). Wir interessieren uns für die stationäre Verteilung v ∗ mit M · v ∗ = v ∗ (Eigenvektor-Berechnung durch (M − I)v ∗ = 0) bzw. M t · v0 ≈ v ∗ für ausreichend große t (t ≈ 50 für das WWW). Obige Berechnung funktioniert jedoch nicht mit Senken und anderen Problemen. 7.2 Rekursive Senken-Elimination Berechne v ∗ für den reduzierten Graphen G0 . Anschließend erweitere für einen Knoten n, dessen Vorgänger p alle in G0 liegen: v ∗ (n) = X p 1 v ∗ (p) out(p) 7.3 Zufällige Sprünge Vermeidet nicht nur Senken, sondern auch Probleme durch bspw. Zusammenhangskomponenten. Für eine Sprungwahrscheinlichkeit (1 − β) und einen Vektor u = ( |V1 | , . . . , |V1 | )t : vt+1 = β · M · vt + (1 − β) · u 7.4 Themen-sensitives PageRank Wie PageRank mit zufälligen Sprüngen, aber u stellt eine Gleichverteilung auf die Teilmenge der Knoten zu einem bestimmten Thema dar (Rest 0-Einträge). 8 Data Mining auf Datenströmen 8.1 Stichproben Stichprobe der anteiligen Größe ab an allen Daten: Wende eine Hashfunktion mit b Behältern an und speichere Elemente mit Hashwert ≥ a. Für eine variable Größe verringere a nach gewisser Zeit und lösche alle Elemente mit Hashwert > a. 11 8.2 Bloom-Filter Aufgabe ist zu prüfen, ob ein Schlüssel K zu einer Menge S gehört. Seien h1 , . . . , hk Hashfunktionen, die Schlüssel auf n Werte abbilden. Bloom-Filter Initialisierung und Anwendung 1 def init ( Menge von m Schl ü sseln S , h1 , . . . , hk ) : 2 a = Array mit n 0 - Bits 3 for s in S: 4 f o r hi i n h1 , . . . , hk : 5 a [hi ( s ) ] = 1 6 return a 7 8 def pr ü fen ( Schl ü ssel K , Array a ( aus init () ) , h1 , . . . , hk ) : 9 f o r hi i n h1 , . . . , hk : 10 i f a [hi ( K ) ] == 0: 11 return "K nicht i n S" 12 return "K mö g l i c h e r w e i s e i n S" 12