美文网首页
机器学习:降维工具 - PCA

机器学习:降维工具 - PCA

作者: moon_light_ | 来源:发表于2020-03-14 16:47 被阅读0次

降维(dimensionality reduction)就是减少数据特征的维度
  
作用
  使得数据集更易使用
  降低很多算法的计算开销
  去除噪声
  使得结果易懂
  
PCA(主成分分析 Principal Component Analysis)
  PCA 将数据从原来的坐标系转换到了新的坐标系
  第一个新坐标轴选择的是原始数据中方差最大的方向
  第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向
  重复该过程,重复次数为特征的数目
  我们会发现,大部分方差都包含在最前面的几个新坐标轴中
  因此,我们可以忽略余下的坐标轴,即对数据进行了降维处理
  
因子分析(Factor Analysis)
  假设在观察数据的生成中有一些观察不到的隐变量(latent variable)
  假设观察数据是这些隐变量和某些噪声的线性组合
  那么隐变量数据可能比观察数据的数目少,就是说通过找到隐变量就可以实现数据的降维
  
独立成分分析(Independent Component Analysis,ICA)
  假设数据是从 N 个数据源生成的,数据为多个数据源的混合观察结果
  这些数据源之间在统计上是相互独立的
  如果数据源的数目少于观察数据的数目,则可以实现降维过程
  
下面只讲 PCA 技术
  
优点:降低数据的复杂性,识别最重要的多个特征
缺点:不一定需要,且可能损失有用信息
  


以上图为例
 第一条坐标轴旋转到覆盖数据的最大方差位置 B,最大方差给出了数据最重要的信息
 第二条坐标轴选择和第一条坐标轴正交,并且方差最大的方向 C
 注意坐标轴的旋转并没有减少数据的维度
 如果新坐标 B 比较长,而新坐标 C 比较短,则 B 比较重要而 C 可以忽略
 通过这种方法将数据坐标轴旋转至数据角度上的那些最重要的方向

一旦得到了协方差矩阵的特征向量,就可以保留最大的 N 个值
这些特征向量给出了 N 个最重要特征的真实结构
可以通过将数据乘上这 N 个特征向量而将它转换到新的空间
  
代码

# coding=utf-8
import numpy as np


def pca(dataMat, topNfeat=9999999):
    """
    dataMat - 原数据集
    topNfeat - 压缩为 topNfeat 个特征
    """

    # 所有数据减去平均值
    meanVals = np.mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals

    # 计算协方差矩阵,协方差用于衡量两个变量(特征)的总体误差
    # 正值表示有正相关性,负值表示有负相关性,0 表示两个变量是统计独立的
    # 而方差是协方差的一种特殊情况,即当两个变量是相同的情况
    covMat = np.cov(meanRemoved, rowvar=False)

    # 计算协方差矩阵(n阶矩阵) covMat 的特征值向量 eigVals (维度 n*1) 和特征向量矩阵 eigVects (维度 n*n)
    # eigVals 的每个值是一个特征值,eigVects 的每一列是一个特征向量,所有特征向量之间都是线性无关的
    # 满足 covMat * eigVects[:,j] = eigVals[j] * eigVects[:,j]
    # 注意这里的特征、特征向量是针对协方差矩阵的,不是针对数据集的
    eigVals, eigVects = np.linalg.eig(np.mat(covMat))

    # 对特征值向量进行从小到大的排序,eigValInd 的值是 eigVals 的下标
    eigValInd = np.argsort(eigVals)

    # 步长 -1 所以从最后一个 (既最大的) 开始取,取 topNfeat 个最大的值的下标
    eigValInd = eigValInd[:-(topNfeat + 1):-1]

    # 通过下标取特征值最大的 topNfeat 个特征向量得到 redEigVects (维度 n*topNfeat)
    redEigVects = eigVects[:, eigValInd]

    # 使用新的特征向量矩阵对原始数据进行降维
    lowDDataMat = meanRemoved * redEigVects

    # 使用新的特征向量矩阵将原始数据集矩阵转换到新的空间
    reconMat = (lowDDataMat * redEigVects.T) + meanVals

    # 返回降维后的原始数据,和转换到新空间的数据
    return lowDDataMat, reconMat



相关文章

  • 机器学习:降维工具 - PCA

    降维(dimensionality reduction)就是减少数据特征的维度  作用  使得数据集更易使用  降...

  • 5 主成分分析PCA

    主成分分析(PCA)是最常见的降维算法。 PCA是非监督的机器学习算法 主要用于数据的降维 其他应用:可视化、去噪...

  • 主成分分析(PCA)的推导与解释

    前言 PCA是一种无参数的数据降维方法,在机器学习中很常用,这篇文章主要从三个角度来说明PCA是怎么降维的分别是方...

  • 【火炉炼AI】机器学习053-数据降维绝招-PCA和核PCA

    【火炉炼AI】机器学习053-数据降维绝招-PCA和核PCA (本文所使用的Python库和版本号: Python...

  • 机器学习算法之PCA算法

    前言 在机器学习中降维是我们经常需要用到的算法,在降维的众多方法中PCA无疑是最经典的机器学习算法之一,最近准备撸...

  • 技术积累

    数学基础 MCMC 采样 MCMC 采样 一、机器学习 1、无监督学习 聚类 Kmeans 聚类 降维 PCA 理...

  • PCA 笔记

    2020-05-21特征降维中PCA和LDA[bilibili-video]《Python机器学习》读书笔记(五)...

  • PCA实现教程

    摘要: 手把手教你PCA降维技术!(有案例) 数据是机器学习模型的生命燃料。对于特定的问题,总有很多机器学习技术可...

  • PCA

    PCA降维 一、算法原理 降维算法 还原算法 二、算法实现 三、scikit-learn PCA 四、PCA降噪 ...

  • PCA原理及实现-R

    PCA分析与解释 PCA是一种无参数的数据降维方法,常用的机器学习算法一种,这篇文章主要从PCA应用于解释两个方面...

网友评论

      本文标题:机器学习:降维工具 - PCA

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