呐你们要的算法(二)No.20
今天聊聊PCA算法。
PCA(Principal Component Analysis),主成分分析,是什么玩意呢?
就是一个将一个n维的特征数据降低到k维的算法。
有小伙伴就要问了,说我的特征也就几十个吖,这样做有什么用吖?
那确实没什么卵用,对于维度太低的数据,PCA确实起不到什么大的作用,但是也可以作为一个特征清洗的前置,可能会有一点点提升喔。
但是现在很多数据动辄几千维几万维,甚至几百万维,在这种情况下,不对数据进行降维就交给其他的机器学习模型,可能学个几年都学不出来,这是非常有可能的。所以在这种场景下,数据降维变得特别重要。
那怎么降呢?降维不就损失一些特征了吗?那还怎么把他们区分开吖?那我大数据不就变成小数据了?
确实降维会造成一些信息的损失,所以我们也要尽量避免信息过多损失。但是你还真别说,有时候信息的损失,会顺便带走一些噪声,效果反而更好,这也说不定。
总之,安心安心,数据量不会变小,只是把现有的n维空间的数据,映射到k维的超平面上面去。比如从二维的面,映射到一维的线上面去,而且这样做并不妨碍把他们分开,这不就达到降维的目的了吗?
是的,其实PCA就是在做这样的事情,只是维度太高可能不太好想象,但是总体就是跟上面是一样的。
PCA就是在尽量少降低样本之间的可分类性的同时,去将数据进行降维。那怎么做呢?这个时候要谈到一个东西叫协方差,就是两个变量之间的相关性,数值越大代表两个变量的趋势是同向的,为负值代表两个变量的趋势是相反的,数值为0代表不相关。
好了,那这样代表什么呢?就是如果两个变量他们之间的正相关性非常强,那我就可以理解去掉他们其中一个,对我的结果并不会造成什么非常大的影响,总体数据还是可分的,而且还少了一个维度的数据,模型训练起来也比较快。
举个🌰。
在我们实际统计的过程中,拿到两个特征。一个是买书数量,一个是买书开销。根据经验,这两个特征应该是正相关的嘛,这两个都是代表着一个趋势,买书数量越多一班来说买书开销越大,所以就算去掉其中一个也不会对分类结果造成比较大的影响(硬造的例子,不要吐槽)。
好了终于要正儿八经说PCA的事情了。
假设有m条数据,n个特征,需要降低到k个特征。原始数据表示为一个m*n的矩阵X。
PCA分六步走。(下面图里计算结果是错的,计算过程是对的,懒得重做)
1、对矩阵X进行转置。
2、矩阵进行零归均值化。
3、对X进行变换,也就是Cov = X * X.T / m,得到协方差矩阵
4、对协方差矩阵进行求特征值,进行对角化。
5、对特征值按行进行排序,然后取前k项得到矩阵K。
6、Y=KX则成为降维后的的矩阵。
其实整体来说就三步是核心,求协方差矩阵,求特征值,对特征值排序取前k。至于说k这个参数怎么取呢,业界的经验值是90% - 95 % 特征值,没什么权威的说法,只能说看情况。
PCA是一个无监督的算法,有什么特征值特别多的,丢进去看看呗,反正又不亏。
好了到这里PCA也就讲完了,下面讲点什么好呢?大家再留言告诉我吧。