美文网首页RNA-seq
【编程】三分钟搞懂PCA主成分分析!

【编程】三分钟搞懂PCA主成分分析!

作者: zhyuzh3d | 来源:发表于2020-02-10 02:31 被阅读0次

    欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


    主成分析PCA

    Principal components analysis,简单说就是物体的分类来说,它们的哪些属性更重要,这些重要的属性就叫做主要成分Principal components 。比如对于人的身材来说,身高、体重、体脂率这些肯定是主要成分,年龄、月收入这些肯定不是。

    但数学运算根本不懂这些现实道理,有没有办法直接用数学方法,把那些对分类影响最大的属性找出来呢?PCA主成分析就是用数学运算来判断哪些属性更重要,哪些不重要,——它根本不管你是要区分胖瘦还是区分贫富。

    方差

    三个人,韩梅梅、李雷和小明,体重分别是40,50,60。平均数mean就是160,那么方差Variance就是
    Var(三人体重)=(150-160)^2+(160-160)^2+(170-160)^2

    所以方差其实是和平均数的差的平方之和,方差其实是差、方、和

    更多数字的方差也是一样,如下图,中间红线是水平方向7个点的平均值,方差就是蓝色虚线长度的平方和,反正要平方也就无所谓正负。

    方差公式就是:

    Var(x)=d_1^2+d_2^2+d_3^2+...d_n^2

    什么样的分布数据最好用?能帮助我们进行分类的数据就是好数据。

    如上图所示,蓝色A的分布情况最好,一眼就能开出平均值左右分成两类;橙色的B也不错,但怎么划分就看不大懂了;绿色C就糟糕了,都挤在中间,没法划分。但也不要觉得绿色中间那一堆有问题,去掉两端的两个,把中间这一堆横向拉长舒展开,就是红色D的情况,其实并不比B差。

    用数学表示就是A的方差最大,B其次,C最小。结论就是,在一般情况下,对于一个属性的数据分布来说,方差越大越好分类

    那么两个属性相比,怎么判断哪个数据更好一些?

    协方差

    把样本当做圆点,两个属性分别对应xy轴,画到二维坐标上,这样计算方差用的d就分别落到了横向和竖向的坐标轴上面。如下图所示。

    协方差Covariance就是每个点P对应的蓝色虚线乘以绿色虚线,然后把得到的所有乘积再相加。公式如下,其中\bar{x}是横向平均数,\bar{y}是竖向平均数,即图中所示短红线:

    Var(x)=(P_{1x}-\bar{x})(P_{1y}-\bar{y})+(P_{1x}-\bar{x})(P_{1y}-\bar{y})...+(P_{nx}-\bar{x})(P_{ny}-\bar{y})
    即:
    Var(x)=d_{1x}*d_{1y}+d_{1x}*d_{1y}...d_{nx}*d_{ny}
    如果xy是同一个属性的话就变成了方差d_{1x}^2+d_{1x}^2+...d_{nx}^2

    不过说这些都没用,我们也不用讨论到底是蓝色虚线加起来大还是绿色虚线加起来大,因为它们两个肯定都不是最大的,谁是最大呢?

    坐标系变换

    “横看成岭侧成峰”,对于一排数据来说,高低起伏的山峦从侧面看成一座秃山那就是废了。对分类影响比较大的一定是既成簇又分团的数据。

    观察角度不好就是千手观音,角度好了才能看出高矮胖瘦。比如下面这个图上的五个采样点,无论是横轴和纵轴看,分布的都比较均匀。但如果沿着y'方向看,就会发现这5个点在x'方向上投影的灰色圆点呈簇分布,而且在x'方向上各个点的虚线也都比蓝色或者绿色虚线长,也就是方差比较大。

    所以说,不要拘泥于现有数据的角度来观察,要变换到方差最大的角度来分析。现有的数据角度未必是对分类产生最大影响的数据,那条斜着的x'属性才是影响分类的主要成分Principal components,一般叫做PC1。和PC1垂直的y'就是PC2。

    从这个旋转后的坐标可以更加清晰的看出这些点的分布主要由PC1决定。而PC1和PC2影响力的比例也可以用各自方向上的方差来计算。

    三维坐标

    同样对于x,y,z三维坐标中的一团样本点,像云朵一样分布,我们仍然可以找到贯穿整个云朵的最长的那条轴线,以及和它互相垂直的另外两条轴线。这样我们就针对x,y,z变换得到新的x',y',z'即PC1、PC2、PC3。

    主成分分析的意义

    其实某种意义上讲,x'y'就是原来x,y的另外一种角度的表现形式。

    得到主成分轴向(属性)的目的就是为了可以舍弃其他次要的成分,当然,主成分属性也是优于其他成分的属性,缺点就是这个属性没法用语言来解释。

    假象我们有1000个属性数据,实在太多了,这时候就可以用主成分分析。把它们放到一千维的坐标系里面,每个属性占一维。然后在这个复杂空间中的样本云中找出贯穿其中方差最长的那个方向,它就是PC1,再找出方差其次长的PC2,PC3,...PC1000。

    原本1000个属性我们不知道谁重要谁不重要,但现在我们知道PC1最重要,PC2其次...所以我们就可以只留下前面比较重要的PC1到PC10,其余的900个都忽略掉。注意这里PC1并不是和第一个属性对应的,甚至1000个新PC属性和原来1000个属性之间没有一一对应关系,谁也不知道在这1000维的坐标空间中PC1这个箭头指向哪里,更没法说它是和身高、体重、年龄那个属性对应了。

    附注:在上面的二维坐标系中,x'一定优于y'吗?似乎并不见得,虽然x'看上去的确比y'长太多,方差也大很多。但还是应该把它们的分布放到同等的范围内进行比较,如下图所示,当把x'横向缩短到y'范围内之后如下图所示,y'的成簇情况要比x'还好一点点,方差也大一点。后续再仔细学习和验证吧。另外,开始也没有将所有属性(身高、体重、年龄等)数值都统一到同样范围(归一化),但似乎并不是这个问题的原因。


    欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】


    每个人的智能新时代

    如果您发现文章错误,请不吝留言指正;
    如果您觉得有用,请点喜欢;
    如果您觉得很有用,欢迎转载~


    END

    相关文章

      网友评论

        本文标题:【编程】三分钟搞懂PCA主成分分析!

        本文链接:https://www.haomeiwen.com/subject/sdhgxhtx.html