网站流媒体播放如何做数字营销招聘
web/
2025/9/28 16:26:09/
文章来源:
网站流媒体播放如何做,数字营销招聘,有什么页游传奇平台好,如何做一个app软件需要多少钱今天是机器学习专题的第27文章#xff0c;我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法。我们都知道#xff0c;图片格式当中有一种叫做svg#xff0c;这种格式的图片无论我们将它放大多少倍#xff0c;也不会失真更不会出现边缘模糊的情况。原因也很简…今天是机器学习专题的第27文章我们一起来聊聊数据处理领域的降维(dimensionality reduction)算法。我们都知道图片格式当中有一种叫做svg这种格式的图片无论我们将它放大多少倍也不会失真更不会出现边缘模糊的情况。原因也很简单因为这种图片是矢量图一般的图片存储的是每一个像素点的颜色值而在矢量图当中我们存储的是矢量也就是起点终点以及颜色。由于矢量图只记录起点终点所以无论我们如何放大图片都不会失真而传统的图片就做不到这一点。其实svg就相当于图片的降维我们将上百万的像素点简化成了若干个矢量完成了图片的存储大大减少了数据的规模。机器学习领域中的降维算法其实也是差不多的原理。背景与原理现在降维算法这个词已经越来越少听到了在面试当中也很少被提及这是有时代因素的。因为现在的计算资源以及存储资源越来越廉价了在以前很难承担的计算量现在变得越来越轻松。所以相对而言降维算法没有之前热门了也越来越少在面试当中出现。从现状倒推回从前我们大概可以猜到在若干年以前当我们面临海量无法承担的数据的时候降维算法是多么的重要。因为我们都知道机器学习训练的速度和它使用的数据量有这非常密切的关系使用10维特征和使用100维特征的模型的收敛速度至少是10倍以上的差距。那么自然而然地我们就会想到如果有某种方法可以将100维的数据”压缩“成10维该有多好但问题来了数据不是实体我们真的可以随意压缩吗这其中的原理是什么呢最根本的原理是既然特征可以用来训练模型那么特征的分布和label的分布必然是有一定的内在联系的。也就是说数据并不是随意分散的而是彼此之间有联系的。我们各种各样的压缩算法本质上都是利用了数据之间的关联。举个不是非常恰当但是很直观的例子。假设说我们现在有三个特征分别是一个人的考试成绩、智商以及努力程度。我们会很明显地发现考试成绩和智商以及努力程度这两个特征高度相关。如果我们能够找到它们之间的关联我们完全可以去掉考试成绩这个特征而通过智商、努力程度和它的这种关联来推算出这个值来。当然既然是推算出来的显然会和原本的值有一定的误差这也是不可避免的。从这个例子当中我们可以明确两点首先压缩数据是利用的数据分布的关联或者是特性如果是完全随机的数据是无法降维压缩的。其次降维压缩必然会带来信息损失也就是误差这是不可避免的。降维算法降维压缩的算法有好几种常见的有PCA、ICA和FA下面我们来简单介绍一下。首先是PCAPCA的英文全称是Principal Component Analysis即主成分分析。这种方法的主要原理是对数据进行坐标变换即将数据从原来的坐标系更换到新的坐标系。新的坐标轴是通过最大方差理论推导得到的即新的坐标轴包含了原始数据中大部分的方差这里的方差可以理解成信息。ICA的英文是Independent Component Analysis即独立成分分析在这个算法当中它假设数据是通过N个数据源生成的。假设数据是这N个数据源数据混合观察的结果。这些数据源在统计上是互相独立的如果数据源的数目少于原始特征的数目也可以完成降维。最后是FA即Factor Analysis即因子分析。在因子分析当中我们假设样本当中存在一些隐变量我们假设样本是这些隐变量和一些噪音的线性组合。那么只要这些隐变量的数量少于原始特征的数量我们就可以用这些隐变量来作为新的数据从而实现降维。这三种降维算法虽然各不相同但是核心的思路都是一致的。都是假设数据的分布满足某一种特性通过利用这一种特性来对数据进行压缩。这其中使用范围最广的是PCA所以我们着重来了解一下PCA的原理以及实现。理论推导关于PCA算法有两种通俗的解释一种是最大方差理论另外一种是最小化降维损失这两个思路推导出的结果是一样的。相比之下最大方差理论更加容易理解一些所以我们就选择最大方差理论来做个简单的解释。在信号系统当中我们普遍认为信号具有较大的方差而噪音拥有较小的方差。信噪比就是信号与噪声的方差比这个比值越大越好越大说明噪音越小信号的质量越高。比如下图当中的这个数据分布我们可以在原始数据当中找到两个正交轴根据方差最大理论我们会把方差大的那个轴看成是信号方差小的看成是噪音。根据这个思路最好的k维特征是将n维的样本转换成k维坐标之后拥有最大方差的k个。协方差到这里我们虽然知道了要获取方差最大的方向作为新的坐标轴但是如果我们直接去计算的话是会有问题的。最大的问题在于我们没办法选出K个来如果只是选择类似的K个方向这K个轴的信息都差不多会丢失大量的信息。所以我们不仅要选择K个轴而且要保证这K个轴尽可能线性无关。要做到线性无关也就是说这K个轴应该是彼此正交的。如果两个轴正交可以进一步得到这两个轴的协方差为零。为了简化运算我们可以先让原始数据全部减去各自特征的均值。在去除均值之后两个特征的协方差可以表示为两个特征正交等价于它们的协方差为0我们假设去除了均值之后的矩阵为X我们来写出它的协方差矩阵。协方差矩阵对于去除了均值的矩阵X而言有一个性质是它的协方差矩阵X_cov1/m X X^T。我们可以来简单证明一下假设矩阵当中只有两个特征a和b那么我们将它按行写成矩阵我们假设X的协方差矩阵为C那么C是一个对称矩阵它的对角线上的元素表示各个特征的方差其他的元素则表示特征之间的协方差。我们的目标是希望能够得到一个类似形式的对角矩阵也就是说除了对角线之外的其余元素全为0这样这些特征之间就是正交矩阵我们根据对角线上的值挑选出方差最大的K个特征即可。我们的目的和方向已经很明确了距离终点只有一步之遥但是这一步怎么迈过去呢对角化这里我们采用逆向思维来思考假设我们已经找到了矩阵P通过P对X进行线性变换的结果是Y那么YPX我们假设Y的协方差矩阵为D那么根据刚才我们推导的结论可以得到我们希望D是一个对角矩阵所以我们要寻找的就是PP找到之后一切都迎刃而解。因为D是一个对角矩阵我们将它对角的元素从大到小排列之后对应P的行组成的矩阵就是我们寻找的基。我们用P的前K行组成的新矩阵对原始数据X进行线性变换就将它从n维降低到了K维。所以问题就只剩下了一个这个P矩阵要怎么求呢我们干想是很困难的其实数据家们已经给了我们答案就是C矩阵的特征向量。由于C是对称矩阵根据线性代数的原理它有如下两条性质对称矩阵不同的特征值对应的特征向量必然正交特征值是实数K重特征值对应的线性无关的特征向量刚好有K个根据这两条性质我们可以得到对于n*n的矩阵C来说我们可以找到n个特征向量 e_1, e_2, ... , e_n。我们将它们按列组成矩阵我们通过E可以将C对角化我们对Lambda中的特征值从大到小排列选出前K个特征值对应的特征向量组成矩阵即得到了最终的结果P。最后我们整理一下上述的整个过程。每一维特征减去平均值计算协方差矩阵求解协方差矩阵的特征值和特征向量对特征值降序排序选择其中最大的K个然后将对应的K个特征向量作为行向量组成特征向量P转换之后的结果X_t PX我们把这个逻辑整理一下写成代码import numpy as npdef pca(df, k): mean np.mean(df, axis0) new_df df - mean # 计算协方差矩阵也可以用公式自己算 cov np.cov(new_df, rowvar0) # 求解矩阵特征值和特征向量 eigVals, eigVects np.linalg.eig(np.mat(cov)) # 对特征值排序选最大的K个由于是从小到大排所以我们取反 eigValIndice np.argsort(-eigVals) # 构建变换矩阵 n_eigValIndice eigValIndice[:k] n_eigVect eigVects[:, n_eigValIndice] data_ret new_df.dot(n_eigVect) return data_ret实战验证为了验证程序效果我们找了一份经典的机器学习数据http://archive.ics.uci.edu/ml/datasets/SECOM。我们把它下载下来之后用pandas读入进来可以看到它的特征有590维展开看的话会发现特征当中有许多空值我们对它进行一个简单地预处理将空值替换成特征均值并且再读入label的值为了验证PCA降维的效果我们用同样一份数据用同样的模型比较一下做PCA之前和之后模型的效果。这里我选择的是随机森林其实不管用什么模型都大同小异。我们将数据拆分成训练数据与测试数据并且调用skelarn库当中的随机森林完成训练和预测最后计算模型在测试集当中的表现。说起来挺复杂但是由于sklearn替我们完成了大量的工作所以用到的代码并不多我们可以看到在PCA之前随机森林在测试集上的表现是92.3%的准确率。接下来我们用同样的数据和模型来验证PCA之后对于模型性能的影响。为了保证数据集的完全一致我们把测试集的随机种子也设置成一样。可以看到模型在测试集上的准确率完全一样说明PCA并没有过多降低模型的性能和我们的预期一致。总结在今天的文章当中我们详细介绍并推导了PCA背后的原理并采取实际数据集验证了PCA算法的效果。从最后的结果上来看虽然我们将590维的特征缩减到了10维但是模型的效果却几乎没有多大影响可见PCA的威力。当然这背后的因素很多除了PCA本身的原理之外和数据的分布以及训练测试样本的数量也有关系。在极端场景下可能特征的数量非常多含有大量的噪音如果我们不做降维直接训练的话很有可能导致模型很难收敛。在这种情况下使用降维算法是必要的而且会带来正向的提升。如果特征数量不多模型能够收敛使用降维算法可能没什么助益而且会稍稍降低模型的效果。但在一般的情况下数据集特征的分布也符合二八定律即20%的特征带来80%以上的贡献大部分特征效果不明显或者噪音很多。在这种情况下使用PCA进行降维几乎是一定起到正向作用的。当然在实际的应用场景当中降维算法用的越来越少除了计算能力提升之外另外一个很重要的原因是深度学习的兴起。深度神经网络本身就带有特征筛选的效果它自己会选择合适的特征组合达到最好的效果所以很多特征处理和降维等操作显得不是特别有必要了。虽然如此但是算法本身的思想还是很有借鉴作用PCA算法在Kaggle比赛当中使用频率也很高对它进行详细地了解和学习还是很有必要的。今天的文章就到这里如果喜欢本文可以的话请点个赞和关注吧给我一点鼓励也方便获取更多文章。本文始发于公众号TechFlow
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83423.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!