利用PCA进行数据降维
一、进行数据降维的原因
- 1.使得数据更加容易使用
- 2.降低很多算法的计算开销
- 3.去除数据中的噪声(例如使用自编码器AE可以给图片进行降噪处理)
- 4.便于可视化
二、常见的降维技术
- 在已标注和未标注的数据上都有降维技术。下面主要关注未标注数据上的降维技术,此技术也可以使用在已标注的数据上。
- 1.主成分分析PCA:在PCA中,数据从原来的坐标系中转换到新的坐标系中,**新的坐标系的选择是由数据本身决定的。**第一个新的坐标轴选择的是原始数据中方差最大的方向;第二个新坐标轴的选择是与第一个坐标轴正交且具有最大方差的方向。此过程一直重复,重复次数为原始数据中特征的数量。
- 2.因子分析FA:在因子分析中,假设在观察数据的生成中有一些观察不到的隐变量。假设观察数据是这些隐变量和某些噪声的线性组合。那个隐变量的数据可能比观察数据的数目少,也就是说通过找到隐变量,就可以实现数据的降维。
-3.独立成分分析ICA:ICA假设数据是从N个数据源生成的。假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而PCA中只假设数据是不相关的,如果数据源的数量小于观察数据的数量,则可以实现降维的过程。
三、PCA的降维过程
- 1.原始的数据集可视化如图所示:
- 2.如果要求画出一条直线,这条直线能尽可能覆盖上图中的点,,那么最长的线可能是哪条?显然是下图的情况。在PCA中,我们对数据的坐标进行了旋转,该旋转的过程取决于数据的本身。第一条坐标轴旋转到覆盖数据的最大方差位置,即下图中的直线B。数据的最大方差给出了数据的最重要的信息。在选择了覆盖数据最大差异性的坐标轴后,开始旋转第二条坐标轴。假设该坐标轴与第一条坐标轴正交,它就是覆盖数据次大差异性的坐标轴。
- 3.具体的过程:第一个主成分是从数据差异性最大(即方差最大)的方向提取出来;第二个主成分的方向则来自于数据差异性次大的方向,并且该方向与第一个主成分方向正交。通过数据集的协方差矩阵及特征值的分析,就可以得到这些主成分的值。一旦得到了协方差矩阵的特征向量,就可以保留最大的N个值。这些特征向量也给出了N个最重要特征的真实结构,可以通过将数据乘上这N个特征向量而将它转换到新的空间中。
四、PCA的代码实现
```#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date : 2019-05-19 15:30:22# @Author : cdl (1217096231@qq.com)# @Link : https://github.com/cdlwhm1217096231/python3_spider# @Version : $Id$from numpy import *# 加载数据集def loadDataSet(fileName, delim='\t'):fr = open(fileName)stringArr = [line.strip().split(delim) for line in fr.readlines()]datArr = [list(map(float, line)) for line in stringArr]return mat(datArr)# PCA算法def pca(dataMat, topNfeature=9999999):meanVals = mean(dataMat, axis=0) # 计算原始数据集的均值meanRemoved = dataMat - meanVals # 减去原始数据集的均值covMat = cov(meanRemoved, rowvar=0) # 计算协方差矩阵eigVals, eigVects = linalg.eig(mat(covMat)) # 求特征值和特征向量eigValInd = argsort(eigVals) # 对特征值进行从小到大排序# 根据特征值排序结果的逆序,可以得到topNfeature个最大特征向量eigValInd = eigValInd[:-(topNfeature + 1):-1]redEigVects = eigVects[:, eigValInd] # 上面的特征向量将构成后面对数据进行转换的矩阵lowDDataMat = meanRemoved * redEigVects # 降维后的数据集reconMat = (lowDDataMat * redEigVects.T) + meanValsreturn lowDDataMat, reconMatdef replaceNanWithMean():dataMat = loadDataSet("E:\\Code\\local_code\\机器学习实战\\DataSet\\secom.data", ' ')numfeatures = shape(dataMat)[1]for i in range(numfeatures):meanVal = mean(dataMat[nonzero(~isnan(dataMat[:, i].A))[0], i])dataMat[nonzero(isnan(dataMat[:, i].A))[0], i] = meanValreturn dataMat```
利用PCA进行数据降维相关推荐
- PCA图像数据降维及重构误差分析实战并使用TSNE进行异常数据可视化分析
PCA图像数据降维及重构误差分析实战并使用TSNE进行异常数据可视化分析 目录 PCA图像数据降维及重构误差分析实战并使用TSNE进行异常数据可视化分析</
- chapter13 机器学习之利用PCA简化数据
LDA: LDA的全称是Linear Discriminant Analysis(线性判别分析),是一种supervised learning.有些资料上也称为是Fisher's Linear Dis ...
- 数据降维之PCA(主成分分析)
本文代码及数据集来自<Python大数据分析与机器学习商业案例实战> 如果特征变量的数量非常多(如成百上千个特征变量),我们往往需要进行数据降维.降维的方法主要有选择特征和抽取特征两种:选 ...
- 手把手带你玩转Spark机器学习-使用Spark进行数据降维
系列文章目录 手把手带你玩转Spark机器学习-专栏介绍 手把手带你玩转Spark机器学习-问题汇总 手把手带你玩转Spark机器学习-Spark的安装及使用 手把手带你玩转Spark机器学习-使用S ...
- 机器学习——数据降维
文章目录 数据降维 1 维度灾难与降维 2 主成分分析 2.1 PCA原理 2.2 PCA算法 2.3 PCA算法实验 3 SVD降维 4 核主成分分析降维 总结 数据降维 数据降维又称维数约简,就是 ...
- ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例
ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 目录 基于鸢尾花(Iris)数据集利用多种降维算法(PCA ...
- 数据降维(PCA、KPCA、PPCA)及C++实现
1.何为数据降维 1.1维数灾难:往往满足采样条件所需的样本数目巨大.样本稀疏.距离计算困难. 1.2降维:利用数学变换将原始高维属性空间转变为低维"子空间",即在高维采样数据中提 ...
- 机器学习实战(十一)利用PCA来简化数据
第十三章 利用PCA来简化数据 13.1 降维技术 13.1.1 主成分分析(PrincipalComponentAnalysis,PCA) 13.1.2 因子分析(Factor Analysis) ...
- 如何利用PCA(Principal component analysis)来简化数据
本博文的的内容为以下: 降维技术 主成分分析(PCA) 对半导体数据进行降维处理 降维(dimensionality reduction)的目标就是对输入的数目进行消减,由此剔除数据中的噪声并提高机器 ...
最新文章
- 计算机网络---物理层
- python中.append()和.extend()的区别
- UCloud UFile——对象存储UFile SDK基本使用
- 第一百一十三期:去伪存真,区块链应用到底能解决什么实际问题?
- LeetCode 1213. 三个有序数组的交集(哈希set)
- yum安装jdk1.8
- LeetCode 63. Unique Paths II
- 同学孩子上985大学,每月生活费5000元,大家认为合适吗?
- 蓝牙nrf52832的架构和开发(转载)
- android刷新时的圆形动画_Android自定义view渐变圆形动画
- 在MOSS2007中使用收集反馈工作流
- (10)Spring框架----AOP面向切面编程的实现原理
- VB类计算机专业毕业设计题目
- 西游记中唐僧禅心坚定不好女色
- §1 打开百度地图的大门——注册百度地图开发者账户与创建应用
- ECHARTS的基本使用:柱状图、折线图、饼图等
- 杜比、DTS、PCM、A-C3、THX、SDDS音效介绍(转贴)
- unity下图灵机器人的使用
- SQL Pivot 行转列
- EOJ Monthly 2019.3 (based on March Selection) -D .宇恒棋