【问题标题】:How to extract two arrays from a Scala dense vector如何从 Scala 密集向量中提取两个数组
【发布时间】:2018-07-08 00:16:54
【问题描述】:

我有一个密集的向量。

scala> model.coefficients 
res1: org.apache.spark.ml.linalg.Vector = (891,[11,20,25,27,28,50],[0.35686135501086036,8.194306936725383E-6,7.62720047518819E-6,9.354557510460644E-4,5.633054601656321E-4,2.5641516558812987E-5])

有人可以建议一种方法从这个向量中创建两个数组吗?

数组 1:索引数组

res2: Array[Int] = Array(11,20,25,27,28,50)  

数组 2:值数组

res3: Array[Double] = Array(0.35686135501086036,8.194306936725383E-6,7.62720047518819E-6,9.354557510460644E-4,5.633054601656321E-4,2.5641516558812987E-5)

我们将不胜感激您的帮助:

(我的最终目标是获取模型系数并使用索引数组选择列名。例如:数组索引 11 可以是产品 A 的销售额,数组索引 20 可以是客户年龄等等)

【问题讨论】:

    标签: scala apache-spark-mllib


    【解决方案1】:

    我相信你所拥有的是一个 SparseVector。你可以使用indicesvalues方法如下:

    import org.apache.spark.mllib.linalg.SparseVector
    
    val vector = new SparseVector(891, Array(11, 20, 25, 27, 28, 50), Array(
      0.35686135501086036, 8.194306936725383E-6, 7.62720047518819E-6,
      9.354557510460644E-4, 5.633054601656321E-4, 2.5641516558812987E-5)
    )
    
    vector.indices
    // res1: Array[Int] = Array(11, 20, 25, 27, 28, 50)
    
    vector.values
    // res2: Array[Double] = Array(0.35686135501086036, 8.194306936725383E-6, 7.62720047518819E-6,
    //   9.354557510460644E-4, 5.633054601656321E-4, 2.5641516558812987E-5)
    

    【讨论】:

    • model.coefficients 是 org.apache.spark.ml.linalg.Vector。如何将其转换为 org.apache.spark.mllib.linalg.SparseVector?
    • “模型”是通过使用 LogisticRegression 拟合训练数据而创建的。
    • 您可以使用toSparse方法将model.coefficients转换为SparseVector
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 2020-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2019-08-24
    • 2020-09-09
    相关资源
    最近更新 更多