代码之家  ›  专栏  ›  技术社区  ›  marlanbar

mllib向量的最大值?

  •  3
  • marlanbar  · 技术社区  · 7 年前

    我使用mllib使用Apache Spark创建了一个ML管道。 评估器结果是一个具有列“概率”的数据帧,该列是概率的mllib向量(类似于scikit learn中的predict_probability)。

    val rfPredictions = rfModels.bestModel.transform(testing)
    val precision = evaluator.evaluate(rfPredictions)
    

    我试过这样的方法,但没有成功:

    rfPredictions.select("probability").map{c => c.getAs[Vector](1).max}
    <console>:166: error: value max is not a member of 
    org.apache.spark.mllib.linalg.Vector
    

    我想要一个具有最大概率的新列。有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  3
  •   akuiper    7 年前

    没有 max 方法尝试 toArray.max :

    rfPredictions.select("probability").map{ c => c.getAs[Vector](1).toArray.max }
    

    argmax :

    rfPredictions.select("probability").map{ c => {
        val v = c.getAs[Vector](1)
        v(v.argmax)
    }}
    

    要将最大值添加为新列,请定义自定义项并将其与一起使用 withColumn 功能:

    val max_proba_udf = udf((v: Vector) => v.toArray.max)
    
    rfPredictions.withColumn("max_prob", max_proba_udf($"probability"))
    
        2
  •  1
  •   Alexander Volinski    7 年前

    Spark>2

    具有 ml,而不是mllib 这将从下一个方面起作用:

    import org.apache.spark.ml.linalg.DenseVector
    
    just_another_df.select("probability").map{ c => c.getAs[DenseVector](0).toArray.max }
    

    使用自定义项

    import org.apache.spark.ml.linalg.DenseVector
    
    val max_proba_udf = udf((v: DenseVector) => v.toArray.max)
    
    val rfPredictions = just_another_df.withColumn("MAX_PROB", max_proba_udf($"probability"))