接受挑战:数据降维的实战分析

  SVD分解过程

  我们的原始数据样本:

  A=np.array([[2, 4], [1, 3],[0,0]])

  A

  array([[2, 4],

  [1, 3],

  [0, 0]])

  #转化为我们想要的A,将特征定为 axis=0

  A=A.T

  A

  array([[2, 1, 0],

  [4, 3, 0]])

  调用 Numpy中的奇异值分解API:

  #奇异值分解

  np.linalg.svd(A)

  得到的结果为三个数组 U*Sigma*V转置

  (array([[-0.40455358, -0.9145143 ],

  [-0.9145143 , 0.40455358]]),

  array([ 5.4649857 , 0.36596619]) ,

  array([[-0.81741556, -0.57604844, 0. ],

  [-0.57604844, 0.81741556, 0. ],

  [ 0. , 0. , 1. ]]))

  现在看下数据A是如何奇异值分解的:

  #U矩阵是通过A.dot(A.T)的特征值求得的(按照特征值由大到小排序)

  np.linalg.eig( A.dot(A.T) )

  (array([ 0.13393125, 29.86606875]), array([[-0.9145143 , -0.40455358],

  [ 0.40455358, -0.9145143 ]]))

  #奇异值(特征值的开根号)

  np.sqrt(29.86606875),np.sqrt(0.13393125)

  #V的转置是通过A.T.dot(A)的特征值求得的(按照特征值由大到小排序)

  np.linalg.eig(A.T.dot(A))

  (array([ 29.86606875, 0.13393125, 0. ]),

  array([[ 0.81741556, -0.57604844, 0. ],

  [ 0.57604844, 0.81741556, 0. ],

  [ 0. , 0. , 1. ]]))

  03

  —

  SVD降维实例

  对于SVD的奇异值也是按照从大到小排列,而且奇异值梯度很大。在昨天,我们介绍过:在很多情况下,前10%,甚至有的1%的奇异值的和就占了全部的奇异值之和的99%,这是什么意思呢,这就表示原矩阵可以被压缩为一个很小的矩阵,并且还能保证其主要成分信息不会丢失。

  也就是说,我们也可以用最大的 k 个的奇异值和对应的左右奇异向量来近似描述原始矩阵数据,如下图表达的含义:

  

  接下来,我们实际演练下这个过程,利用 numpy库随机生成一个5*9的二维数组(也可以称为矩阵吧)A:

  array([[6, 4, 9, 4, 2, 7, 6, 2, 6],

  [6, 3, 0, 5, 6, 2, 5, 4, 8],

  [6, 0, 4, 2, 3, 5, 4, 9, 7],

  [6, 1, 3, 6, 5, 1, 3, 7, 1],

  [4, 1, 6, 4, 2, 4, 1, 3, 6]])

  那么如何先进行特征降维呢? 比如降维成 5* r 列,只要降维后的 r列能近似表达原矩阵就行吧,已知奇异值分解的公式

  

  因此如果想要把A降维成特征r个,那么只需要上个近似等式两边同乘以 Vr*n ,如下:

  

  因为Vr*n是正交矩阵,所以V的转置等于V的逆,所以,上式进一步化简为:

  

  这样,近似等号的右侧就是一个m*r的矩阵,它是将A矩阵压缩后的近似矩阵,V就是中间的变换矩阵。

  借助numpy的API,我们发现取取3个奇异值,就已经表达了84%的奇异值的和,所以取前3个奇异值,因此,求出 U * Singular等于如下:(取小数点后1位显示)

  array([[-15.3, 6.3, -0.8],

  [-13.2, -3.9, -4.9],

  [-14.5, -1.4, 2.9],

  [-11.2, -4.6, 2.5],

  [-10.9, 2.6, 0.6]])

  这就完成了对特征的压缩,将含有9个特征的数据,最后压缩为3个特征。那么如何来按照行对数据压缩呢,和上面的原理差不多,在奇异值分解的等式两侧乘以 U的转置,就可以推导出下式,等号右边不就是 r*n的按行压缩后的矩阵吗!

  

  至此,SVD按照特征压缩,和数据样本压缩,两个方向的压缩方法和例子就说完了,接下来看看它的实际应用吧。

  04

  —

  数据压缩的实际应用

  例如sklearn的 iris 经典数据集中,iris的4个特征,被PCA后,只提取了其中2个特征,便表达了其中的主要方差,这是一个数据降维的典型demo 。

  

  另外,PCA的特征值分解和奇异值分解在图像处理,压缩方面也有很广的应用,可以将图像的数据做奇异值分解,然后降维处理,例如下面的图片,经过奇异值分解法获得的主成分提取后压缩后的图像,可以看到基本保留了原来的图像主要信息。

  

  简单总结下,重点介绍了奇异值分解法压缩矩阵的原理,和一个实际的例子,最后实战介绍了PCA的实际应用。前面介绍了决策树的原理和例子解析,明天,基于次,再介绍一种经典的机器学习集成算法,XGBoost,它可是中国的科学家发明的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值