错误使用 eig 输入矩阵包含 nan 或 inf。_使用numpy来理解PCA和SVD

9e94b218c6d06272c61845e7d6743b49.png

前言

线性代数是高等数学里面非常重要的一门课程,可惜在学校的时候是一种自底向上的学习方式,并不知道学出来有什么用,以致彻底沦为应试教育。后来在工作中接触了机器学习,才真正看到了“数学之美”,才发现线性代数是多么的优雅多么的有用。

今天我们来看看下线性代数中非常重要的一个知识点奇异值分解SVD Singular value decomposition。SVD在数据科学当中非常有用,其常见的应用包括: - 自然语言处理中的Latent Semantic Analysis - 推荐系统中的Collaborative Filtering - 降维常用套路Principal Component Analysis

LSA已经在前文中有所讲解,CF的话后面在推荐系统的专题中来写,今天主要聊聊PCA,以及SVD在PCA中的重要作用。同样延续我们“手撕”的传统,使用numpy来理解其中的原理。


PCA

Principal component analysis即主成分分析,是机器学习中一种非常常用的降维方式。其发源也是源自于早期的计算机处理能力有限,当数据样本的维度很高时,预先去除掉数据中的一些冗余信息和噪声(降维),使得数据变得更加简单高效,节省时间和成本。

在深度学习时代,更强调的是原始数据的直接输入,再通过神经网络来做降维工作,最典型是场景就是计算机视觉,直接输入原始图片像素信息,通过CNN卷积层MaxPooling层来进行降维。因此PCA逐渐开始淡出人们的视线,通常是作为一种数据可视化的手段(二维图表无法展示多维的数据样本)。

其实,在深度学习目前尚未全面攻克的结构化数据领域,PCA仍然有较多的用,其数据处理的思路依然值得我们去学习揣摩。

PCA正常解法

PCA算法的本质,其实就是找到一些投影方向,使得数据在这些投影方向上的方差最大,且这些投影方向是相互正交的。找到新的正交基后,计算原始数据在这些正交基上投影的方差,方差越大,就说明对应正交基上包含了更多的信息量。

关于原始数据的方差,最好的一个工具就是协方差矩阵了。协方差矩阵的特征值越大,对应的方差也就越大,在对应的特征向量上投影的信息量就越大。因此,我们如果将小特征值对应方向的数据删除,就可以达到降维的目的。因此,在数学上,我们可以把问题转化为求原始数据的协方差矩阵,然后计算协方差矩阵的特征值与特征向量。

对于广大程序员来说,学习机器学习最重要的一个坎还是数学。很多实际的代码其实是公式推导后的结果的代码实现,如果没有理清公式推导的过程,那么最后肯定是一头雾水。所以,克服心中的恐惧,翻出压在箱底的《线性代数》,我们上。

首先,求原始数据X的协方差矩阵C,将原始矩阵中心化后,做如下操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值