1. PCA降维
1.1 概念
主成分分析( PrincipalComponent Analysis , PCA )或者主元分析。是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题。PCA类训练一个模型,用PCA将向量投射到一个低维度空间
1.2 用处
数据降维,将复杂的维度简单化,减少运算量
1.3 细节
Vectorsize 维度不能超过65535。因为PCA源码中需要计算协方差,需要开辟一个n*n的int长度的数组。
1.4 Demo
package spark.mllib
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession
/**
* Created by liuwei on 2017/7/13.
*/
object PCATest {
def main(args: Array[String]): Unit = {
import org.apache.spark.ml.feature.PCA
import org.apache.spark.ml.linalg.Vectors
var arr1:Array[Double] = new Array[Double](5000)
for(i <- 0 to arr1.length-1){
arr1(i) = i%10
}
// arr1.foreach(println)
val v1 =Vectors.dense(arr1);
// val v1 =arr1.toVector
// val v2 =arr1.toVector
// v3.a
val data = Array(
Vectors.sparse(5000, Seq((1, 1.0), (3, 7.0))),
v1,
v1
)
val sparkConf = new SparkConf().setAppName("PCATest").setMaster("local[8]")
val sc = new SparkContext(sparkConf)
val spark = SparkSession.builder.getOrCreate()
val df = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features")
val pca = new PCA()
.setInputCol("features")
.setOutputCol("pcaFeatures")
.setK(5)
.fit(df)
val result = pca.transform(df).select("pcaFeatures")
result.show(false)
}
}