【机器学习】主成分分析PCA
2016-04-25 16:31
218 查看
主成分分析PCA
降维的必要性
1.多重共线性--预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。2.高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%。
3.过多的变量会妨碍查找规律的建立。
4.仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。
降维的目的:
1.减少预测变量的个数
2.确保这些变量是相互独立的
3.提供一个框架来解释结果
降维的方法有:主成分分析、因子分析、用户自定义复合等。
PCA(Principal Component Analysis)不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式。
PCA把原先的n个特征用数目更少的m个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的m个特征互不相关。从旧特征到新特征的映射捕获数据中的固有变异性。
预备知识
样本X和样本Y的协方差(Covariance):
协方差为正时说明X和Y是正相关关系,协方差为负时X和Y是负相关关系,协方差为0时X和Y相互独立。
Cov(X,X)就是X的方差(Variance).
当样本是n维数据时,它们的协方差实际上是协方差矩阵(对称方阵),方阵的边长是
。比如对于3维数据(x,y,z),计算它的协方差就是:
若
,则称
是A的特征值,X是对应的特征向量。实际上可以这样理解:矩阵A作用在它的特征向量X上,仅仅使得X的长度发生了变化,缩放比例就是相应的特征值
。
当A是n阶可逆矩阵时,A与P-1Ap相似,相似矩阵具有相同的特征值。
特别地,当A是对称矩阵时,A的奇异值等于A的特征值,存在正交矩阵Q(Q-1=QT),使得:
![](http://pic002.cnblogs.com/images/2012/103496/2012072916002735.png)
对A进行奇异值分解就能求出所有特征值和Q矩阵。
D是由特征值组成的对角矩阵
由特征值和特征向量的定义知,Q的列向量就是A的特征向量。
Jama包
Jama包是用于基本线性代数运算的java包,提供矩阵的cholesky分解、LUD分解、QR分解、奇异值分解,以及PCA中要用到的特征值分解,此外可以计算矩阵的乘除法、矩阵的范数和条件数、解线性方程组等。
PCA过程
1.特征中心化。即每一维的数据都减去该维的均值。这里的“维”指的就是一个特征(或属性),变换之后每一维的均值都变成了0。
很多数据挖掘的教材上都会讲到鹫尾花的例子,本文就拿它来做计算。原始数据是150×4的矩阵A:
5.1 3.5 1.4 0.2 4.9 3.0 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5.0 3.6 1.4 0.2 5.4 3.9 1.7 0.4 4.6 3.4 1.4 0.3 5.0 3.4 1.5 0.2 4.4 2.9 1.4 0.2 4.9 3.1 1.5 0.1 5.4 3.7 1.5 0.2 4.8 3.4 1.6 0.2 4.8 3.0 1.4 0.1 4.3 3.0 1.1 0.1 5.8 4.0 1.2 0.2 5.7 4.4 1.5 0.4 5.4 3.9 1.3 0.4 5.1 3.5 1.4 0.3 5.7 3.8 1.7 0.3 5.1 3.8 1.5 0.3 5.4 3.4 1.7 0.2 5.1 3.7 1.5 0.4 4.6 3.6 1.0 0.2 5.1 3.3 1.7 0.5 4.8 3.4 1.9 0.2 5.0 3.0 1.6 0.2 5.0 3.4 1.6 0.4 5.2 3.5 1.5 0.2 5.2 3.4 1.4 0.2 4.7 3.2 1.6 0.2 4.8 3.1 1.6 0.2 5.4 3.4 1.5 0.4 5.2 4.1 1.5 0.1 5.5 4.2 1.4 0.2 4.9 3.1 1.5 0.1 5.0 3.2 1.2 0.2 5.5 3.5 1.3 0.2 4.9 3.1 1.5 0.1 4.4 3.0 1.3 0.2 5.1 3.4 1.5 0.2 5.0 3.5 1.3 0.3 4.5 2.3 1.3 0.3 4.4 3.2 1.3 0.2 5.0 3.5 1.6 0.6 5.1 3.8 1.9 0.4 4.8 3.0 1.4 0.3 5.1 3.8 1.6 0.2 4.6 3.2 1.4 0.2 5.3 3.7 1.5 0.2 5.0 3.3 1.4 0.2 7.0 3.2 4.7 1.4 6.4 3.2 4.5 1.5 6.9 3.1 4.9 1.5 5.5 2.3 4.0 1.3 6.5 2.8 4.6 1.5 5.7 2.8 4.5 1.3 6.3 3.3 4.7 1.6 4.9 2.4 3.3 1.0 6.6 2.9 4.6 1.3 5.2 2.7 3.9 1.4 5.0 2.0 3.5 1.0 5.9 3.0 4.2 1.5 6.0 2.2 4.0 1.0 6.1 2.9 4.7 1.4 5.6 2.9 3.6 1.3 6.7 3.1 4.4 1.4 5.6 3.0 4.5 1.5 5.8 2.7 4.1 1.0 6.2 2.2 4.5 1.5 5.6 2.5 3.9 1.1 5.9 3.2 4.8 1.8 6.1 2.8 4.0 1.3 6.3 2.5 4.9 1.5 6.1 2.8 4.7 1.2 6.4 2.9 4.3 1.3 6.6 3.0 4.4 1.4 6.8 2.8 4.8 1.4 6.7 3.0 5.0 1.7 6.0 2.9 4.5 1.5 5.7 2.6 3.5 1.0 5.5 2.4 3.8 1.1 5.5 2.4 3.7 1.0 5.8 2.7 3.9 1.2 6.0 2.7 5.1 1.6 5.4 3.0 4.5 1.5 6.0 3.4 4.5 1.6 6.7 3.1 4.7 1.5 6.3 2.3 4.4 1.3 5.6 3.0 4.1 1.3 5.5 2.5 4.0 1.3 5.5 2.6 4.4 1.2 6.1 3.0 4.6 1.4 5.8 2.6 4.0 1.2 5.0 2.3 3.3 1.0 5.6 2.7 4.2 1.3 5.7 3.0 4.2 1.2 5.7 2.9 4.2 1.3 6.2 2.9 4.3 1.3 5.1 2.5 3.0 1.1 5.7 2.8 4.1 1.3 6.3 3.3 6.0 2.5 5.8 2.7 5.1 1.9 7.1 3.0 5.9 2.1 6.3 2.9 5.6 1.8 6.5 3.0 5.8 2.2 7.6 3.0 6.6 2.1 4.9 2.5 4.5 1.7 7.3 2.9 6.3 1.8 6.7 2.5 5.8 1.8 7.2 3.6 6.1 2.5 6.5 3.2 5.1 2.0 6.4 2.7 5.3 1.9 6.8 3.0 5.5 2.1 5.7 2.5 5.0 2.0 5.8 2.8 5.1 2.4 6.4 3.2 5.3 2.3 6.5 3.0 5.5 1.8 7.7 3.8 6.7 2.2 7.7 2.6 6.9 2.3 6.0 2.2 5.0 1.5 6.9 3.2 5.7 2.3 5.6 2.8 4.9 2.0 7.7 2.8 6.7 2.0 6.3 2.7 4.9 1.8 6.7 3.3 5.7 2.1 7.2 3.2 6.0 1.8 6.2 2.8 4.8 1.8 6.1 3.0 4.9 1.8 6.4 2.8 5.6 2.1 7.2 3.0 5.8 1.6 7.4 2.8 6.1 1.9 7.9 3.8 6.4 2.0 6.4 2.8 5.6 2.2 6.3 2.8 5.1 1.5 6.1 2.6 5.6 1.4 7.7 3.0 6.1 2.3 6.3 3.4 5.6 2.4 6.4 3.1 5.5 1.8 6.0 3.0 4.8 1.8 6.9 3.1 5.4 2.1 6.7 3.1 5.6 2.4 6.9 3.1 5.1 2.3 5.8 2.7 5.1 1.9 6.8 3.2 5.9 2.3 6.7 3.3 5.7 2.5 6.7 3.0 5.2 2.3 6.3 2.5 5.0 1.9 6.5 3.0 5.2 2.0 6.2 3.4 5.4 2.3 5.9 3.0 5.1 1.8
每一列减去该列均值后,得到矩阵B:
-0.743333 0.446 -2.35867 -0.998667 -0.943333 -0.054 -2.35867 -0.998667 -1.14333 0.146 -2.45867 -0.998667 -1.24333 0.046 -2.25867 -0.998667 -0.843333 0.546 -2.35867 -0.998667 -0.443333 0.846 -2.05867 -0.798667 -1.24333 0.346 -2.35867 -0.898667 -0.843333 0.346 -2.25867 -0.998667 -1.44333 -0.154 -2.35867 -0.998667 -0.943333 0.046 -2.25867 -1.09867 -0.443333 0.646 -2.25867 -0.998667 -1.04333 0.346 -2.15867 -0.998667 -1.04333 -0.054 -2.35867 -1.09867 -1.54333 -0.054 -2.65867 -1.09867 -0.0433333 0.946 -2.55867 -0.998667 -0.143333 1.346 -2.25867 -0.798667 -0.443333 0.846 -2.45867 -0.798667 -0.743333 0.446 -2.35867 -0.898667 -0.143333 0.746 -2.05867 -0.898667 -0.743333 0.746 -2.25867 -0.898667 -0.443333 0.346 -2.05867 -0.998667 -0.743333 0.646 -2.25867 -0.798667 -1.24333 0.546 -2.75867 -0.998667 -0.743333 0.246 -2.05867 -0.698667 -1.04333 0.346 -1.85867 -0.998667 -0.843333 -0.054 -2.15867 -0.998667 -0.843333 0.346 -2.15867 -0.798667 -0.643333 0.446 -2.25867 -0.998667 -0.643333 0.346 -2.35867 -0.998667 -1.14333 0.146 -2.15867 -0.998667 -1.04333 0.046 -2.15867 -0.998667 -0.443333 0.346 -2.25867 -0.798667 -0.643333 1.046 -2.25867 -1.09867 -0.343333 1.146 -2.35867 -0.998667 -0.943333 0.046 -2.25867 -1.09867 -0.843333 0.146 -2.55867 -0.998667 -0.343333 0.446 -2.45867 -0.998667 -0.943333 0.046 -2.25867 -1.09867 -1.44333 -0.054 -2.45867 -0.998667 -0.743333 0.346 -2.25867 -0.998667 -0.843333 0.446 -2.45867 -0.898667 -1.34333 -0.754 -2.45867 -0.898667 -1.44333 0.146 -2.45867 -0.998667 -0.843333 0.446 -2.15867 -0.598667 -0.743333 0.746 -1.85867 -0.798667 -1.04333 -0.054 -2.35867 -0.898667 -0.743333 0.746 -2.15867 -0.998667 -1.24333 0.146 -2.35867 -0.998667 -0.543333 0.646 -2.25867 -0.998667 -0.843333 0.246 -2.35867 -0.998667 1.15667 0.146 0.941333 0.201333 0.556667 0.146 0.741333 0.301333 1.05667 0.046 1.14133 0.301333 -0.343333 -0.754 0.241333 0.101333 0.656667 -0.254 0.841333 0.301333 -0.143333 -0.254 0.741333 0.101333 0.456667 0.246 0.941333 0.401333 -0.943333 -0.654 -0.458667 -0.198667 0.756667 -0.154 0.841333 0.101333 -0.643333 -0.354 0.141333 0.201333 -0.843333 -1.054 -0.258667 -0.198667 0.0566667 -0.054 0.441333 0.301333 0.156667 -0.854 0.241333 -0.198667 0.256667 -0.154 0.941333 0.201333 -0.243333 -0.154 -0.158667 0.101333 0.856667 0.046 0.641333 0.201333 -0.243333 -0.054 0.741333 0.301333 -0.0433333 -0.354 0.341333 -0.198667 0.356667 -0.854 0.741333 0.301333 -0.243333 -0.554 0.141333 -0.0986667 0.0566667 0.146 1.04133 0.601333 0.256667 -0.254 0.241333 0.101333 0.456667 -0.554 1.14133 0.301333 0.256667 -0.254 0.941333 0.00133333 0.556667 -0.154 0.541333 0.101333 0.756667 -0.054 0.641333 0.201333 0.956667 -0.254 1.04133 0.201333 0.856667 -0.054 1.24133 0.501333 0.156667 -0.154 0.741333 0.301333 -0.143333 -0.454 -0.258667 -0.198667 -0.343333 -0.654 0.0413333 -0.0986667 -0.343333 -0.654 -0.0586667 -0.198667 -0.0433333 -0.354 0.141333 0.00133333 0.156667 -0.354 1.34133 0.401333 -0.443333 -0.054 0.741333 0.301333 0.156667 0.346 0.741333 0.401333 0.856667 0.046 0.941333 0.301333 0.456667 -0.754 0.641333 0.101333 -0.243333 -0.054 0.341333 0.101333 -0.343333 -0.554 0.241333 0.101333 -0.343333 -0.454 0.641333 0.00133333 0.256667 -0.054 0.841333 0.201333 -0.0433333 -0.454 0.241333 0.00133333 -0.843333 -0.754 -0.458667 -0.198667 -0.243333 -0.354 0.441333 0.101333 -0.143333 -0.054 0.441333 0.00133333 -0.143333 -0.154 0.441333 0.101333 0.356667 -0.154 0.541333 0.101333 -0.743333 -0.554 -0.758667 -0.0986667 -0.143333 -0.254 0.341333 0.101333 0.456667 0.246 2.24133 1.30133 -0.0433333 -0.354 1.34133 0.701333 1.25667 -0.054 2.14133 0.901333 0.456667 -0.154 1.84133 0.601333 0.656667 -0.054 2.04133 1.00133 1.75667 -0.054 2.84133 0.901333 -0.943333 -0.554 0.741333 0.501333 1.45667 -0.154 2.54133 0.601333 0.856667 -0.554 2.04133 0.601333 1.35667 0.546 2.34133 1.30133 0.656667 0.146 1.34133 0.801333 0.556667 -0.354 1.54133 0.701333 0.956667 -0.054 1.74133 0.901333 -0.143333 -0.554 1.24133 0.801333 -0.0433333 -0.254 1.34133 1.20133 0.556667 0.146 1.54133 1.10133 0.656667 -0.054 1.74133 0.601333 1.85667 0.746 2.94133 1.00133 1.85667 -0.454 3.14133 1.10133 0.156667 -0.854 1.24133 0.301333 1.05667 0.146 1.94133 1.10133 -0.243333 -0.254 1.14133 0.801333 1.85667 -0.254 2.94133 0.801333 0.456667 -0.354 1.14133 0.601333 0.856667 0.246 1.94133 0.901333 1.35667 0.146 2.24133 0.601333 0.356667 -0.254 1.04133 0.601333 0.256667 -0.054 1.14133 0.601333 0.556667 -0.254 1.84133 0.901333 1.35667 -0.054 2.04133 0.401333 1.55667 -0.254 2.34133 0.701333 2.05667 0.746 2.64133 0.801333 0.556667 -0.254 1.84133 1.00133 0.456667 -0.254 1.34133 0.301333 0.256667 -0.454 1.84133 0.201333 1.85667 -0.054 2.34133 1.10133 0.456667 0.346 1.84133 1.20133 0.556667 0.046 1.74133 0.601333 0.156667 -0.054 1.04133 0.601333 1.05667 0.046 1.64133 0.901333 0.856667 0.046 1.84133 1.20133 1.05667 0.046 1.34133 1.10133 -0.0433333 -0.354 1.34133 0.701333 0.956667 0.146 2.14133 1.10133 0.856667 0.246 1.94133 1.30133 0.856667 -0.054 1.44133 1.10133 0.456667 -0.554 1.24133 0.701333 0.656667 -0.054 1.44133 0.801333 0.356667 0.346 1.64133 1.10133 0.0566667 -0.054 1.34133 0.601333
2.计算B的协方差矩阵C:
3.计算协方差矩阵C的特征值和特征向量。
C=V*S*V-1
S=
4.2248414 0 0 0
0 0.24224437 0 0
0 0 0.078524387 0
0 0 0 0.023681839
V=
0.36158919 0.65654382 -0.58100304 0.3172364
-0.082268924 0.72970845 0.596429220 -0.3240827
0.85657212 -0.17576972 0. 072535217 -0.47971643
0.35884438 -0.074704743 0.54904125 0.75113489
4.选取大的特征值对应的特征向量,得到新的数据集。
特征值是由大到小排列的,前两个特征值的和已经超过了所有特征值之和的97%。我们取前两个特征值对应的特征向量,得到一个4×2的矩阵M。令A'150×2=A150×4M4×2,这样我们就把150×4的数据A集映射成了150×2的数据集A',特征由4个减到了2个。
A'=
![](http://pic002.cnblogs.com/images/2012/103496/2012072919224882.png)
鹫尾花数据集共分为3类花(前50个样本为一类,中间50个样本为一类,后50个样本为一类),从上图可以看到把数据集映射到2维后分类会更容易进行,直观上看已经是线性可分的了,下面我们用自组织映射网络对其进行聚类。
当然我们已知了有3类,所以在设计SOFM网络时,我把竞争层节点数设为3,此时的聚类结果是前50个样本聚为一类,后100个样本聚为一类。当把竞争层节点数改为4时,仅第2类中的3个样本被误分到了第3类中,整体精度达98%!
相关文章推荐
- 用Python从零实现贝叶斯分类器的机器学习的教程
- My Machine Learning
- 机器学习---学习首页 3ff0
- Spark机器学习(一) -- Machine Learning Library (MLlib)
- 反向传播(Backpropagation)算法的数学原理
- 关于SVM的那点破事
- 也谈 机器学习到底有没有用 ?
- TensorFlow人工智能引擎入门教程之九 RNN/LSTM循环神经网络长短期记忆网络使用
- TensorFlow人工智能引擎入门教程所有目录
- 如何用70行代码实现深度神经网络算法
- 量子计算机编程原理简介 和 机器学习
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
- 已经证实提高机器学习模型准确率的八大方法
- 初识机器学习算法有哪些?
- 机器学习相关的库和工具
- 10个关于人工智能和机器学习的有趣开源项目
- 机器学习实践中应避免的7种常见错误
- 机器学习常见的算法面试题总结
- 机器学习书单
- 北美常用的机器学习/自然语言处理/语音处理经典书籍