可以做网站高仿服装吗,做网站需要多长时间才能做好,陕西咸阳做网站的公司,网页设计尺寸1080文章发布于公号【数智物语】 (ID#xff1a;decision_engine)#xff0c;关注公号不错过每一篇干货。来源 | SAMshare(id:SAMshare)作者 | samshare本次主要讲解的内容就是特征降维#xff0c;主要涉及PCA以及一些常见分析方法。01Index一#xff0c;PCA降维算…文章发布于公号【数智物语】 (IDdecision_engine)关注公号不错过每一篇干货。来源 | SAMshare(id:SAMshare)作者 | samshare本次主要讲解的内容就是特征降维主要涉及PCA以及一些常见分析方法。01Index一PCA降维算法 1. 内积与投影 2. 基与基变换 3. 方差 4. 协方差 5. 协方差矩阵 6. 协方差矩阵对角化 7. PCA算法步骤 8. PCA实例 9. PCA的Python操作二LDA降维算法 1. LDA介绍 2. LDA的优缺点 3. LDA的Python操作在机器学习中我们有的时候会遇到维度灾难当模型的训练入参有很多的时候往往是需要很多的时间和资源去训练的而这不是我们想要看到的结果。一般情况下我们都是会对源数据进行特征处理提取对预测更加有效的特征。有的时候我们会得到比较高维的特征向量而这里面往往包含很多的噪声与冗余数据所以我们需要通过降维的方式去获取特征更加有效的信息一来提高特征表达能力二来提高模型训练的效率。02PCA降维算法PCA(Principal Components Analysis)即主成分分析是降维操作中最经典的方法它是一种线性的、无监督、全局性的降维算法旨在找到数据中的主要成分提取主成分从而达到降维的目的。PCA是一种无监督算法也就是我们不需要标签也能对数据做降维这就使得其应用范围更加广泛了但是PCA也有一个问题原来的数据中比如包括了年龄性别身高等指标降维后的数据既然维度变小了那么每一维都是什么含义呢这个就很难解释了所以PCA本质来说是无法解释降维后的数据的物理含义。在了解PCA之前有一些基础的名词需要温习一下01内积与投影内积运算将两个向量映射为一个实数下面是两个维数相同的向量的内积假设存在两个点A,B其在坐标轴的位置如下图我们从A向B引一条垂线也就是A在B上的投影其夹角为a则投影的矢量长度为|A|cos(a)其中是向量A的模也就是A线段的标量长度。而内积的另一种表现形式为也就是说当B的模为1的时候也就是单位向量的时候内积可以表示为也就是A与B的内积值等于A向B所在直线投影的矢量长度。02基与基变换基可以理解为单位向量基都是正交的(即内积为0直观来说就是相互垂直)并且是线性无关的。基变换指的是当前向量和一个基进行内积运算得到的结果作为新的坐标分量。假设存在一个点(3,2)一般我们都会取(1,0)和(0,1)为基也就是我们的X和Y轴方向。如果我们取(1,1)和(-1,1)为我们的基但我们希望基的模为1这样子会方便计算所以可以除以当前的模长所以上面的基就变成了如下图所示所以进行基变换只需要进行一次内积运算03方差一个字段的方差可以看做是每个元素与字段均值的差的平方和的均值即一般我们都会把均值为化为0即进行一次变换所以方差可以表示为04协方差如果单纯地选择方差最大的方向则无法保证两个字段之间相互独立因为我们需要的是尽可能多地保留原始信息但又是相互独立这里我们引入一下概念协方差用来表示两个字段的相关性公式为协方差度量各个维度偏离其均值的程度。协方差的值如果为正值则说明两者是正相关的(从协方差可以引出“相关系数”的定义)结果为负值就说明负相关的如果为0也是就是统计上说的“相互独立”。所以我们的目标就是让两个字段的协方差为0为了协方差为0选择第二个基的时候必须要在第一个基的正交方向上选择。我们说的PCA降维就是把N维的特征降到K维(0 K N)也就是说要选择k个单位正交基并且尽可能让方差最大化。05协方差矩阵在统计学与概率论中协方差矩阵的每个元素是各个向量元素之间的协方差是从标量随机变量到高维度随机向量的自然推广。假设存在矩阵X其协方差矩阵为可以看出协方差矩阵的对角线元素为两个字段的方差而其他元素为矩阵的协方差按照我们之前的说法我们需要得到协方差为0并且方差最大的转换。06协方差矩阵对角化根据上述推导我们发现要达到优化目前等价于将协方差矩阵对角化即除对角线外的其它元素化为0并且在对角线上将元素按大小从上到下排列这样我们就达到了优化目的。这样说可能还不是很明晰我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系。设原始数据矩阵X对应的协方差矩阵为C而P是一组基按行组成的矩阵设YPX则Y为X对P做基变换后的数据。设Y的协方差矩阵为D我们推导一下D与C的关系我们要找的P不是别的而是能让原始协方差矩阵对角化的P。换句话说优化目标变成了寻找一个矩阵P满足PCP^T是一个对角矩阵并且对角元素按从大到小依次排列那么P的前K行就是要寻找的基用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。07PCA算法步骤设有mXn维数据。1)将原始数据按列组成n行m列矩阵X2)将X的每一行(代表一个属性字段)进行零均值化即减去这一行的均值3)求出协方差矩阵C1mXXT4)求出协方差矩阵的特征值及对应的特征向量5)将特征向量按对应特征值大小从上到下按行排列成矩阵取前k行组成矩阵P6)YPX即为降维到k维后的数据08PCA实例假设存在2维数据,需要将其降至1维。1)均值归0目前每个维度的均值均为0无需变换。2)求协方差矩阵3)求解特征值以及特征向量可以参考https://jingyan.baidu.com/article/27fa7326afb4c146f8271ff3.html 4)标准化特征向量5)得到对角矩阵P并验证对角化6)因为需要得到1维矩阵因此用P的第一行乘以原矩阵即可降维投影如下图所示09Python操作# 使用sklearn进行PCA降维import numpy as npfrom sklearn.decomposition import PCAX np.array([[-1,2,66,-1], [-2,6,58,-1], [-3,8,45,-2], [1,9,36,1], [2,10,62,1], [3,5,83,2]]) #导入数据维度为4print(原矩阵X, X)pca PCA(n_components2) #降到2维pca.fit(X) #训练newXpca.fit_transform(X) #降维后的数据print(贡献率, pca.explained_variance_ratio_)print(降维后矩阵, newX)参数解释n_components: 我们可以利用此参数设置想要的特征维度数目可以是int型的数字也可以是阈值百分比如95%让PCA类根据样本特征方差来降到合适的维数也可以指定为string类型MLE。copybool类型TRUE或者FALSE是否将原始数据复制一份这样运行后原始数据值不会改变默认为TRUE。whitenbool类型是否进行白化(就是对降维后的数据进行归一化使方差为1)默认为FALSE。如果需要后续处理可以改为TRUE。explained_variance_ 代表降为后各主成分的方差值方差值越大表明越重要。explained_variance_ratio_ 代表各主成分的贡献率。inverse_transform() 将降维后的数据转换成原始数据Xpca.inverse_transform(newX)。output03LDA降维算法线性判别分析(Linear Discriminant AnalysisLDA)是一种有监督学习算法也是经常被拿来降维它和PCA的区别在于是否存在标签其中心思想就是—— 最大化类间距离和最小化类内距离。而PCA的不足在于不能很好地分开不同类别的数据如下图LDA算法既可以用来降维又可以用来分类但是目前来说主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时LDA是一个有力的工具。下面总结下LDA算法的优缺点01优点1)在降维过程中可以使用类别的先验知识经验而像PCA这样的无监督学习则无法使用类别先验知识。2)LDA在样本分类信息依赖均值而不是方差的时候比PCA之类的算法较优。02缺点1)LDA不适合对非高斯分布样本进行降维PCA也有这个问题。2)LDA降维最多降到类别数k-1的维数如果我们降维的维度大于k-1则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。3)LDA在样本分类信息依赖方差而不是均值的时候降维效果不好。4)LDA可能过度拟合数据。03Python操作import numpy as npfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysisX np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])y np.array([1, 1, 1, 2, 2, 2])clf LinearDiscriminantAnalysis()clf.fit(X, y) LinearDiscriminantAnalysis(n_componentsNone, priorsNone, shrinkageNone, solversvd, store_covarianceFalse, tol0.0001)print(clf.predict([[-0.8, -1]]))04Reference1)Reference十分钟搞定PCA主成分分析https://blog.csdn.net/tangyudi/article/details/80188302#comments 2)PCA的数学原理http://blog.codinglabs.org/articles/pca-tutorial.html星标我每天多一点智慧