Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用PCA来降维

利用PCA来降维

作者头像
用户6021899
发布于 2019-10-09 08:47:20
发布于 2019-10-09 08:47:20
47800
代码可运行
举报
运行总次数:0
代码可运行

想象这样一种场景:我们通过电视直播观看足球比赛,电视屏幕大概有200万像素,假设我们关注的是任意时刻足球的位置。在这一场景中,人们实时地将屏幕上的百万级像素转换成了三维坐标。这个过程就是一种降维(dimensionnality reduction)。

降维是机器学习中很重要的一种思想。在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为“ 维度灾难 ”。另外在高维特征中容易出现特征之间的线性相关,这也就意味着有的特征是冗余存在的。基于这些问题,降维思想就出现了。

降维通常有以下原因:

  • 去除冗余数据,使数据集更易于使用
  • 去除噪音
  • 降低计算开销
  • 使得结果直观易懂

在已标注与未标注的数据上均可以应用降维技术。常见的降维算法有:

  • 主成分分析(Principle Component Analysis, PCA)。在PCA中,数据从原来的坐标系转换到了新坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原来数据中方差最大的方向,第二个坐标轴选择与第一坐标轴正交且具有最大方差的方向。该过程一直重复,我们会发现,大部分方差都包含在最前面的几个新坐标轴中。所以,我们可以忽略余下的坐标轴,即对数据进行了降维处理。
  • 因子分析(Factor Analysis)。在因子分析中,我们假设在原始数据中存在一些隐变量(latent variable)。假设原始数据是这些隐变量和某些噪声的线性组合,那么隐变量的数量可能比原始数据的特征数要少,也就是说通过找到隐变量就可以实现数据的降维。
  • 独立成分分析(Independent Component Analysis,ICA)。ICA假设数据是从N个数据源生成的,这一点和因子分析有些类似。假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而在PCA中只假设数据是不相关的。同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程。

在上述3种降维算法中,PCA 的应用最为广泛。本篇仅介绍PCA技术,PCA 算法的伪代码如下:

  1. 去除平均值
  2. 计算协方差矩阵
  3. 计算协方差矩阵的特征值和特征向量
  4. 将特征值从大到小排序
  5. 保留最上面的N个特征向量
  6. 数据转换到上述N个特征向量构建的新空间中。 示例代码基于如下的数据集来展示PCA算法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from numpy import *
from matplotlib import pyplot as plt
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)
    
def pca(dataMat, topNfeat=9999999):
    meanVals = mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals #remove mean
    covMat = cov(meanRemoved, rowvar=0)
    eigVals,eigVects = linalg.eig(mat(covMat))
    eigValInd = argsort(eigVals)            #sort, sort goes smallest to largest
    eigValInd = eigValInd[:-(topNfeat+1):-1]  #cut off unwanted dimensions
    redEigVects = eigVects[:,eigValInd]       #reorganize eig vects largest to smallest
    
    #降维后新坐标系的数据
    lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions
    
    #降维后的在原始坐标系下的数据
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    return lowDDataMat, reconMat
    
def replaceNanWithMean():
    datMat = loadDataSet('secom.data', ' ')
    numFeat = shape(datMat)[1]
    for i in range(numFeat):
        meanVal = mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i]) #values that are not NaN (a number)
        datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal  #set NaN values to mean
    return datMat

dataMat = loadDataSet("testSet3.txt")
fig = plt.figure()
plt.title("PCA")
ax = fig.add_subplot(2,1,1)
ax.scatter(array(dataMat[:,0]), array(dataMat[:,1]), s=20, color="b")
lowDMat, reconMat = pca(dataMat, 1)
print(shape(lowDMat))
ax.scatter(reconMat[:,0].flatten().A[0], reconMat[:,1].flatten().A[0], marker='o', s = 15, c='r')
ax = fig.add_subplot(2,1,2)
ax.scatter(lowDMat.flatten().A[0], zeros(lowDMat.shape[0]), s=15, c="g")
plt.show()

该数据集降维后很容易利用决策树进行分类。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《机器学习实战》(十三)—— PCA
http://blog.csdn.net/u011239443/article/details/77363466
小爷毛毛_卓寿杰
2019/02/13
5600
《机器学习实战》(十三)—— PCA
【说站】python中PCA的处理过程
以上就是python中PCA的处理过程,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/24
4730
简单易学的机器学习算法——主成分分析(PCA)
       对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作。降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低。降维的操作可以理解为一种映射关系,例如函数
felixzhao
2019/02/13
9520
简单易学的机器学习算法——主成分分析(PCA)
【机器学习实战】第13章 利用 PCA 来简化数据
本文介绍了降维技术及其在机器学习中的应用,包括主成分分析(PCA)、独立成分分析(ICA)、奇异值分解(SVD)等方法。同时,本文还介绍了降维技术在数据挖掘、自然语言处理、计算机视觉等领域的应用案例。
片刻
2018/01/05
1.1K0
【机器学习实战】第13章 利用 PCA 来简化数据
算法理论+实战之PCA降维
如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法:
lyhue1991
2020/07/20
1.3K0
算法理论+实战之PCA降维
R语言 主成分分析PCA(绘图+原理)
PCA 是一种较为常用的降维技术,PCA 的思想是将n维特征映射到k维上,这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征。在 PCA 中,数据从原来的坐标系转换到新的坐标系下,新的坐标系的选择与数据本身是密切相关的。其中,第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选取的是与第一个坐标轴正交且具有最大方差的方向,依次类推,我们可以取到这样的k个坐标轴。
拴小林
2021/05/31
14.3K0
R语言 主成分分析PCA(绘图+原理)
12种降维方法终极指南(含Python代码)
你遇到过特征超过1000个的数据集吗?超过5万个的呢?我遇到过。降维是一个非常具有挑战性的任务,尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠——数据量越大,分析结果越可信;也是一种诅咒——你真的会感到一片茫然,无从下手。
zenRRan
2019/11/20
1.5K0
12种降维方法终极指南(含Python代码)
PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击!
今天是机器学习专题的第27文章,我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法。
TechFlow-承志
2020/07/02
3.2K0
机器学习(20)——数据降维为什么要降维?PCA原理LDA比较:
前言:正所谓每一个结果的出现都是一系列的原因导致的,当构建机器学习模型时候,有时候数据特征异常复杂,这就需要经常用到数据降维技术,下面主要介绍一些降维的主要原理 为什么要降维? 在实际的机器学习项目中,特征选择/降维是必须进行的,因为在数据中存在以下几个 方面的问题: 数据的多重共线性:特征属性之间存在着相互关联关系。多重共线性会导致解的空间不稳定, 从而导致模型的泛化能力弱; 高纬空间样本具有稀疏性,导致模型比较难找到数据特征; 过多的变量会妨碍模型查找规律; 仅仅考虑单个变量对于目标属性的影响可能忽略变
DC童生
2018/04/27
19.6K0
机器学习(20)——数据降维为什么要降维?PCA原理LDA比较:
降维方法(一):PCA原理
PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。 PCA的作用 你手上有一批数据,但是特征太多,你感觉数据太稀疏了 你选了一堆特征,但是感觉某些特征之间的相关性太高了,比如用户月消费预测的时候,你选了用户身高以及用户性别这两个特征,一般男生的身高比较高,你觉得特征有点冗余 你的小霸王内存不够,内存只有4个G,装不下太大的矩阵,但是你又不想减少训练数据,N
智能算法
2018/04/02
1.6K0
降维方法(一):PCA原理
数据挖掘实战:PCA算法
PCA 算法也叫主成分分析(principal components analysis),主要是用于数据降维的。 为什么要进行数据降维?因为实际情况中我们的训练数据会存在特征过多或者是特征累赘的问题,比如: 一个关于汽车的样本数据,一个特征是”km/h的最大速度特征“,另一个是”英里每小时“的最大速度特征,很显然这两个特征具有很强的相关性 拿到一个样本,特征非常多,样本缺很少,这样的数据用回归去你和将非常困难,很容易导致过度拟合 PCA算法就是用来解决这种问题的,其核心思想就是将 n 维特征映射到 k 维上
机器学习AI算法工程
2018/03/12
1.5K0
数据挖掘实战:PCA算法
机器学习基础与实践(三)----数据降维之PCA
写在前面:本来这篇应该是上周四更新,但是上周四写了一篇深度学习的反向传播法的过程,就推迟更新了。本来想参考PRML来写,但是发现里面涉及到比较多的数学知识,写出来可能不好理解,我决定还是用最通俗的方法解释PCA,并举一个实例一步步计算,然后再进行数学推导,最后再介绍一些变种以及相应的程序。(数学推导及变种下次再写好了) 正文:   在数据处理中,经常会遇到特征维度比样本数量多得多的情况,如果拿到实际工程中去跑,效果不一定好。一是因为冗余的特征会带来一些噪音,影响计算的结果;二是因为无关的特征会加大计算量,耗
Charlotte77
2018/01/09
9690
机器学习基础与实践(三)----数据降维之PCA
机器学习实战之主成分分析(PCA)
如果人类适应了三维,去掉一个维度,进入了二维世界,那么人类就会因为缺少了原来所适应的一个维度,而无法生存。 ——《三体》 在许多科幻电影中,有许多降维的例子。在《十万个冷笑话2》(可能只有萌新看过)中,大boss将主角降维到二维,就成了纸片人,进而失去了战斗能力;降维到一维,就变成了线条,这就是降维打击。 说直白点,降维就是将维度降低。在机器学习中,降维常常用来做数据的预处理。为什么要对数据进行降维了?那来从数据本身说起。 大数据时代,数据冗余,维度高。例如
罗罗攀
2018/07/03
3850
30分钟学会PCA主成分分析
PCA主成分分析算法(Principal Components Analysis)是一种最常用的降维算法。能够以较低的信息损失(以样本间分布方差衡量)减少特征数量。
lyhue1991
2020/07/20
2.8K0
30分钟学会PCA主成分分析
PCA算法原理及实现
众所周知,PCA(principal component analysis)是一种数据降维的方式,能够有效的将高维数据转换为低维数据,进而降低模型训练所需要的计算资源。
guichen1013
2020/08/13
1.2K0
PCA算法原理及实现
【机器学习】降维代码练习
PCA是在数据集中找到“主成分”或最大方差方向的线性变换。它可以用于降维。在本练习中,我们首先负责实现PCA并将其应用于一个简单的二维数据集,以了解它是如何工作的。我们从加载和可视化数据集开始。
黄博的机器学习圈子
2021/12/13
3180
【机器学习】降维代码练习
机器学习 学习笔记(15) 低维嵌入 主成分分析
在高维情形下出现的数据样本稀疏、距离计算困难等问题,是所有机器学习方法共同面临的严重障碍,被称为维数灾难。
2018/09/04
4.2K0
机器学习 学习笔记(15) 低维嵌入 主成分分析
【Python数据挖掘课程】PCA降维操作及subplot子图绘制
参考文章:http://blog.csdn.net/xl890727/article/details/16898315 参考书籍:《机器学习导论》 任何分类和回归方法的复杂度都依赖于输入的数量,但为了减少存储量和计算时间,我们需要考虑降低问题的维度,丢弃不相关的特征。同时,当数据可以用较少的维度表示而不丢失信息时,我们可以对数据绘图,可视化分析它的结构和离群点。 特征降维是指采用一个低纬度的特征来表示高纬度。特征降维一般有两类方法:特征选择(Feature Selection)和特征提取(Feature Extraction)。 1.特征选择是从高纬度的特征中选择其中的一个子集来作为新的特征。最佳子集是以最少的维贡献最大的正确率,丢弃不重要的维,使用合适的误差函数进行,方法包括在向前选择(Forword Selection)和在向后选择(Backward Selection)。 2.特征提取是指将高纬度的特征经过某个函数映射至低纬度作为新的特征。常用的特征抽取方法就是PCA(主成分分析)和LDA(线性判别分析) 。
Ai学习的老章
2019/04/10
1.3K0
【Python数据挖掘课程】PCA降维操作及subplot子图绘制
机器学习 学习笔记(5) 线性回归
给定数据集D={(x1,y1),(x2,y2),...,(xm,ym)},其中xi=(xi1;xi2;xi3;...;xid),yi是实数。线性回归试图学得一个线性模型以尽可能准确地预测实值输出标记。
2018/09/03
9070
机器学习 学习笔记(5) 线性回归
PCA详解
对于数组和Series而言,维度就是shape返回的数值shape中 返回了几个数字,就是几维。
皮大大
2021/03/02
1.7K0
相关推荐
《机器学习实战》(十三)—— PCA
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验