从特征分解到协方差矩阵:详细剖析和实现PCA算法

从特征分解到协方差矩阵:详细剖析和实现PCA算法

本文先简要明了地介绍了特征向量和其与矩阵的关系,然后再以其为基础解释协方差矩阵和主成分分析法的基本概念,最后我们结合协方差矩阵和主成分分析法实现数据降维。本文不仅仅是从理论上阐述各种重要概念,同时最后还一步步使用 Python 实现数据降维。

首先本文的特征向量是数学概念上的特征向量,并不是指由输入特征值所组成的向量。数学上,线性变换的特征向量是一个非简并的向量,其方向在该变换下不变。该向量在此变换下缩放的比例称为特征值。一个线性变换通常可以由其特征值和特征向量完全描述。如果我们将矩阵看作物理运动,那么最重要的就是运动方向(特征向量)和速度(特征值)。因为物理运动只需要方向和速度就可以描述,同理矩阵也可以仅使用特征向量和特征值描述。

其实在线性代数中,矩阵就是一个由各种标量或变量构成的表格,它和 Excel 表格并没有什么本质上的区别。只不过数学上定义了一些矩阵间的运算,矩阵运算的法则和实际内部的值并没有什么关系,只不过定义了在运算时哪些位置需要进行哪些操作。因为矩阵相当于定义了一系列运算法则的表格,那么其实它就相当于一个变换,这个变换(物理运动)可以由特征向量(方向)和特征值(速度)完全描述出来。

线性变换  

在解释线性变换前,我们需要先了解矩阵运算到底是什么。因为我们可以对矩阵中的值统一进行如加法或乘法等运算,所以矩阵是十分高效和有用的。如下所示,如果我们将向量 v 左乘矩阵 A,我们就会得到新的向量 b,也即可以表述说矩阵 A 对输入向量 v 执行了一次线性变换,且线性变换结果为 b。因此矩阵运算 Av = b 就代表向量 v 通过一个变换(矩阵 A)得到向量 b。下面的实例展示了矩阵乘法(该类型的乘法称之为点积)是怎样进行的:


所以矩阵 A 将向量 v 变换为向量 b。下图展示了矩阵 A 如何将更短更低的向量 v 映射到更长更高的向量 b:


我们可以馈送其他正向量到矩阵 A 中,每一个馈送的向量都会投影到新的空间中且向右边变得更高更长。

假定所有的输入向量 V 可以排列为一个标准表格,即:


而矩阵可以将所有的输入向量 V 投影为如下所示的新空间,也即所有输出向量组成的 B:


下图可以看到输入向量空间和输出向量空间的关系,


如果假设矩阵就是一阵风,它通过有形的力量得出可见的结果。而这一阵风所吹向的方向就是特征向量,因此特征向量就表明矩阵所要变换的方向。


如上图所示,特征向量并不会改变方向,它已经指向了矩阵想要将所有输入向量都推向的方向。因此,特征向量的数学定义为:存在非零矩阵 A 和标量λ,若有向量 x 且满足以下关系式,那么 x 就为特征向量、λ为特征值。


特征向量同样是线性变换的不变轴,所有输入向量沿着这条轴压缩或延伸。线性变换中的线性正是表明了这种沿直线轴进行变换的特性,一般来说几阶方阵就有几个特征向量,如 3*3 矩阵有 3 个特征向量,n 阶方阵有 n 个特征向量,每一个特征向量表征一个维度上的线性变换方向。

因为特征向量提取出了矩阵变换的主要信息,因此它在矩阵分解中十分重要,即沿着特征向量对角化矩阵。因为这些特征向量表征着矩阵的重要特性,所以它们可以执行与深度神经网络中自编码器相类似的任务。引用 Yoshua Bengio 的话来说:

许多数学对象可以通过分解为更基础的组成部分而有更好的理解,因为我们会发现它们的一些广泛性属性,而不是我们选择表征它们的特性。例如整数可以分解为质因数,虽然我们表征整数的方式会因为采用二进制还是十进制而改变,但整数总可以由几个质因数表示(如 12=2 × 2 × 3),因此这种分解的性质正好是我们所需要的稳定性质。

我们可以分解一个整数为质因数而得到其自然属性,同样我们也可以分解矩阵以得到它的功能性属性,并且这种属性信息在矩阵表示为多组元素的阵列下是不明显的。矩阵分解最常见的是特征分解(eigen-decomposition),即我们将矩阵分解为一系列的特征向量和特征值。

主成分分析(PCA)

PCA 是一种寻找高维数据(图像等)模式的工具。机器学习实践上经常使用 PCA 对输入神经网络的数据进行预处理。通过聚集、旋转和缩放数据,PCA 算法可以去除一些低方差的维度而达到降维的效果,这样操作能提升神经网络的收敛速度和整体效果。

为了进一步了解 PCA 算法,我们还需要定义一些基本的统计学概念,即均值、标准差、方差和协方差。

样本均值可简单的表示为所有样本 X 的平均值,如下所示样本均值表示为:


样本标准差即样本方差的平方根。即每一样本点到样本均值之间的平均距离。n 个样本的方差却只除以 n-1 是因为样本只是真实分布的估计量,样本方差也只是真实方差的估计量。在大学课本概率论和数理统计中有证明,如果除以 n(2 阶中心矩),那么样本方差是真实方差的一致性估计,但并不是无偏估计,也就是样本方差存在系统偏差。因此我们需要对 2 阶中心矩进行调整以消除系统偏差。如下所示,样本的标准差 s 和方差 var(X) 都是无偏估计:



因为样本标准差和方差都是先求距离的平方再求平方根,因此距离一定是正数且不会抵消。假设我们有如下数据点(散点图):


PCA 如线性回归那样会尝试构建一条可解释性的直线贯穿所有数据点。每一条直线表示一个「主成分」或表示自变量和因变量间的关系。数据的维度数就是主成分的数量,也即每一个数据点的特征维度。PCA 的作用就是分析这些特征,并选出最重要的特征。PCA 本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据「去相关」,也就是让它们在不同正交方向上没有相关性。通常我们认为信息具有较大的方差,而噪声有较小的方差,信噪比就是信号与噪声的方差比,所以我们希望投影后的数据方差越大越好。因此我们认为,最好的 k 维特征是将 n 维样本点转换为 k 维后,每一维上的样本方差都很大。

如下图所示,第一个主成分以直线(红色)的形式将散点图分为两边,并且它是保留了最大方差的。因为投影到这条直线(红色)上数据点离均值(空心点)有最大的方差,即所有蓝点到灰色线的平均距离为最大方差,所以这一个主成分将保留最多的信息。



如上所示,假设第二个主成分为垂直于红线(第一个主成分)的灰色线。当数据点投影到第二个主成分上时,它们离样本均值(空心点)的方差却非常小,即数据点到红色线的平均距离。所以红色线是最优的主成分。

协方差矩阵

前面我们已经了解矩阵其实就是一种将某个向量变换为另一个的方法,另外我们也可以将矩阵看作作用于所有数据并朝向某个方向的力。同时我们还知道了变量间的相关性可以由方差和协方差表达,并且我们希望保留最大方差以实现最优的降维。因此我们希望能将方差和协方差统一表示,并且两者均可以表示为内积的形式,而内积又与矩阵乘法密切相关。因此我们可以采用矩阵乘法的形式表示。若输入矩阵 X 有两个特征 a 和 b,且共有 m 个样本,那么有:


如果我们用 X 左乘 X 的转置,那么就可以得出协方差矩阵:


这个矩阵对角线上的两个元素分别是两特征的方差,而其它元素是 a 和 b 的协方差。两者被统一到了一个矩阵的,因此我们可以利用协方差矩阵描述数据点之间的方差和协方差,即经验性地描述我们观察到的数据。

寻找协方差矩阵的特征向量和特征值就等价于拟合一条能保留最大方差的直线或主成分。因为特征向量追踪到了主成分的方向,而最大方差和协方差的轴线表明了数据最容易改变的方向。根据上述推导,我们发现达到优化目标就等价于将协方差矩阵对角化:即除对角线外的其它元素化为 0,并且在对角线上将特征值按大小从上到下排列。协方差矩阵作为实对称矩阵,其主要性质之一就是可以正交对角化,因此就一定可以分解为特征向量和特征值。


当协方差矩阵分解为特征向量和特征值之后,特征向量表示着变换方向,而特征值表示着伸缩尺度。在本例中,特征值描述着数据间的协方差。我们可以按照特征值的大小降序排列特征向量,如此我们就按照重要性的次序得到了主成分排列。

对于 2 阶方阵,一个协方差矩阵可能如下所示:


在上面的协方差矩阵中,1.07 和 0.64 分别代表变量 x 和变量 y 的方差,而副对角线上的 0.63 代表着变量 x 和 y 之间的协方差。因为协方差矩阵为实对称矩阵(即 Aij=Aji),所以其必定可以通过正交化相似对角化。因为这两个变量的协方差为正值,所以这两个变量的分布成正相关性。如下图所示,如果协方差为负值,那么变量间就成负相关性。


注意如果变量间的协方差为零,那么变量是没有相关性的,并且也没有线性关系。因此,如果两个变量的协方差越大,相关性越大,投影到主成分后的损失就越小。我们同时可以考虑协方差和方差的计算式而了解他们的关系:


计算协方差的优处在于我们可以通过协方差的正值、负值或零值考察两个变量在高维空间中相互关系。总的来说,协方差矩阵定义了数据的形状,协方差决定了沿对角线对称分布的强度,而方差决定了沿 x 轴或 y 轴对称分布的趋势。

基变换

因为协方差矩阵的特征向量都是彼此正交的,所以变换就相当于将 x 轴和 y 轴两个基轴换为主成分一个基轴。也就是将数据集的坐标系重新变换为由主成分作为基轴的新空间,当然这些主成分都保留了最大的方差。

我们上面所述的 x 轴和 y 轴称之为矩阵的基,即矩阵所有的值都是在这两个基上度量而来的。但矩阵的基是可以改变的,通常一组特征向量就可以组成该矩阵一组不同的基坐标,原矩阵的元素可以在这一组新的基中表达。


在上图中,我们展示了相同向量 v 如何在不同的坐标系中有不同的表达。黑色实线代表 x-y 轴坐标系而红色虚线是另外一个坐标系。在第一个坐标系中 v = (1,1),而在第二个坐标系中 v = (1,0)。因此矩阵和向量可以在不同坐标系中等价变换。在数学上,n 维空间并没有唯一的描述,所以等价转换矩阵的基也许可以令问题更容易解决。

最后我们简单地总结一下 PCA 算法的基本概念和步骤:

首先我们得理解矩阵就相当于一个变换,变换的方向为特征向量,变换的尺度为特征值。PCA 的本质是将方差最大的方向作为主要特征,并且在各个正交方向上将数据「去相关」,即让它们在不同正交方向上没有相关性。所以我们希望将最相关的特征投影到一个主成分上而达到降维的效果,投影的标准是保留最大方差。而在实际操作中,我们希望计算特征之间的协方差矩阵,并通过对协方差矩阵的特征分解而得出特征向量和特征值。如果我们将特征值由大到小排列,相对应的特征向量所组成的矩阵就是我们所需降维后的数据。下面我们将一步步实现 PCA 算法。

输入数据:

import numpy as npx=np.array([2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1])y=np.array([2.4,0.7,2.9,2.2,3,2.7,1.6,1.1,1.6,0.9])

归一化数据:

mean_x=np.mean(x)mean_y=np.mean(y)scaled_x=x-mean_xscaled_y=y-mean_ydata=np.matrix([[scaled_x[i],scaled_y[i]] for i in range(len(scaled_x))])

绘制散点图查看数据分布:

import matplotlib.pyplot as pltplt.plot(scaled_x,scaled_y,'o')

求协方差矩阵:

cov=np.cov(scaled_x,scaled_y)

求协方差矩阵的特征值和特征向量:

eig_val, eig_vec = np.linalg.eig(cov)

求出特征向量后,我们需要选择降维后的数据维度 k(n 维数据降为 k 维数据),但我们的数据只有两维,所以只能降一维:

eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(len(eig_val))]eig_pairs.sort(reverse=True)feature=eig_pairs[0][1]

转化得到降维后的数据:

new_data_reduced=np.transpose(np.dot(feature,np.transpose(data))

原文链接:https://deeplearning4j.org/eigenvector#a-beginners-guide-to-eigenvectors-pca-covariance-and-entropy

工程PCA算法工程矩阵数据降维算法
8
推荐文章
开发者必读:计算机科学中的线性代数开发者必读:计算机科学中的线性代数
李泽南李泽南7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP中常用文本分类模型汇总

如今深度学习已经成为NLP领域的标配技术,在图像中大为成功的卷积神经网络(CNN)也开始广泛渗透到文本分类、机器翻译、机器阅读等NLP任务中。但是,在ACL2017以前,word-level的文本分类模型(以单词为语义单位…

【TensorFlow】随机训练和批训练的比较与实现

一、随机训练和批训练 随机训练:一次随机抽样训练数据和目标数据对完成训练。批训练:一次大批量训练取平均损失来进行梯度计算,批量训练大小可以一次上扩到整个数据集。批训练和随机训练的差异:优化器方法和收敛的不同批训练的难…

「小公式」平均数与级数

喵喵喵,小夕最近准备复习一下数学和基础算法,所以可能会推送或者附带推送点数学和基础算法的小文章。说不定哪天就用(考)到了呢( ̄∇ ̄)注意哦,与头条位的文章推送不同,「小公式」和「…

最新出炉-阿里 2020届算法工程师-自然语言处理(实习生)以及补充:快递最短路径

问题2感觉跟下面的分苹果类似; 问题 G: 分梨 题目描述 zzq非常喜欢吃梨,有一天他得到了ACMCLUB送给他的一筐梨子。由于他比较仗义,就打算把梨子分给好朋友们吃。现在他要把M个梨子放到N个盘子里面(我们允许有的盘子为空&#xff0…

如何匹配两段文本的语义?

喵喵喵,好久不见啦。首先很抱歉大家期待的调参手册(下)迟迟没有出稿,最近两个月连着赶了4个DDL,整个人都不好了。最近几天终于有时间赶一下未完成的稿子了。在赶DDL的时候夹着写了这篇文章,就先发布这一篇吧…

【TensorFlow】实现简单的鸢尾花分类器

代码实现及说明 # python 3.6 # TensorFlow实现简单的鸢尾花分类器 import matplotlib.pyplot as plt import tensorflow as tf import numpy as np from sklearn import datasetssess tf.Session()#导入数据 iris datasets.load_iris() # 是否是山鸢尾 0/1 binary_target …

偏差-方差全面解释

偏差(Bias)与方差(Variance) 目录: 为什么会有偏差和方差?偏差、方差、噪声是什么?泛化误差、偏差和方差的关系?用图形解释偏差和方差。偏差、方差窘境。偏差、方差与过拟合、欠拟合…

「小算法」回文数与数值合法性检验

喵喵喵,小夕最近准备复习一下数学和基础算法,尽量每篇推送下面会附带点数学和基础算法的小文章。说不定哪天就用(考)到了呢( ̄∇ ̄)注意哦,与头条位的文章推送不同,「小公式」和「小算…

【TensorFlow】实现、训练并评估简单的回归模型和分类模型

1 回归模型 回归算法模型用来预测连续数值型,其目标不是分类值而是数字。为了评估这些回归预测值是否与实际目标相符,我们需要度量两者间的距离,打印训练过程中的损失,最终评估模型损失。 这里使用的例子是从均值为1、标准差为0…

史上最通熟易懂的检索式聊天机器人讲解

喵喵喵,一不小心又匿了三个月,突然诈尸害不害怕( ̄∇ ̄) 小夕从7月份开始收到第一场面试邀请,到9月初基本结束了校招(面够了面够了T_T),深深的意识到今年的对话系统/chatbot方向是真的…

Python pandas数据分析中常用方法

官方教程 读取写入文件 官方IO 读取 写入 read_csv       to_csv read_excel      to_excel read_hdf       to_hdf read_sql       to_sql read_json      to_json read_msgpack (experimental)   to_msgpack (experimental) read_html    …

小哥哥,检索式chatbot了解一下?

喵喵喵,一不小心又匿了三个月,突然诈尸害不害怕( ̄∇ ̄) 小夕从7月份开始收到第一场面试邀请,到9月初基本结束了校招(面够了面够了T_T),深深的意识到今年的对话系统/chatbot方向是真的…

领域应用 | 中医临床术语系统

本文转载自公众号中医药知识组织与标准。什么是中医药术语系统?它是干什么用的呢?中医药术语系统是运用计算机与信息技术等工具,对中医药学各领域中的事物、现象、特性、关系和过程进行标记和概括,并为每个概念赋予指称形成概念体…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Image图片组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Image图片组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Image组件 Image 用来加载并显示图片的基础组件,它支持从内存、本…

梁家卿 | 百科知识图谱同步更新

本文转载自公众号知识工场。 本文整理自复旦大学知识工场梁家卿博士在IJCAI 2017 会议上的论文报告,题目为《How to Keep a Knowledge Base Synchronized with Its Encyclopedia Source》,作者包括:梁家卿博士(复旦大学&#xff0…

别再搜集面经啦!小夕教你斩下NLP算法岗offer!

推完上一篇文章,订阅号和知乎后台有好多小伙伴跟小夕要面经(还有个要买简历的是什么鬼),然鹅小夕真的没有整理面经呀,真的木有时间(。 ́︿ ̀。)。不过话说回来,面经有多大用呢&#…

肖仰华 | 基于知识图谱的问答系统

本文转载自公众号知识工场。 本文整理自复旦大学知识工场肖仰华教授在VLDB 2017 会议上的论文报告,题目为《KBQA: Learning Question Answering over QA Corpora and Knowledge Bases》,作者包括:崔万云博士(现上海财经大学讲师&a…

【小夕精选】YJango 7分钟带你领略你未曾想过的线性代数+微积分

小夕很早之前就想转一些精彩的技术文章,这样哪怕没有时间写作的时候,也能把优质的干货分享给大家~然鹅,由于我也不知道是什么的原因,就不小心拖到了现在╮( ̄▽ ̄"")╭之前有不少粉丝希…

白硕 | 基于区块链的众包社区激励机制

本文整理自白硕老师在 YOCSEF 武汉专题论坛:“人工智能遇到区块链,是惊鸿一瞥还是天长地久?”的报告。 很高兴有这个机会跟大家交流。我先讲几个案例作为引子。第一个案例与知识图谱有关。这个公司做的是非常垂直的一个领域,安全教…