From 2b63d1a7773b8e74007b33f380a9844e021e9a52 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 29 Aug 2017 17:55:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AE=8C=E6=88=90=20PCA.md?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/13.利用PCA来简化数据.md | 58 +++++++++++++++++------------------- src/python/13.PCA/pca.py | 10 +++---- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/docs/13.利用PCA来简化数据.md b/docs/13.利用PCA来简化数据.md index 23b86ac5..d2cafe3a 100644 --- a/docs/13.利用PCA来简化数据.md +++ b/docs/13.利用PCA来简化数据.md @@ -1,10 +1,17 @@ -# 第13章 利用PCA来简化数据 +# 第13章 利用 PCA 来简化数据 ![利用PCA简化数据_首页](/images/13.PCA/利用PCA简化数据_首页.jpg) -## 降维技术 概述 +## 降维技术 -> 数据显示并非大规模特征下的唯一难题,对数据进行简化还有如下一系列的原因: +> 场景 + +* 我们正通过电视观看体育比赛,在电视的显示器上有一个球。 +* 显示器大概包含了100万像素点,而球则可能是由较少的像素点组成,例如说一千个像素点。 +* 人们实时的将显示器上的百万像素转换成为一个三维图像,该图像就给出运动场上球的位置。 +* 在这个过程中,人们已经将百万像素点的数据,降至为三维。这个过程就称为`降维(dimensionality reduction)` + +> 数据显示 并非大规模特征下的唯一难题,对数据进行简化还有如下一系列的原因: * 1) 使得数据集更容易使用 * 2) 降低很多算法的计算开销 @@ -21,35 +28,21 @@ * 1) 主成分分析(Principal Component Analysis, PCA) * `通俗理解:就是找出一个最主要的特征,然后进行分析。` * `例如: 考察一个人的智力情况,就直接看数学成绩就行(存在:数学、语文、英语成绩)` - * a.将数据从原来的坐标系转换到了新的坐标系,新的坐标系的选择是由数据本身决定的。 - * b.第一个新坐标轴选择的是原始数据中`方差最大`的方向 - * c.第二个新坐标轴的选择和第一个坐标轴`正交(orthogonal 如果是二维空间就叫垂直)`且具有`最大方差`的方向。 - * d.该过程一直重复,重复次数为原始数据中特征的数目。 - * 我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,即对数据进行了降维处理。 * 2) 因子分析(Factor Analysis) - * `通俗理解:将多个实测变量转换为少数几个综合指标,它反映一种降维的思想.通过降维将相关性高的变量聚在一起,从而减少需要分析的变量的数量,而减少问题分析的复杂性` + * `通俗理解:将多个实测变量转换为少数几个综合指标。它反映一种降维的思想,通过降维将相关性高的变量聚在一起,从而减少需要分析的变量的数量,而减少问题分析的复杂性` * `例如: 考察一个人的整体情况,就直接组合3样成绩(隐变量),看平均成绩就行(存在:数学、语文、英语成绩)` * 应用的领域:社会科学、金融和其他领域 * 在因子分析中,我们 - * 假设观察数据的生成中有一些观察不到的隐变量(latent variable)。 + * 假设观察数据的成分中有一些观察不到的隐变量(latent variable)。 * 假设观察数据是这些隐变量和某些噪音的线性组合。 * 那么隐变量的数据可能比观察数据的数目少,也就说通过找到隐变量就可以实现数据的降维。 * 3) 独立成分分析(Independ Component Analysis, ICA) - * `通俗理解:PCA(主成分分析)寻找的是,使得投影之后,尽量保留原有信息量的投影方向。 ICA(独立主成分分析)寻找的是,使得投影之后,数据之间相互独立的投影方向。` - * `例如:我们去ktv唱歌,想辨别唱的是哪首歌,PCA就是搜录歌词;而ICA是对歌词按人进行完全的拆分。` - * ICA假设数据是从N个数据源生成的,这一点和因子分析有些类似。 - * 假设数据为多个数据源的混合观察结果,这些数据源之间在统计上是相互独立的,而在PCA中只假设数据是不相关的。 + * `通俗理解:ICA 认为观测信号是若干个独立信号的线性组合,ICA 要做的是一个解混过程。` + * `例如:我们去ktv唱歌,想辨别唱的是什么歌曲?ICA 是观察发现是原唱唱的一首歌【2个独立的声音(原唱/主唱)】。` + * ICA 是假设数据是从 N 个数据源混合组成的,这一点和因子分析有些类似,这些数据源之间在统计上是相互独立的,而在 PCA 中只假设数据是不 相关(线性关系)的。 * 同因子分析一样,如果数据源的数目少于观察数据的数目,则可以实现降维过程。 -## 降维技术 场景 - -* 我们正通过电视而非现场观看体育比赛,在电视的纯平显示器上有一个球。 -* 显示器大概包含了100万像素,而球则可能是由较少的像素组成,例如说一千个像素。 -* 人们实时的将显示器上的百万像素转换成为一个三维图像,该图像就给出运动场上球的位置。 -* 在这个过程中,人们已经将数据从一百万维降至了三维。这就被称为`降维(dimensionality reduction)` - - ## PCA ### PCA 概述 @@ -64,13 +57,11 @@ > PCA 工作原理 -通过PCA进行降维处理,我们就可以同时获得SVM和决策树的优点:(得到了和决策树一样简单的分类器,同时分类间隔和SVM一样好) - -1. 第一个主成分就是来自于数据差异性最大(即: `方差最大`)的方向提取出来 -2. 第二个主成分就是来自于数据差异性次大的方向,并且该方向于第一个主成分方向`正交(orthogonal 如果是二维空间就叫垂直)`。 -3. 通过数据集的协方差矩阵及其特征值分析,我们就可以得到这些主成分的值。 -4. 一旦得到了协方差矩阵的特征向量,我们就可以保留最大的N个值。这些特征向量也给出了N个最重要特征的真实结构。 - 我们可以通过将数据乘上这N个特征向量而将它转换到新的空间。 +1. 找出第一个主成分的方向,也就是数据 `方差最大` 的方向。 +2. 找出第二个主成分的方向,也就是数据 `方差次大` 的方向,并且该方向与第一个主成分方向 `正交(orthogonal 如果是二维空间就叫垂直)`。 +3. 通过这种方式计算出所有的主成分方向。 +4. 通过数据集的协方差矩阵及其特征值分析,我们就可以得到这些主成分的值。 +5. 一旦得到了协方差矩阵的特征值和特征向量,我们就可以保留最大的 N 个特征。这些特征向量也给出了 N 个最重要特征的真实结构,我们就可以通过将数据乘上这 N 个特征向量 从而将它转换到新的空间上。 例如下图: @@ -79,6 +70,7 @@ > PCA 优缺点 ``` +通过 PCA 进行降维处理,我们就可以同时获得 SVM 和决策树的优点:(得到了和决策树一样简单的分类器,同时分类间隔和SVM一样好) 优点:降低数据的复杂性,识别最重要的多个特征。 缺点:不一定需要,且可能损失有用信息。 适用数据类型:数值型数据。 @@ -90,7 +82,7 @@ ``` 半导体是在一些极为先进的工厂中制造出来的。设备的生命早期有限,并且花费极其巨大。 -虽然通过早起测试和频繁的测试来发现有瑕疵的产品,但仍有一些存在瑕疵的产品通过测试。 +虽然通过早期测试和频繁测试来发现有瑕疵的产品,但仍有一些存在瑕疵的产品通过测试。 如果我们通过机器学习技术用于发现瑕疵产品,那么它就会为制造商节省大量的资金。 具体来讲,它拥有590个特征。我们看看能否对这些特征进行降维处理。 @@ -136,6 +128,10 @@ def replaceNanWithMean(): > PCA 数据降维 +在等式 Av=入v 中,v 是特征向量, 入是特征值。
+表示 如果特征向量 v 被某个矩阵 A 左乘,那么它就等于某个标量 入 乘以 v.
+幸运的是: Numpy 中有寻找特征向量和特征值的模块 linalg,它有 eig() 方法,该方法用于求解特征向量和特征值。 + ```python def pca(dataMat, topNfeat=9999999): """pca @@ -210,7 +206,7 @@ def pca(dataMat, topNfeat=9999999): ``` 降维技术使得数据变的更易使用,并且它们往往能够去除数据中的噪音,使得其他机器学习任务更加精确。 降维往往作为预处理步骤,在数据应用到其他算法之前清洗数据。 -比较流行的降维技术: 独立主成分分析、因子分析 和 主成分分析, 其中又以主成分分析应用最广泛。 +比较流行的降维技术: 独立成分分析、因子分析 和 主成分分析, 其中又以主成分分析应用最广泛。 本章中的PCA将所有的数据集都调入了内存,如果无法做到,就需要其他的方法来寻找其特征值。 如果使用在线PCA分析的方法,你可以参考一篇优秀的论文 "Incremental Eigenanalysis for Classification"。 diff --git a/src/python/13.PCA/pca.py b/src/python/13.PCA/pca.py index 53101511..7be767ef 100644 --- a/src/python/13.PCA/pca.py +++ b/src/python/13.PCA/pca.py @@ -145,8 +145,8 @@ if __name__ == "__main__": # 利用PCA对半导体制造数据降维 dataMat = replaceNanWithMean() print shape(dataMat) - # # 分析数据 - # analyse_data(dataMat) - lowDmat, reconMat = pca(dataMat, 20) - print shape(lowDmat) - show_picture(dataMat, reconMat) + # 分析数据 + analyse_data(dataMat) + # lowDmat, reconMat = pca(dataMat, 20) + # print shape(lowDmat) + # show_picture(dataMat, reconMat)