zoukankan      html  css  js  c++  java
  • 主成分分析PCA学习一条龙

    转自:https://yoyoyohamapi.gitbooks.io/mit-ml/content/%E7%89%B9%E5%BE%81%E9%99%8D%E7%BB%B4/articles/PCA.html

    https://www.jianshu.com/p/162bb4ea1b7f

    1.有什么功能?

    进行数据降维,从n个特征里选出k个最具有代表性的,使数据损失降到最小,尽可能保有原来的数据特征。

    假设需要从n维降到k维,那么需要找出k个n维向量,将原有的数据投影到k个n维向量构成的k维空间,并保证投影误差足够小。

    比如下图,就找到了2个3维向量,构成了一个二维*面,可将3维特征进行投影。

    2.算法的步骤

    1.先进行标准化,使数据的差值不那么大:

    //标准差你应该记得怎么算的吧,就是根号下的方差。

     2.计算协方差矩阵Σ:

    3.通过奇异值分解(SVD),求取 ΣΣ 的特征向量(eigenvectors):

    4.从 U中取出前 k个左奇异向量,构成一个约减矩阵 UreduceUreduce:

    5.计算新的特征向量:z(i):

     

    //↑以上过程我都不明白,跟我看的另外一个教程不一样啊。

     3.算法的步骤

     转自:https://blog.csdn.net/huangfei711/article/details/78663474

    PCA 操作流程

    1. 去*均值,即每一位特征减去各自的*均值(当然,为避免量纲以及数据数量级差异带来的影响,先标准化是必要的)
    2. 计算协方差矩阵
    3. 计算协方差矩阵的特征值与特征向量
    4. 对特征值从大到小排序
    5. 保留最大的个特征向量
    6. 将数据转换到个特征向量构建的新空间中

    假设二维数据为 data: 

    取均值:

    • 去均值矩阵:

     

    • 计算其协方差矩阵:

     

    • 计算协方差矩阵的特征值和特征向量:

     特征值为: 

     

    特征向量为: 

     

    • 对特征值进行排序(只有两个特征)
    • 选择最大的特征值对应的特征向量: 

     

    转换到新的空间 

     

    这就完成了PCA的降维操作。

    更深入的理解:2019-3-18更——

    http://blog.codinglabs.org/articles/pca-tutorial.html

     4.对以上的说明

    2018-12-21更——

    1.如何计算协方差矩阵?

     有推导过程:

    那么其实用第一个和最后一个得到的结果是一样的,实验如下:

    > i<-c(14,20,35,29)
    > j<-c(9,16,40,28)
    > mean(i*j)-mean(i)*mean(j)
    [1] 94.875
    > mean((i-mean(i))*(j-mean(j)))
    [1] 94.875

    转自:https://wenku.baidu.com/view/e41e9f4cbed5b9f3f90f1c55.html

     

    2.如何计算特征值? 

     

    2020-2-25更新——————————

    https://www.jianshu.com/p/162bb4ea1b7f 这个讲的不错

    #为什么我还要更新呢,因为我发现我对PCA的原理还并不了解,不怎么清楚,每次提到PCA我还是很模糊的。(我的理解就是在坐标系中,主成分代表的线和其他的都很*且*行之类的。)

    它的原理就是将很多互相之间有相关的特征降维,使新的特征之间尽可能地不相关,用更少的特征来表示原来的信息。

    比如每一个主成分如下:

    是观测变量的线性组合。

    选出的主成分就是和其他特征高度相关的新特征,这样才具有代表性。

    https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60

    这个是一个PCApython教程,我今天应该没有时间看,但是会学习的。

    https://www.cnblogs.com/pinard/p/6239403.html 这个要看,因为有提到了一句,PCA是基于投影方差最大,我不理解。操,白看。但我目前还在看CCA,所以这个方面先不花太多时间了。

  • 相关阅读:
    进程和线程的主要区别
    Mysql 指定字段数据排序 以及django的实现
    java String
    阿里云 邮件发送(Python)
    Python实现类似JavaScript 的Json对象
    JAVA 学习笔记
    记录一个MySql 分区表+Gap锁引起插入超时的案例
    ThreadPoolExecutor源码中的适配器模式
    Oracle 查询真实执行计划
    简单分析FactoryBean
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/9917195.html
Copyright © 2011-2022 走看看