最近看了很多关于主成分分析的视频和博客,大多在讲推导过程,有些晦涩难懂,而且不会应用。所以就决定干脆先看看怎么应用并计算的吧
此处采用主成分分析进行特征选择,其中用到的数据来自王宏志老师编著的《大数据分析原理与实践》一书。
主成分分析多数用在那些特征和类标签是相关的,但这些特征里面存在噪声和冗余。使用PCA可以减少特征数,减少噪声和冗余,减少过度拟合的可能性。
什么是主成分分析
主成分分析采用数据降维的方法,找出几个综合变量来代替原来的变量,并且要尽可能的代表原来变量的信息,这些综合变量要互不相关。
主成分分析的思想
将n维特征映射到k维上(k<n),这k维是全新的正交特征。得到的k维特征称为主元。注意:这k维特征是重新构造出来的,不是简单地从n维特征中去除其余的n-k维特征。
用主成分分析进行降维
这里用到一组数据(此处的x和y可以看作两个特征)
Data
x | y |
18.8 | 5.3 |
65.8 | 4.7 |
3.6 | 2.0 |
14.5 | 5.1 |
52.5 | 4.8 |
41.2 | 8.8 |
77.9 | 6.8 |
11.7 | 3.4 |
2.0 | 27.5 |
第一步,分别求x和y的平均值,然后对所有的样例都减去对应的平均值,这里
,每个样例减去均值后得到
DataAdjust
x | y |
-13.2 | -2.3 |
-33.8 | -2.9 |
-28.4 | -5.6 |
17.5 | -2.5 |
20.5 | -2.8 |
9.2 | 1.2 |
45.9 | -0.8 |
-20.3 | -4.2 |
-30 | 19.9 |
第二步,求特征协方差矩阵,如果数据是3维的,那么协方差矩阵是
此例中只有x和y,故协方差矩阵是个二维矩阵
求得
第三步,求协方差的特征值和特征向量
特征值
特征向量
其中52.9003和783.6058是两个特征值。特征值52.9003对应的特征向量是
。特征值783.6058对应的特征向量是
。 这里的特征向量都归一化为单位向量
第四步,将特征值按照从小到大的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成的特征向量矩阵
此例中只有两个特征值,因此,我们只选取一个特征值,即783.6058,对应的特征向量是
第五步,将样本点投影到选取的特征向量上(最后一步的矩阵乘法就是将原始样本点分别往特征向量对应的轴上做投影)。
假设样例树为m,特征数为n,减去均值后的样本矩阵为DataAAdjust(m*n),协方差矩阵是m*n,选取k个特征向量组成的矩阵为EigenVectors(n*k),那么 投影后的数据FinalData为FinalData(m*k)=DataAdjust(m*n)x EigenVectors(n*k)
此例中FinalData(10*1)=DataAdjust(10*2)x EigenVectors(2*1)
得到的结果是
Transformed Data (Single eigenvector)
x |
11.0627 |
-36.2729 |
23.2126 |
-19.6830 |
-22.9410 |
-8.0747 |
-46.4212 |
16.4139 |
47.8576 |
这样,我们就将原始数据的特征由2维降到了1维,这1维就是原始特征在1维上的投影。该1维特征基本上就代表了原来的2维特征