降维:主成分分析(PCA)

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

步骤:

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

结果截图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序生活

TensorFlow实现Attention机制原理介绍论文阅读代码实现

1.6K8
来自专栏小樱的经验随笔

线性规划之单纯形法【超详解+图解】

1.作用     单纯形法是解决线性规划问题的一个有效的算法。线性规划就是在一组线性约束条件下,求解目标函数最优解的问题。 2.线性规划的一般形式     在约...

2K5
来自专栏专知

深度学习TensorFlow实现集合

【导读】该项目使用Tensflow实现了一些一些深度学习的算法,帮助新手更快的上手。

1332
来自专栏老秦求学

从Iris数据集开始---机器学习入门

代码多来自《Introduction to Machine Learning with Python》. 该文集主要是自己的一个阅读笔记以及一些小思考,小总结...

62110
来自专栏深度学习自然语言处理

如何用简单易懂的例子解释隐马尔可夫模型?(进阶篇)

昨天通俗易懂的讲解了什么是HMM,没看的点这里。那么今天就来看看,具体理论是什么以及数学上怎么计算的呢?

741
来自专栏量化投资与机器学习

深度学习代码系列之——Deep Learning Toolbox For Matlab

A Matlab toolbox for Deep Learning Matlab/Octave toolbox for deep learning. I...

3488
来自专栏数说工作室

文本分析 | 常用距离/相似度 一览

这个系列打算以文本相似度为切入点,逐步介绍一些文本分析的干货,包括分词、词频、词频向量、TF-IDF、文本匹配等等。 第一篇中,介绍了文本相似度是干什么的; 第...

4124
来自专栏yw的数据分析

ONCOCNV软件思路分析之control处理

进行数据初步处理(perl) 统计amplicon的RC(read counts),并且相互overlap大于75%的amplicon合并起来 统计每个ampl...

55411
来自专栏机器学习实践二三事

一个验证码破解的完整演示

这篇博客主要讲如何去破解一个验证码,for demo我会使用一个完整的工程来做,从原始图片到最终的识别结果,但是破解大部分的验证码其实是个很费力的活,对技术要求...

5548
来自专栏量化投资与机器学习

七步理解深度学习

原文链接请点击阅读原文。 There are many deep learning resources freely available online,but...

1989

扫码关注云+社区