2016-01-08 8 views
8

erişmek:KIVILCIM, ML, Tuning, CrossValidator: benim boru hattında en iyi parametreleri seçmek için bir CrossValidator kullanıyorum bir NaiveBayes çok sınıflı sınıflandırıcı inşa etmek amacıyla ölçümleri

val cv = new CrossValidator() 
     .setEstimator(pipeline) 
     .setEstimatorParamMaps(paramGrid) 
     .setEvaluator(new MulticlassClassificationEvaluator) 
     .setNumFolds(10) 

val cvModel = cv.fit(trainingSet) 

boru hattı zamanki trafoları içerir ve Aşağıdaki sıraya göre tahmin ediciler: Tokenizer, StopWordsRemover, HashingTF, IDF ve son olarak NaiveBayes.

En iyi model için hesaplanan metriklere erişmek mümkün müdür?

İdeal olarak, parametrelerin değiştirilmesinin sınıflandırma kalitesini nasıl değiştirdiğini görmek için tüm modellerin metriklerine erişmek istiyorum. Ama şimdilik, en iyi model yeterince iyi.

Bilginize, ben Spark 1.6.0 Burada

cevap

6

oluyor kullanıyorum ben bunu nasıl: pyspark içinde

val pipeline = new Pipeline() 
    .setStages(Array(tokenizer, stopWordsFilter, tf, idf, word2Vec, featureVectorAssembler, categoryIndexerModel, classifier, categoryReverseIndexer)) 

... 

val paramGrid = new ParamGridBuilder() 
    .addGrid(tf.numFeatures, Array(10, 100)) 
    .addGrid(idf.minDocFreq, Array(1, 10)) 
    .addGrid(word2Vec.vectorSize, Array(200, 300)) 
    .addGrid(classifier.maxDepth, Array(3, 5)) 
    .build() 

paramGrid.size // 16 entries 

... 

// Print the average metrics per ParamGrid entry 
val avgMetricsParamGrid = crossValidatorModel.avgMetrics 

// Combine with paramGrid to see how they affect the overall metrics 
val combined = paramGrid.zip(avgMetricsParamGrid) 

... 

val bestModel = crossValidatorModel.bestModel.asInstanceOf[PipelineModel] 

// Explain params for each stage 
val bestHashingTFNumFeatures = bestModel.stages(2).asInstanceOf[HashingTF].explainParams 
val bestIDFMinDocFrequency = bestModel.stages(3).asInstanceOf[IDFModel].explainParams 
val bestWord2VecVectorSize = bestModel.stages(4).asInstanceOf[Word2VecModel].explainParams 
val bestDecisionTreeDepth = bestModel.stages(7).asInstanceOf[DecisionTreeClassificationModel].explainParams 
+1

zip çalışır ama gerçekten istemiyorum Bunun gibi CrossValidator'un nasıl çalıştığına dair içsel bilgi varsayar. Metrikler dizisinin nasıl oluşturulacağını değiştirebilir, böylece bir sonraki sürüm için farklı bir sıraya göre değişir ve siz de gözardı edilirsiniz, ancak kodunuzu hala kullandığından dolayı kullandığınızı bilmiyorsunuzdur. Metriği ile döndürülen bir model için paramler istiyorum. Ayrıca, sadece ortalama yerine özet istatistiklerini görmek isterim. Standart sapma olmadan ortalama ne kadar yararlıdır? – Turbo

0
cvModel.avgMetrics 

eserler 2.2.0