机器学习实战之主成分分析(PCA)

如果人类适应了三维,去掉一个维度,进入了二维世界,那么人类就会因为缺少了原来所适应的一个维度,而无法生存。 ——《三体》

在许多科幻电影中,有许多降维的例子。在《十万个冷笑话2》(可能只有萌新看过)中,大boss将主角降维到二维,就成了纸片人,进而失去了战斗能力;降维到一维,就变成了线条,这就是降维打击。

说直白点,降维就是将维度降低。在机器学习中,降维常常用来做数据的预处理。为什么要对数据进行降维了?那来从数据本身说起。

  • 大数据时代,数据冗余,维度高。例如个人用户信息,存储了身份证,同时也存储了生日,就造成了冗余。
  • 数据维度有相关性。例如,人脸头像具有对称性,去掉一般的像素点也是没有太大问题的。
  • 数据有噪声。噪声对学习会产生干扰,去掉噪声可以提高算法的精度。

那如何进行降维了?难道要随机去掉一些维度吗?答案是否定的。直接去掉维度会导致数据信息的大量确实。主成分分析(PCA)技术可以尽量保证数据信息少量减小的情况下,进行维度的缩减。

PCA原理

首先看下图,这是一个二维数据,有三个类别(不同颜色表示)。我们希望将其降到一维,那是按u1方向投影还是按u2方向呢。明显可以看出,u1比u2好。

推导

为什么说u1比u2好呢?我们可以基于两点进行解释。

  • 样本点到这个直线的距离足够近。
  • 样本点在这个直线上的投影能尽可能的分开。

基于这两个原则,进行公式推导(这里进行省略),可以得到下面公式。XXT为样本的协方差矩阵。

流程

根据公式可以得到PCA的流程:

  • 去除平均值
  • 计算协方差矩阵
  • 计算协方差矩阵的特征值和特征向量
  • 特征值从大到小排序
  • 保留最上面的N个特征向量
  • 将数据转换到N个特征向量构建的新空间

PCA代码

数据情况

首先编写代码读入数据,可以看出其为二维数据。

from numpy import *

def loadDataSet(filename):
    dataMat = []
    fr = open(filename)
    for line in fr.readlines():
        curLine = line.strip().split('\t')
        fltLine = list(map(float,curLine))
        dataMat.append(fltLine)
    return mat(dataMat)
算法代码

通过上述的算法流程,对代码进行编写,最后可视化降维后的结果。

def pca(dataMat, topNfeat=9999999):
    meanVals = mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals
    covMat = cov(meanRemoved, rowvar=0)
    eigVals,eigVects = linalg.eig(mat(covMat))
    eigValInd = argsort(eigVals)
    eigValInd = eigValInd[:-(topNfeat+1):-1]
    redEigVects = eigVects[:,eigValInd]
    lowDataMat = meanRemoved * redEigVects
    reconMat = (lowDataMat * redEigVects.T) + meanVals
    return lowDataMat, reconMat

算法优缺点

  • 优点:降低数据复杂度
  • 缺点:有可能损失有用信息

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=25flb1mm7rtws

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

计算机视觉中,目前有哪些经典的目标跟踪算法?

2546
来自专栏CDA数据分析师

MIT 用 AI 实现自动抠图,轻松打造效果惊艳的特效电影

随着电影越来越关注 CGI,电影制作人必须更加擅长「合成」,即将前景和背景图像融合,比如将演员放在飞机或行星上,或者放在电影《黑豹》里瓦坎达这样的虚构世界中。

432
来自专栏人工智能

6种机器学习算法要点

本文旨在为人们提供一些机器学习算法,这些算法的目标是获取关于重要机器学习概念的知识,同时使用免费提供的材料和资源。当然选择有很多,但哪一个是最好的?哪两个互相补...

2039
来自专栏深度学习之tensorflow实战篇

LDA详解:自然语言处理

      LDA,其实有两种含义,一种是统计学中的分析方法:线性判别分析(Linear Discriminant Analysis),一种概率主题模型:隐含...

3198
来自专栏AI科技评论

CVPR 2018 中国论文分享会 之「人类、人脸及3D形状」

本文为2018 年 5 月 11 日在微软亚洲研究院进行的 CVPR 2018 中国论文宣讲研讨会中最后一个Session ——「Human, Face and...

1152
来自专栏SIGAI学习与实践平台

人脸识别中的活体检测算法综述

原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的。

3494
来自专栏Tencentcloud

几何与学习的交汇点

通常来说,只给出一个2D图像,人类就能够毫不费力地推断出底层场景的丰富3D结构。由于从2D推断3D本身是一个模糊的任务。

1.1K13
来自专栏机器之心

斯坦福博士韩松毕业论文:面向深度学习的高效方法与硬件

3199
来自专栏语言、知识与人工智能

【腾讯知文】任务型对话之语言理解

本文的重点将介绍传统算法框架中语言理解模块的意图与槽位的联合模型。

9.6K5
来自专栏机器之心

ECCV 2018 | 给Cycle-GAN加上时间约束,CMU等提出新型视频转换方法Recycle-GAN

作者:Aayush Bansal、Shugao Ma、Deva Ramanan、Yaser Sheikh

801

扫码关注云+社区