Makine öğrenimi görevleri için org.apache.spark.ml.Pipeline'ı kullanıyorum. Öngörülen bir etiket yerine gerçek olasılıkları bilmek özellikle önemlidir ve bunu elde etmekte güçlük çekiyorum. Burada rastgele orman ile ikili bir sınıflandırma görevi yapıyorum. Sınıf etiketleri "Evet" ve "Hayır" dır. "Evet" etiketinin çıktısını almak istiyorum. Olasılıklar, [0.69, 0.31] gibi boru hattı çıkışı olarak bir DenseVector'da saklanır, ancak hangisinin "Evet" e (0.69 veya 0.31?) Karşılık geldiğini bilmiyorum. Ben labelIndexer dan onu almak için bir yol olmalı? İşte Spark ML rastgele ormandan sınıfa karşılık gelen olasılıklar nasıl elde edilir
Sonra boru hattı yük ve yeni veriler üzerinde tahminlerde bulunsun modelival sc = new SparkContext(new SparkConf().setAppName(" ML").setMaster("local"))
val data = .... // load data from file
val df = sqlContext.createDataFrame(data).toDF("label", "features")
val labelIndexer = new StringIndexer()
.setInputCol("label")
.setOutputCol("indexedLabel")
.fit(df)
val featureIndexer = new VectorIndexer()
.setInputCol("features")
.setOutputCol("indexedFeatures")
.setMaxCategories(2)
.fit(df)
// Convert indexed labels back to original labels.
val labelConverter = new IndexToString()
.setInputCol("prediction")
.setOutputCol("predictedLabel")
.setLabels(labelIndexer.labels)
val Array(trainingData, testData) = df.randomSplit(Array(0.7, 0.3))
// Train a RandomForest model.
val rf = new RandomForestClassifier()
.setLabelCol("indexedLabel")
.setFeaturesCol("indexedFeatures")
.setNumTrees(10)
.setFeatureSubsetStrategy("auto")
.setImpurity("gini")
.setMaxDepth(4)
.setMaxBins(32)
// Create pipeline
val pipeline = new Pipeline()
.setStages(Array(labelIndexer, featureIndexer, rf,labelConverter))
// Train model
val model = pipeline.fit(trainingData)
// Save model
sc.parallelize(Seq(model), 1).saveAsObjectFile("/my/path/pipeline")
eğitimi için benim görev Kodu ve burada ilişkin kod parçayı
// Ignoring loading data part
// Create DF
val testdf = sqlContext.createDataFrame(testData).toDF("features", "line")
// Load pipeline
val model = sc.objectFile[org.apache.spark.ml.PipelineModel]("/my/path/pipeline").first
// My Question comes here : How to extract the probability that corresponding to class label "1"
// This is my attempt, I would like to output probability for label "Yes" and predicted label . The probabilities are stored in a denseVector, but I don't know which one is corresponding to "Yes". Something like this:
val predictions = model.transform(testdf).select("probability").map(e=> e.asInstanceOf[DenseVector])
Kaynaklar olduğunu RF: http://spark.apache.org/docs/latest/ml-classification-regression.html#random-forests
bu '1 "Ben etiket için çıkış olasılığının istiyoruz' ve etiketi öngördü. olasılıkları boru hattı çıktı olarak bir DenseVector saklanır, ama karşılık gelen hangisinin bilmiyorum 1'e". " ? – eliasah
Merhaba Açıklamayı güncelledim. Temel olarak, "Evet" etiketine karşılık gelen olasılığın çıktılarını vermek istiyorum. – Qing