---
title: PCA
description: "PCA为ML API。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/bds/kunpengbdssparkml_16_0022.html
sourcePath: /source/zh/kunpengboostkithistory/2200/bds/kunpengbdssparkml_16_0022.html
indexId: a913f2300fa1379dd980474cf2ac31462b2c187ce24a41924e43301a2cc395db73
---
# PCA

PCA为ML API。

| 模型接口类别 | 函数接口 |
| --- | --- |
| ML API | def fit(dataset: Dataset[\_]): PCAModel |
| ML API | def fit(dataset: Dataset[\_], paramMaps: Array[ParamMap]): Seq[PCAModel] |
| ML API | def fit(dataset: Dataset[\_], paramMap: ParamMap): PCAModel |
| ML API | def fit(dataset: Dataset[\_], firstParamPair: ParamPair[\_], otherParamPairs: ParamPair[\_]\*): PCAModel |


#### ML API

- 功能描述
  输入Dataset形式的矩阵，输出它的主成分和对应的权重。


- 输入输出

  1. 包名：org.apache.spark.ml.feature
  2. 类名：PCA
  3. 方法名：fit
  4. 输入：矩阵Dataset[_]，主成分个数| 参数名称 | 取值类型 | 描述 |
| --- | --- | --- |
| dataset | Dataset[Vector] | 矩阵，以行为单位进行存储。 |
| k | Int | 主成分个数 |


  5. 算法参数| 参数名称 | 取值类型 | 缺省值 | 描述 |
| --- | --- | --- | --- |
| setk(value:Int) | k | \- | 要求的主成分个数，取值范围[1,n]。 |


    参数及fit代码接口示例： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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，包含主成分和对应的权重| 参数名称 | 取值类型 | 描述 |
| --- | --- | --- |
| pc | DenseMatrix | 主成分矩阵，每一列都是一个主成分向量 |
| explainedVariance | DenseVector | 主成分对应的权重，每一维对应一个主成分 |


- 使用样例
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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")
