2016-10-20 5 views

Antwort

1

Lösung für Ihr Problem

Sie sollten die score() Methode des Modells werden, das in den Dokumenten die Log-Wahrscheinlichkeit des übergebenen zurückgibt.

Angenommen, Sie haben Ihre Dokumente wie auf dem Papier erstellt und ein LDA-Modell für jeden Host geschult. Sie sollten dann von allen Trainingsdokumenten die niedrigste Wahrscheinlichkeit erhalten und sie als Schwellenwert verwenden. Beispiel ungetestet Code folgt:

import numpy as np 
from sklearn.decomposition import LatentDirichletAllocation 

# Assuming X contains a host's training documents 
# and X_unknown contains the test documents 
lda = LatentDirichletAllocation(... parameters here ...) 
lda.fit(X) 
threshold = min([lda.score([x]) for x in X]) 
attacks = [ 
    i for i, x in enumerate(X_unknown) 
    if lda.score([x]) < threshold 
] 

# attacks now contains the indexes of the anomalies 

Genau das, was Sie gefragt

Wenn Sie genaue Gleichung in dem Papier verwenden möchten Sie, dass ich vor dem Versuch, es in tun würde raten verknüpft Scikit-Learn, weil die Erwartung Schritt Schnittstelle ist nicht klar.

Die Parameter θ und φ können an den Linien 112 - 130 als doc_topic_d und norm_phi gefunden werden. Die Funktion _update_doc_distribution() die doc_topic_distribution und die ausreichenden Statistiken, aus denen gibt man versuchen, auf die durch den folgenden wieder ungetesteten Code θ und φ zu folgern:

theta = doc_topic_d/doc_topic_d.sum() 
# see the variables exp_doc_topic_d in the source code 
# in the function _update_doc_distribution() 
phi = np.dot(exp_doc_topic_d, exp_topic_word_d) + EPS 

Vorschlag für eine andere Bibliothek

Wenn Sie möchten, Um mehr Kontrolle über die Erwartungs- und Maximierungsschritte und die Variationsparameter zu haben, würde ich vorschlagen, dass Sie sich LDA++ und speziell die EStepInterface ansehen (Disclaimer, ich bin einer der Autoren von LDA ++).

Verwandte Themen