Spark MLlib特征处理:PCA 主成分分析 ---原理及实战

PCA(Principal Component Analysis)即主成分分析。正如其名,PCA可以找出特征中最主要的特征,把原来的n个特征用k(k < n)个特征代

替,去除噪音和冗余。PCA是特征提取、数据降维的常用方法。

MLlib中PCA的实现思路:

1)原始数据3行4列经过转换得到矩阵 A34

2)得到矩阵 A34 的协方差矩阵 B44

3)得到协方差矩阵 B44 的右特征向量

4)选取k(如k=2)个大的特征值对应的特征向量,得到矩阵 C42

5)对矩阵 A34 降维得到 A32 = A34 * C42

实战

import org.apache.spark.mllib.feature.PCA
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkContext, SparkConf}

object PCAExample {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("PCAExample").setMaster("local[8]")
    val sc = new SparkContext(conf)

    // 设置日志等级
    sc.setLogLevel("WARN")

    // 原始数据
    val arr = Array(
      Vectors.dense(4.0,1.0, 4.0, 5.0),
      Vectors.dense(2.0,3.0, 4.0, 5.0),
      Vectors.dense(4.0,0.0, 6.0, 7.0))
    val data: RDD[Vector] = sc.parallelize(arr)

    // PCA降维
    val pca: RDD[Vector] = new PCA(2).fit(data).transform(data)

    // 1)协方差矩阵A,通过debug可看到
    //  1.3333333333333321  -1.666666666666666  0.6666666666666643  0.6666666666666643
    //  -1.666666666666666  2.3333333333333335  -1.333333333333334  -1.333333333333334
    //  0.6666666666666643  -1.333333333333334  1.3333333333333286  1.3333333333333286
    //  0.6666666666666643  -1.333333333333334  1.3333333333333286  1.3333333333333286

    // 2)协方差的特征向量,通过debug可看到
    //    -0.4272585628633996   -0.588949815490069  -0.6859943405700341   0.0
    //    0.6495967555956428    0.3277740377539023  -0.6859943405700355   5.91829962568105E-17
    //    -0.44467638546448407  0.522351555472326   -0.17149858514251054  -0.7071067811865475
    //    -0.44467638546448407  0.522351555472326   -0.17149858514251054  0.7071067811865476

    // 3)取k=2个特征向量,形成新矩阵B
    //    -0.4272585628633996   -0.588949815490069
    //    0.6495967555956428    0.3277740377539023
    //    -0.44467638546448407  0.522351555472326
    //    -0.44467638546448407  0.522351555472326

    //  4)矩阵A*矩阵B达到降维目的
    //  [-5.061524965038313,2.6731387750445608]
    //  [-7.489827262491891,4.4347709591799624]
    //  [-2.9078143281202276,4.506586481532503]
    pca.foreach(println)
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值