首页 > 解决方案 > 如何在 spark scala 中保存 PCA 对象?

问题描述

我正在对我的数据进行 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 对象以供将来使用的示例代码或文档。有人可以根据上面的代码给我一个例子吗?

标签: scalaapache-sparkpca

解决方案


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


推荐阅读