PCA(Principal Component Analysis)

一、指导思想

  • 降维是实现数据优化的手段,主成分分析(PCA)是实现降维的手段;
  • 降维是在训练算法模型前对数据集进行处理,会丢失信息
  • 降维后,如果丢失了过多的信息,在我们不能容忍的范围里,就不应该降维。
  • 降维没有正确与否的标准,只有丢失信息的多少;
  • 降维的方式本质是有无穷多种的。我们期望在其中找到“最好”,或者说“丢失信息”最少的那一种;
  • PCA算法使用的是:降维后保持原始数据的方差的多少,来衡量降维后保持原始数据了多少信息;
  • 对于降维算法来说,这个衡量标准不是固定的,有其他降维方法使用其他的衡量标准。
  • 降维不等于降噪,降噪只是降维可能的结果,但不是一定的结果,尤其是原始信息完全没有噪音的时候。
  • 每个主成分都解释了原始数据方差的一部分。每个主成分解释的方差量越大,说明这个主成分越重要。
  1. 可以这样理解:一个数据的主成分反应了一个新的降维后的特征空间,数据被降维后得到新的数据集,新的数据集在降维后的空间内的分布,只反应了原始数据在原始特征空间中的分布的一部分情况;
  • 信息损失依然可以表达原有信息是很常见的事情。如果举一个抽象的例子,我们日常在互联网中用的图像压缩算法,比如jpg等,都是通过减少图像原有信息达到让图片文件更小的目的。利用的就是即使损失了信息,对原有图像主体信息的影响是不大的。但是压缩的太狠了,就会慢慢让整个图像越来越模糊,最终导致完全看不出是什么东西,这就是信息损失的太大了。
  • PCA不是进行特征选择的过程。PCA的降维过程,是将原始的高维空间,映射到一个低维空间。低维空间的每个维度,是原始高维空间的一个线性组合。这使得PCA后的低维空间,每一个维度丧失了语意。如果对于你的应用来说,保持特征语意很重要,又要减少特征量,是不建议使用PCA的:)
  • 思路:
  1. 降维的目的:优化数据集;
  2. 得到优化的数据集的前提:找到最佳的降维空间;
  3. 满足最佳的降维空间的条件:降维后的数据集的方差最大;
  4. 使方差最大的优化方法:梯度上升法;
  • 其它
  1. 不能拿现实中的物理空间,类比数据中的特征空间;
  2. n 维向量(或者 n 维数组)只在数学中表示,n 维空间只是形象的表示数据间的关联;
  3. 在物理空间中,四维空间(时空,空间 + 时间维度)已经是极限了;
  • 疑问
  1. 怎么判断要不要降维?
  2. 或者说怎么判断数据集适不适合降维?
  3. 或者说这些数据集怎么了,要降低它的维度?
  4. 怎么判断降维后有没有丢失关键数据?是通过降维后的数据训练处的模型的效果吗?
  5. 降维过程中,降维后的数据集的方差的求解公式中:向量 w 表示什么?
  6. 降维实例中,二维特征空间降成一维(一条直线),w 是该直线上的一个单位向量,感觉是方便计算方差而引入的,为什么可以直接推广到 n 维特征空间的降维中使用?
  • 答疑
  1. 问题1、2、3:
  2. 问题5:向量 w 就是数据集的一个主成分;

二、对 PCA 的理解

  • 名称:主成分分析算法;
  • 类型:非监督机器学习算法;
  • 主要功能:主要用于数据的降维;
  • 其它应用:数据可视化、去燥
  • 不仅在机器学习领域应用,也是统计学领域的重要应用
  • 数据降维的意义
  1. 从数据中发现更便于人类理解的特征;
  2. 方便数据可视化,使人类更容易理解可视化后的数据;
  3. 提高算法的运行效率;
  4. 有时,数据经过主成分分析以后再用于机器学习算法,数据的被识别率更好;

三、降维

 1)实例说明数据的降维

  • 二维特征空间的样本点
  • 方案(一):抛除特征一,降维后的特征关系
  • 方案(二):抛除特征二,降维后的数据关系
  • 两种降维方案,方案(二)更好
  1. 方案(二)降维后的样本点映射到坐标轴上,点与点之间的距离较大,说明样本点之间具有较高的可区分度;
  2. 更好的保持了原来的点与点(二维特征空间里的样本点)之间的距离;

 2)PCA 方法降维

  • 疑问:有没有更好的降维方案?
  • 什么叫更好:使样本的区分度更加明显
  • 方案(三)
  • 降维后的样本点分布
  • 优点:
  1. 所有的样本点的差异(或者距离),更趋近原来二维特征空间内样本点的差异(或距离);
  2. 与方案(一)、方案(二)相比,样本的区分度更加明显;

 3)降维后的特征空间

  • 最佳的降维特征空间满足的条件:映射到降维特征空间后的数据集的方差最大时,对应的降维空间最佳;
  1、分析
  • 问题(一):怎么找到这样的一条直线?(让降维后的样本间间距最大)
  • 在二维特征空间中,这条直线就是降维后的特征空间;
  • 问题(二):如何定义样本间间距?
  • 方案:使用方差(Variance)表示样本间的距离;
  • 方差:描述样本(数据)在空间内(可以是一维、二维、多维空间)分布疏密的指标,方差越大,样本之间越稀疏;方差越小,样本之间越紧密;
  1. 方差公式: 
  2. xi:m 个数据中的第 i 个数据;
  2、二维特征空间降维成一维特征空间
  • 思路:找到一个轴,得到样本空间的所有点映射到这个轴后,方差最大(表示样本间间距越大);
  • 具体操作步骤:

   A、第一步:将每一种特征的均值归为 0 (此过程称为 demean)

    # 样本分布没变,移动坐标轴位置,得到样本在每一个维度的均值都为 0 ;(见下图)

    # 具体操作:将数据集的每一种特征的值减去本列特征的均值

    # 公式变形:,均值

            # Xi :值映射到新的坐标轴上之后,得到的新的样本;

   B、第二步:求一个轴的方向 w = (w1 , w2),使得所有的样本映射到 w 以后,有:

        # 轴:新的特征空间;

        # w:新的特征空间的第一主成分;

最大;

      # 公式变形后:

  1. Var(Xproject):映射后的样本的方差;
  2. Xpreject:映射后的数据集;
  3. || Xpreject(i) ||:映射后的数据集的第 i 个样本向量的模;(映射时,在原始特征空间内,将样本点看做向量)

  # 注:此直线,不是线性回归的线性模型直线,本例只是简化为对二维空间内的只有两个特征的样本数据进行降维;

  # 线性回归中,直线模型是样本的 n 维特征和样本对应的输出值之间的关系

 4)映射过程

  • 映射过程就是一个向量投影到另一个向量上

  1. w = (w1, w2):新的特征空间的主成分(此例中指,特征空间中,目标轴的方向);
  2. X(i):特征空间中,数据集的第 i 个样本;
  3. X(i) =  ( X1(i),  X2(i) ):特征空间中,样本点也可以看做一个向量;
  4. (Xpr1(i),  Xpr2(i)):映射后的样本点的特征值;
  • 计算映射后的样本特征

   # 其实就是向量之间的运算;

  

  1. θ:两向量的夹角;
  • 公式变形
  1. 此公式是针对本例中的两个特征的样本;
  2. 称此向量 w 是数据集的一个主成分;

四、n 维特征空间降维

 1)公式推广

  • 推广到 n 为空间(一个样本有 n 个特征):
  • 变形公式
  1. X(i).dot(w):括号内的相加的式子,就是样本与主成分的向量积;
  • 再次变形,得最终公式
  1. X(i):第 i 个样本;
  2. w:主成分;

 2)分析

  1. 降维的目的:优化数据集;
  2. 降维的手段:主成分分析法(PCA);
  3. 优化结果:得到新的数据集  Xpreject
  4. PCA的手段:优化目标函数,使得其最大时对应的;

五、其它降维算法

  • MDS,Isomap,LLE,LDA,t-SNE

机器学习:PCA(基础理解、降维理解)的更多相关文章

  1. [机器学习 ]PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做

    PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做 今天自己实现PCA,从网上看文章的时候,发现有的文章没有搞清楚把SVD(奇异值分解)实现和EVD(特征值分解) ...

  2. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  3. 理解Javascript_01_理解内存分配

    理解Javascript_01_理解内存分配 转载自:http://www.cnblogs.com/fool/archive/2010/10/07/1845226.html   在正式开始之前,我想先 ...

  4. 机器学习: t-Stochastic Neighbor Embedding 降维算法 (一)

    Introduction 在计算机视觉及机器学习领域,数据的可视化是非常重要的一个应用,一般我们处理的数据都是成百上千维的,但是我们知道,目前我们可以感知的数据维度最多只有三维,超出三维的数据是没有办 ...

  5. pyhton机器学习入门基础(机器学习与决策树)

    //2019.07.26#scikit-learn数据挖掘工具包1.Scikit learn是基于python的数据挖掘和机器学习的工具包,方便实现数据的数据分析与高级操作,是数据分析里面非常重要的工 ...

  6. 机器学习实战基础(二十三):sklearn中的降维算法PCA和SVD(四) PCA与SVD 之 PCA中的SVD

    PCA中的SVD 1 PCA中的SVD哪里来? 细心的小伙伴可能注意到了,svd_solver是奇异值分解器的意思,为什么PCA算法下面会有有关奇异值分解的参数?不是两种算法么?我们之前曾经提到过,P ...

  7. 机器学习实战基础(二十四):sklearn中的降维算法PCA和SVD(五) PCA与SVD 之 重要接口inverse_transform

    重要接口inverse_transform  在上周的特征工程课中,我们学到了神奇的接口inverse_transform,可以将我们归一化,标准化,甚至做过哑变量的特征矩阵还原回原始数据中的特征矩阵 ...

  8. 机器学习实战基础(二十一):sklearn中的降维算法PCA和SVD(二) PCA与SVD 之 降维究竟是怎样实现

    简述 在降维过程中,我们会减少特征的数量,这意味着删除数据,数据量变少则表示模型可以获取的信息会变少,模型的表现可能会因此受影响.同时,在高维数据中,必然有一些特征是不带有有效的信息的(比如噪音),或 ...

  9. 机器学习实战基础(二十):sklearn中的降维算法PCA和SVD(一) 之 概述

    概述 1 从什么叫“维度”说开来 我们不断提到一些语言,比如说:随机森林是通过随机抽取特征来建树,以避免高维计算:再比如说,sklearn中导入特征矩阵,必须是至少二维:上周我们讲解特征工程,还特地提 ...

随机推荐

  1. 模型融合之blending和stacking

    1. blending 需要得到各个模型结果集的权重,然后再线性组合. """Kaggle competition: Predicting a Biological Re ...

  2. python的一些内置函数

    最近看到一些人写的文章里有提到python的描述符__get__,__set__,__del__. 这里我也小小研究了一下,除了这3个之外还加上过程中学习的几个,比如__call__等. __get_ ...

  3. how to use Inspector in fiddler

    打开fiddler之后,会自动捕获本机的http请求,以列表的形式显示在左侧 双击左侧列表中的某一个request,右侧会自动切换到Inspectors窗口. 右侧上半部分是request的raw G ...

  4. js替换字符串中的数字或非数字

    替换字符串中的数字 var text = "abc123"; text=text.replace(/[0-9]/ig,""); 此时得到的text为" ...

  5. Apache Phoenix基本操作-2

    1. 如何映射一个Phoenix的表到一个Hbase的表? 你可以通过Create table/create view DDL语句在一个已经存在的hbase表上创建一个Phoenix表或者视图.对于C ...

  6. ztree高级实例(原创)

    最近项目中需要设计一个类似收藏夹的功能保存用户常用的东西,需要客户体验好,所以想到了以前用过的ztree. 在用ztree的过程中遇到一些问题,在此记录,提醒自己,也帮助遇到相同情况的同行们. 1.至 ...

  7. linux中动态链接库的创建与使用

    LINUX系统中动态链接库的创建与使用 http://www.cnblogs.com/ardar/articles/357321.html 正常C源文件编写,编译时-shared即可得到SO, gcc ...

  8. Python之爬虫总结

    一.爬虫之requests a.介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3)     b.注意:re ...

  9. 使用BeanUtils方法拷贝不上问题

    最近在项目中,发现BeanUtils.copyProperties方法拷贝bean属性时候,有的时候会失效.最后发现是由于项目中引用了spring和common两个包,都有BeanUtils方法,错误 ...

  10. window上脚本到linux上不能用

    window上的脚本一定要用dos2unix 文件名处理一下