鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

PCA

PCA为ML API。

模型接口类别

函数接口

ML API

def fit(dataset: Dataset[_]): PCAModel

def fit(dataset: Dataset[_], paramMaps: Array[ParamMap]): Seq[PCAModel]

def fit(dataset: Dataset[_], paramMap: ParamMap): PCAModel

def fit(dataset: Dataset[_], firstParamPair: ParamPair[_], otherParamPairs: ParamPair[_]*): PCAModel

ML API

  • 功能描述

    输入Dataset形式的矩阵,输出它的主成分和对应的权重。

  • 输入输出
    1. 包名:org.apache.spark.ml.feature
    2. 类名:PCA
    3. 方法名:fit
    4. 输入:矩阵Dataset[_],主成分个数。

      Param name

      Type(s)

      Description

      dataset

      Dataset[Vector]

      矩阵,以行为单位进行存储

      k

      Int

      主成分个数

    5. 算法参数

      Param name

      Type( s)

      Default

      Description

      setk(value:Int)

      k

      -

      要求的主成分个数,取值范围

      [1,n]

      参数及fit代码接口示例:

      import org.apache.spark.ml.param.{ParamMap, ParamPair}
      
      val pca = new MLPCA()
      //定义def fit(dataset: Dataset[_], paramMap: ParamMap) 接口参数
      val paramMap = ParamMap(pca.k -> params.k)
      .put(pca.inputCol, "matrix")
      
      // 定义def fit(dataset: Dataset[_], paramMaps: Array[ParamMap]): 接口参数
      val paramMaps: Array[ParamMap] = new Array[ParamMap](2)
      for (i <- 0 to  2) {
      paramMaps(i) = ParamMap(pca.k -> params.k) .put(pca.inputCol, "matrix")
      }//对paramMaps进行赋值
      
      // 定义def fit(dataset: Dataset[_], firstParamPair: ParamPair[_], otherParamPairs: ParamPair[_]*) 接口参数
      val kParamPair = ParamPair(pca.k,k)
      
      // 调用各个fit接口
      model = pca.fit(trainingData)
      model = pca.fit(trainingData, paramMap)
      models = pca.fit(trainingData, paramMaps)
      model = pca.fit(trainingData, kParamPair)
    6. 输出:PCAModel,包含主成分和对应的权重。

      Param name

      Type(s)

      Description

      pc

      DenseMatrix

      主成分矩阵,每一列都是一个主成分向量

      explainedVariance

      DenseVector

      主成分对应的权重,每一维对应一个主成分

  • 使用样例
    import org.apache.spark.ml.feature.PCA
    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")