首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >降维:主成分分析(PCA)

降维:主成分分析(PCA)

作者头像
用户1171305
发布2017-12-28 11:25:25
7410
发布2017-12-28 11:25:25
举报
文章被收录于专栏:成长道路成长道路

定义:可以将特征向量投影到低维空间,实现对特征向量的降维

步骤:

1.数据预处理。这里预处理包含俩个部分:均值归一化和属性范围调整。均值归一化是相应属性减去平均值;而属性范围则在归一化基础上除以属性方差。

2.计算特征之间的协方差矩阵。该矩阵是一个n*n的对称矩阵。

3.计算协方差矩阵的特征值和特征向量。

4.将特征值从大到小排序。

5.保留最上面的N个特征向量。

6.将原数据映射到由N个特征向量构成的新空间中。

测试代码:

package com.iflytek.dimensionalityreduction

import org.apache.spark.sql.SparkSession import org.apache.spark.mllib.feature.PCA import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.linalg.Vectors import com.sun.xml.internal.stream.buffer.sax.Features import org.apache.spark.mllib.regression.LinearRegressionWithSGD object PCA {   def main(args: Array[String]): Unit = {     val sc=SparkSession.builder().appName("pca").master("local").getOrCreate()     val dataFile=sc.sparkContext.textFile("E:\\test\\pca.txt", 10)     val data=dataFile.map {       line =>       val parts=line.split(",")       LabeledPoint(parts(0).toDouble,Vectors.dense(parts(1).split(" ").map (_.toDouble)))       }     val splits=data.randomSplit(Array(0.5,0.5), 11L)     val training=splits(0)     val test=splits(1)     val numIterations=10     val pca=new PCA(data.first().features.size/2).fit(data.map(_.features))     val training_pca=training.map { p=> p.copy(features=pca.transform(p.features))}     val test_pca=test.map { p => p.copy(features=pca.transform(p.features)) }     val model=LinearRegressionWithSGD.train(training, numIterations)     val model_pca=LinearRegressionWithSGD.train(training_pca, numIterations)     val valueandpredictions=test.map { p =>        val score=model.predict(p.features)        (score,p.label)     }     val valueandpredictions_pca=test_pca.map{ p=>       val score=model_pca.predict(p.features)       (score,p.label)     }     val MSE=valueandpredictions.map{case(v,p)=>       Math.pow(v-p, 2)     }.mean()     val MSE_PCA=valueandpredictions_pca.map{case(v,p)=>       Math.pow(v-p, 2)     }.mean()     println(MSE)     println(MSE_PCA)   } }

测试数据:pca.txt

1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2 1,0 0 1 2 3 4 2 3 1 2 3 1 2 4 1 4 1 1 4 1 4 0,1 2 4 2 4 2 5 1 4 1 5 3 4 5 2 4 1 1 3 1 4 0,1 2 3 4 6 2 3 1 3 4 5 2 4 2 5 2 5 2 4 6 2 1,2 3 2 4 2 4 2 4 2 4 2 5 2 3 2 4 2 5 5 5 2

结果截图:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-04-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档