2017-05-23 4 views
3

Ich möchte die Kreuzvalidierung auf einen LDA-Algorithmus anwenden, um die Anzahl der Themen (K) zu bestimmen. Mein Zweifel betrifft den Evaluator, da ich die Log-Likelihood verwenden möchte. Was setze ich beim Erstellen einer Kreuzvalidierung auf .setEvaluator (????)?LDA-Kreuzvalidierungs-Evaluator

// Define a simple LDA 
val lda = new LDA() 
    .setMaxIter(10) 
    .setFeaturesCol("features") 

// We use a ParamGridBuilder to construct a grid of parameters to search over. 
val range = 1 to 20 
val paramGrid = new ParamGridBuilder() 
    .addGrid(lda.k, range.toArray) 
    .build() 

// Create a CrossValidator 
val cv = new CrossValidator() 
    .setEstimator(lda) 
    .setEvaluator(????) 
    .setEstimatorParamMaps(paramGrid) 
    .setNumFolds(5) 

Antwort

1

Kreuzvalidierung wird nicht einfach sein, gelten, wenn Sie effektiv unbeaufsichtigt Lernen zu tun sind. Sofern Sie Trainingsdaten nicht gekennzeichnet haben, sind die von der CrossValidator bereitgestellten Schnittstellen wahrscheinlich nicht angemessen. Die Tatsache, dass Sie verschiedene Werte von k ausprobieren, die Anzahl der Themen, die von LDA erstellt werden, deutet darauf hin, dass Sie diese Art von gekennzeichneten Trainingsdaten möglicherweise nicht haben.

Wenn Sie versuchten, die CrossValidator zu verwerten, glaube ich nicht, dass es eine geeignete Evaluators verfügbar (mindestens wie von Spark-2.2). Wenn Sie verschiedene Dimensionen des Modells untersuchen (z. B. die Anzahl der Themen variieren, k), ist es nicht trivial, die Log-Likelihood der Daten zwischen Modellen mit unterschiedlichen Dimensionalitäten zu vergleichen. Wenn Sie beispielsweise die Anzahl der Klassen erhöhen, erwarten Sie eine höhere Wahrscheinlichkeit der Datenerhöhung, jedoch mit dem Risiko einer Überanpassung. Ein Standardansatz besteht darin, etwas wie die Akaike Information criterion zu verwenden, um Modelle zu bestrafen, die eine höhere Komplexität aufweisen (z. B. ein größeres k). Ich glaube nicht, dass das derzeit im CrossValidator unterstützt wird.