【问题标题】:How to save PCA object in spark scala?如何在 spark scala 中保存 PCA 对象?
【发布时间】:2021-03-12 07:59:47
【问题描述】:

我正在对我的数据进行 PCA,我从以下地址阅读指南:https://spark.apache.org/docs/latest/mllib-dimensionality-reduction

相关代码如下:

import org.apache.spark.mllib.feature.PCA
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.rdd.RDD

val data: RDD[LabeledPoint] = sc.parallelize(Seq(
  new LabeledPoint(0, Vectors.dense(1, 0, 0, 0, 1)),
  new LabeledPoint(1, Vectors.dense(1, 1, 0, 1, 0)),
  new LabeledPoint(1, Vectors.dense(1, 1, 0, 0, 0)),
  new LabeledPoint(0, Vectors.dense(1, 0, 0, 0, 0)),
  new LabeledPoint(1, Vectors.dense(1, 1, 0, 0, 0))))

// Compute the top 5 principal components.
val pca = new PCA(5).fit(data.map(_.features))

// Project vectors to the linear space spanned by the top 5 principal
// components, keeping the label
val projected = data.map(p => p.copy(features = pca.transform(p.features)))

此代码对数据执行 PCA。但是,我找不到解释如何保存和加载适合的 PCA 对象以供将来使用的示例代码或文档。有人可以根据上面的代码给我一个例子吗?

【问题讨论】:

    标签: scala apache-spark pca


    【解决方案1】:

    PCA mlib 版本似乎不支持将模型保存到磁盘。您可以改为保存生成的 PCAModel 的 pc 矩阵。但是,请使用 spar ML version。它返回一个可以序列化并包含在 Spark ML 管道中的 Spark Estimator。

    【讨论】:

      【解决方案2】:

      基于@EmiCareOfCell44 答案的示例代码,使用来自org.apache.spark.ml.featurePCAPCAModel

      import org.apache.spark.ml.feature.{PCA, PCAModel}
      import org.apache.spark.ml.linalg.Vectors
      
      val data = Array(
        Vectors.sparse(5, Seq((1, 1.0), (3, 7.0))),
        Vectors.dense(2.0, 0.0, 3.0, 4.0, 5.0),
        Vectors.dense(4.0, 0.0, 0.0, 6.0, 7.0)
      )
      val df = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features")
      
      val pca = new PCA()
        .setInputCol("features")
        .setOutputCol("pcaFeatures")
        .setK(3)
        .fit(df)
      
      val result = pca.transform(df).select("pcaFeatures")
      result.show(false)
      
      // save the model
      val savePath = "xxxx"
      pca.save(savePath)
      
      // load the save model
      val pca_loaded = PCAModel.load(savePath)
      
      

      【讨论】:

        猜你喜欢
        • 2011-12-25
        • 2016-09-15
        • 2020-12-10
        • 2016-10-12
        • 1970-01-01
        • 2016-11-09
        • 2022-01-13
        • 2020-05-20
        • 2016-10-16
        相关资源
        最近更新 更多