降维:主成分分析(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 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

【源码分享】机器学习之Python支持向量机

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 前言 在写代码前,先简单的过一下SV...

35410
来自专栏AI启蒙研究院

【通俗理解】凸优化

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

【深度】监督&强化学习算法在A股中的应用

2714
来自专栏个人分享

Kmeans算法学习与SparkMlLib Kmeans算法尝试

K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归...

711
来自专栏华章科技

数据挖掘150道试题,测测你的专业能力过关吗

2.以下两种描述分别对应哪两种对分类算法的评价标准?(A) (a)警察抓小偷,描述警察抓的人中有多少个是小偷的标准。 (b)描述有多少比例的小偷给警察抓了的标准...

421
来自专栏YoungGy

无损卡尔曼滤波UKF与多传感器融合

非线性系统状态估计是一大难点。KF(Kalman Filter)只适用于线性系统。EKF(Extended Kalman Filter)利用泰勒展开将非线性系统...

3308
来自专栏量子位

码农の带娃绝技:TensorFlow+传感器,200美元自制猜拳手套

王小新 编译自 Google Cloud Blog 量子位 出品 | 公众号 QbitAI 你们程序员啊,连带娃都这么技术流…… 今年夏天,谷歌云负责维护开发者...

3425
来自专栏AI科技大本营的专栏

XGBoost参数调优完全指南(附Python代码)

作者 | Aarshay Jain 简介 如果你的预测模型表现得有些不尽如人意,那就用XGBoost吧。XGBoost算法现在已经成为很多数据工程师的重要武器。...

6526
来自专栏AI研习社

机器学习算法究竟需要试验多少次,才能有效反映模型性能?

编者按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI 研习社编译。文中相关链接详见文末“阅...

2596
来自专栏算法channel

机器学习|聚类算法之DBSCAN

DBSCAN,全称:Density-Based Spatial Clustering of Applications with Noise,是一个比较有代表性的...

3319

扫码关注云+社区