使用PCA算法对原始数据降维

PCA是Principal components analysis的简称,叫做主成分分析,是使用最广泛的降维算法之一。所谓降维,就是降低特征的维度,最直观的变化就是特征的个数变少了。当然,不同于特征筛选,这里的降维主要是通过高维空间向低维空间投影来实现的,图示如下
PCA算法的计算步骤分为以下5步

#### 1. 原始特征值的标准化

PCA中所用的标准化方式为零均值标准化,公式如下

对于每一个特征,在原始值的基础上减去平均值,然后除以标准差,通过这一操作将不同量纲的特征统一归一化成标准正态分布,可以进行统一比较。

#### 2, 计算协方差矩阵

协方差用于衡量两个变量之间的相关性,这个概念是在方差的基础上延伸而来,方差的定义如下

方差用于衡量变量偏移均值的程度,而协方差的公式如下

同时考虑了x和y两个变量偏移均值的程度,而且由于是相乘操作,所以当协方差的值大于0时,x和y的变化方向相同,小于0时,x和y的变化方向相反。因此,协方差的值可以反映两个变量之间的相关性,而且相关系数也就是在协方差的基础上除以两个变量的标准差得到的,pearson相关系数的公式如下

协方差矩阵就是多个变量两两之间协方差所构成的矩阵,以3个特征为例,对应的协方差矩阵如下

对于变量与自身的协方差,其值就是对应的方差了,所以在协方差矩阵中,对角线的值是各个变量的方差。

#### 3. 计算协方差矩阵的特征值和特征向量

这一步是PCA的核心,PCA中所谓的主成分就是特征值最大的特征向量了。所以首先计算特征值和特征向量。从这里看出,PCA降维之后的主成分,并不是原来输入的特征了,而是原始特征的线性组合。

#### 4. 选取topN主成分

将特征值按照从大到小排序,选取topN个特征向量,构成新的特征矩阵。

#### 5. 投影

将样本点投影到特征向量上,以二维数据为例,投影前的结果如下

投影到特征向量之后的结果如下

对于每一个主成分而言,有一个方差,这个值就是投影到该主成分之后的值对应的方差,示意如下

在筛选主成分的时候,我们会利用如下所示的碎石图

图中横坐标表示每个主成分,依次为PC1, PC2, 对应的方差值由大变小,通过判断折线图的拐点来筛选topN个主成分。

在scikit-learn中,进行PCA降维的代码如下

>>> from sklearn import datasets
>>> from sklearn.decomposition import PCA
>>> iris = datasets.load_iris()
>>> X = iris.data
>>> y = iris.target
>>> pca = PCA(n_components=2)
>>> X_r = pca.fit(X).transform(X)
>>> pca.explained_variance_ratio_
array([0.92461872, 0.05306648])

可视化的代码如下

>>> import matplotlib.pyplot as plt
>>> target_names = iris.target_names
>>> plt.figure()
<Figure size 640x480 with 0 Axes>
>>> colors = ['navy', 'turquoise', 'darkorange']
>>> lw = 2
>>> for color, i, target_name in zip(colors, [0, 1, 2], target_names):
... plt.scatter(X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=.8, lw=lw,
... label=target_name)
...
<matplotlib.collections.PathCollection object at 0x01894FD0>
<matplotlib.collections.PathCollection object at 0x018A31A8>
<matplotlib.collections.PathCollection object at 0x018A33B8>
>>> plt.legend(loc='best', shadow=False, scatterpoints=1)
<matplotlib.legend.Legend object at 0x018F8700>
>>> plt.title('PCA of IRIS dataset')
Text(0.5, 1.0, 'PCA of IRIS dataset')
>>> plt.show()

结果如下

作为应用最广泛的降维算法,PCA方法计算简便,易于实现,但是解释性较差,因为新的主成分是原始特征的组合,无法与原始特征一一对应。

·end·
(0)

相关推荐

  • 利用大“组学”数据和人工智能在肝细胞癌中发现药物

    机器学习方法 人工智能: 一组智能计算机程序,有助于解决人类发现困难或无法解决的挑战.它包括广泛的机器学习算法. 深度学习(DL): DL 源于经典的机器学习算法,称为人工神经网络,旨在通过改变神经元 ...

  • 21句话入门机器学习

    这是一篇关于机器学习工具包Scikit-learn的入门级读物.对于程序员来说,机器学习的重要性毋庸赘言.也许你还没有开始,也许曾经失败过,都没有关系,你将在这里找到或者重拾自信.只要粗通Python ...

  • 应用PCA降维加速模型训练

    本文将使用主成分分析(Principal Component analysis)实现无监督数据降维这一任务.当然PCA降低维度还可以帮助我们可视化,例如高维度数据是无法可视化,但是当我们将数据降低到三 ...

  • 从实践的角度理解主成分分析

    主成分分析是提高机器学习算法处理大量数据和特征的性能的最常用方法之一.然而,有时PCA可能太复杂,太技术化,甚至太乏味,无法正确理解基本原理,因此,我决定写这篇文章,以实际的方式阐明每一步,并易于初学 ...

  • 10分钟掌握Python-机器学习小项目

    学习机器学习相关技术的最好方式就是先自己设计和完成一些小项目. Python 是一种非常流行和强大的解释性编程语言.不像 R 语言,Python 是个很完整的语言和平台,你既可以用来做研发,也可以用来 ...

  • 机器学习数学基础:从奇异值分解 SVD 看 PCA 的主成分

    今天我们来看一个在数据分析和机器学习领域中常用的降维方法,即主成分分析(PCA).它是探索性数据分析(EDA)和机器学习算法对数据的基本处理方法. 1引言 首先,我们来看一下机器学习中数据的表示形式. ...

  • 机器学习中降维技术Python示例

    为什么需要降维? 高维机器学习数据集是具有大量列(或变量)的数据集.高维机器学习数据集对计算提出了相应的挑战.通常变量(或称为特征)是相关的.我们希望找到一个变量子集来表示数据中相同级别的信息,或者在 ...

  • (数据科学学习手札26)随机森林分类器原理详解&Python与R实现

    转自 博客园 一.简介 作为集成学习中非常著名的方法,随机森林被誉为"代表集成学习技术水平的方法",由于其简单.容易实现.计算开销小,使得它在现实任务中得到广泛使用,因为其来源于决 ...

  • Python使用三种方法实现PCA算法

    主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...

  • ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能

    ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能 输出结果 设计思路 核心代码 estimator = PCA(n_components=20) ...

  • LLE降维算法

    流形分析作为非线性降维的一个分支,拥有多种算法,常见的算法列表如下 流形分析的要点在于降维之后,仍然保留流形中的某些几何属性.之前介绍的isomap保留了测地距离这一几何属性,由于考虑的是全局关系,对 ...

  • isomap降维算法

    降维算法分为线性和非线性两大类,主成分分析PCA属于经典的线性降维,而t-SNE, MDS等属于非线性降维.在非线性降维中,有一个重要的概念叫做流形学习manifold learing. 首先来看下什 ...

  • 基于 Python 的 11 种经典数据降维算法

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  • 11 种数据降维算法,代码已开源!

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  • R语言k-means聚类、层次聚类、主成分(PCA)降维及可视化分析鸢尾花iris数据集

    原文链接:http://tecdat.cn/?p=22838 本练习问题包括:使用R中的鸢尾花数据集 (a)部分:k-means聚类 使用k-means聚类法将数据集聚成2组.  画一个图来显示聚类的 ...

  • 聚类算法之PCA与tSNE

      前 · 言   第二单元第六讲:聚类算法之PCA与tSNE 还是之前文章附件的图片,其中b图是选取两个主成分做的PCA图,c图是tSNE图: 几个常用函数的转置t(transpose),傻傻分不清 ...