全部版块 我的主页
论坛 数据科学与人工智能 人工智能 机器学习
2919 0
2017-12-08

数据降维处理:PCA之特征值分解法例子解析



在数据预处理:PCA原理推导中我们说到,求数据 X 的 k 个主成分就是求解 QQ截图20171208174843.jpg 这个方阵的前 k 个最大特征值对应的特征向量。

我们还是拿高三101班的数学和外语的分数,要完成排名任务时,现在要对这批数据由二维降为一维,学生们的分数为了表达和书写的方便,拿出5个样本,矩阵 X的形状为:5个样本点2列特征,
   数学   外语
X = [  [108, 100],
          [ 82, 85],
          [75,  84],
          [120, 109],
          [99, 91]  ]

还记得我们设定的那个X吗?长这样:
QQ截图20171208174850.jpg

X是要按照样本点按axis = 1(列轴)排序的,所以重新将 X 变为这样:
      
X =[  [108, 82, 75, 120, 99],    #数学成绩
         [100, 85, 84, 109,  91]  ]  #外语成绩
QQ截图20171208174859.jpg


画出以上5个点,找出这5个点的第一主成分方向,然后以此为轴,将5个样本投影到这个轴上,就会抓取5个样本的主要特征,这个主成分提取的矩阵分解法的操作步骤如下所示:

第一步,X的shape找对了(一般矩阵运算和经常使用的Numpy等包,看一下某个矩阵和运算后的矩阵的 shape 是调试程序,寻找bug,经常用到的。),还要把每个特征去均值,最终 X变为如下才和昨天的推导中使用的 X对应上了吧,
X=  [ [ 11.2, -14.8, -21.8,  23.2,  2.2],
         [ 6.2,  -8.8,  -9.8, 15.2,  -2.8] ]

第二步,就该求方阵 QQ截图20171208174911.jpg 了,在numpy中求得方阵为:

[ [1362.8,   759.8],
  [  759.8,   450.8] ]

今天有的小伙伴问我,小编,我们书上学得网上看到的都还得除以每一维元素的个数,此处等于5,为什么你这里没有除呢,是不是拉下了?其实这里除以5,还是不除以5,都对最后的求第一主成分的方向没有任何影响吧,我们关心的是它的方向,而不是向量的大小,只要方向ok,就ok。

第三步,得到了这个方阵后,下一步该求它的特征值和对应的特征向量了吧,我们直接在numpy中求出上面协方差矩阵的特征值和对应的特征向量:
特征值有2个:[ 1792.93319541,   20.66680459]
分别对应的特征向量的矩阵如下,注意,向量一般指列向量,所以特征值1792对应的特征向量为第一列,
[[0.87022851, -0.49264829],
[ 0.49264829, 0.87022851] ]

第四步,选取最大特征值对应的特征向量:[0.87022851,  0.49264829],可以看到numpy给出的特征向量已经标准化(模等于1)。

第五步,我们已经求出了第一主特征对应的方向向量了,这一步自然是将数据 X 投影到这个标准化后的特征向量 fpc = [0.87022851,  0.49264829] 上,还记得我们的数据在刚开始做的转置吗,一般习惯将 X 标记为 [样本个数,特征数]的二维数组吧,但是在此处,我们为了选取第一主成分向量而转置了吧,我们还是再回到熟悉的节奏上吧,投影上次说过了,不就是点乘特征向量标记的主轴吗,因此借用numpy的表示:
(X.T).dot(fpc.T)
= [12.80097873, -17.21468692, -23.7989348 , 27.67755548,   0.53508751]

好了,我们成功地将一个二维数据降维成1维了吧,以上就是整个的操作步骤。

展示下[0.87022851,  0.49264829] 这个向量定出的主轴方向吧,可以看到这5个点投影到这个新轴上,看着就是散的最开的方向。
QQ截图20171208174922.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群