pca是特征选择,基于pca特征选择与特征提取

  pca是特征选择,基于pca特征选择与特征提取

  本文将目录问题引入到PCA 1的实现中。数据集加载2。数据预处理3。主成分分解3.1协方差矩阵构造3.2特征值分解3.3方差解释3.4降维投影3.5降维结果问题汇总附录

  问题介绍

  调用sklearn库时,可以使用decomposition . PCA(n _ components=2)将多维数据降维为二维。你对里面的流程一无所知,看起来就像一个心里没底的黑匣子。今天,感动的小馒头同学们将尝试回答以下问题。

  1)主成分分析PCA中的分解过程是怎样的?基于什么原理?

  2)与原始数据相比,它保留了哪些信息,丢失了哪些信息?如何科学地选择食材的数量?

  部分代码参考Sebastian Raschka的博客pca_in_3_steps,感谢原大神。

  PCA 1的实施。数据集加载是对其他学习资料的补充,所以概念部分在此不赘述。综上所述,我们将PCA应用于一个D维数据集,希望最大化M维子空间中保留的信息,最小化(D-M)维空间中丢失的信息。今天,在渐进码的形式中,通过结合图像来解释分解过程和主分量的选择。

  首先我们准备经典数据集iris,可以加载到sklearn数据库中。

  从sklearn导入数据集# load data iris=datasets . load _ iris()# help(datasets . load _ iris)#检查数据结构x=iris.data #每一行是一个观察值,每一列是一个变量y=iris . target print( X和y的形状,X.shape,y.shape, \n ,特征是,iris.feature_names, \n ,类是,iris。target _ names)X和y (150,4) (150,)的形状特征有[萼片长(cm),萼片宽(cm),花瓣长(cm),花瓣宽(cm)]类有[ setosa versicolor virginica ]2。在这一步的数据预处理中,我自己尝试了MinMax缩放。由于PetalLength特性的取值范围太大,缩放后,第三个和其余特性都被最小化。考虑到量级差异,很容易影响PCA这种距离敏感算法。所以采用原作者的Z-score归一化法,其他方法未经作者测试。

  来自sklearn。预处理导入standard scaler x _ STD=standard scaler()。Fit _ transform (x)关于数据库调整的细节,特别补充一下,有些数据是查阅资料时发现的,大神们会强调不同归一化方法的区别。例如,最容易与StandardScaler方法混淆的规格化器是这样组织的(描述引自官方的sklearn文档)

  标准缩放器-通过移除平均值并缩放至单位方差来标准化要素。

  聚焦,根据每一列(不同的特征)操作,利用样本均值/样本方差归一化器的相对差-具有至少一个非零分量的每个样本(即数据矩阵的每一行)独立于其他样本被重新缩放,使得其范数(l1、l2或inf)等于1。

  重点是按照每条线(不同的采样点)进行操作,将整条线归一化为单位距离。3.主成分分解3.1协方差矩阵的构造。这里,样本协方差矩阵通过其原始定义求解。I行和J列中的单个元素可以表示为Cov(X_i,X_j),其中X_i,X_j分别对应样本集的I列和J列特征数据,k表示观测值的序号(k=1,2,…,n)。有矩阵元素:

  C o v ( X i,X j )=1 n k=1 n ( x i,k e(Xi))(XJ,k e(XJ))cov(x _ { I },x _ { j })=\frac{1}{n}\sum^{n}_{k=1}(x_{i,k }-e(x _ { I })(x _ { j,k} - E(X_{j})) Cov(Xi,Xj )=n1 k=1n (xi,k e(Xi))(XJ,k e(XJ))

  将numpy作为npX_train=X_std #导入创建对originX_mean=np.mean(X_train,axis=0) #大小为(4,)n=X _ train . shape[0]X _ cov=(X _ train-X _ mean)的向量的引用。T @ (x _ train-x _ mean)/NX _ cov #一个大小为(4,4)的对称矩阵可以通过NP得到。封面(x _火车.同时,更直观地,我们将协方差矩阵可视化:

  图1)虹膜数据集的样本协方差矩阵。图纸代码请参考附录2。

  3.2特征值分解对于一个对称矩阵,不同特征值对应的特征向量必须相互正交。如果将这组特征向量分别归一化,就可以得到一组单位正交向量,进而可以形成一个正交矩阵。

  #计算协方差矩阵的特征值和特征向量,导入numpy为npeig _ val,eig _ vec=np.linalg.eig (x _ cov) #检查得到的矩阵是否为酉正交矩阵,即EIG _ vec . t:NP . testing . assert _ array _ almost _ equal(1.0,np.linalg.norm (ev)) #这里直接用assert,标准太高,会报浮点错误# assert 这是numpy自带的,默认精度是六位数,可以设置参数decimal来修改# Method 2。 也可以用u,s,v=np.linalg.svd(X_std。t),EIG _ vec=UPrint(特征值\ n ,EIG _瓦尔, \内根向量\ n ,EIG _ vec)特征值[2.93808505 0.9201649 0.14774182 0.02085386]特征向量[[0.52106591-0.37741762-0.71956635 0.26128628]

  对于iris数据集,维度较小,可以直观的看到,但是面对未来的研究和工作,需要掌握一定的分析方法。下面介绍——种按降序累计特征值和的方法之一:

  tot=sum(EIG _ val)var _ exp=[(I/tot)* 100 for I in sorted(EIG _ val,reverse=True)]cum_var_exp=NP . cumsum(var _ exp)#返回一个累积sumprint(累积sum \n ,cum _ var _ exp)

  图2)虹膜数据集特征值的累积和。图纸代码请参考附录1。

  从图中可以看出,绝大部分方差(72.96%)可以用第一主成分解释,加上第二主成分,合起来可以解释95%以上的方差。

  3.4降维投影我们知道,降维方法在追求简化的过程中,都想尽可能地保留原始信息。前两个主成分已经可以解释大部分的数据变化(通常在80%以上),那么剩下的主成分就会被丢弃,这样就不会丢失太多的信息。所以在这种情况下,降维到二维子空间是一个合理的决策。

  #根据以上分析,选择前两个主成分进行降维proj _ mat=np.hstack ((EIG _ vec [:0])。整形(-1,1),EIG _ vec [:1]。整形(-1,1)))打印(投影矩阵)。Proj_mat)Y=X_std @ proj_mat # Y是我们需要的最终降维结果投影矩阵[[0.52106591-0.37741762][-0.26934744-0.92329566][0.580131-0.024475[0.56485654-0.06694199]]3.5降维结果target _ names=.

  总结这次我们尝试拆解PCA的实现过程,知道如何合理筛选维度。但仍有一些未完成的工作。包括以下几个部分:

  离群值的识别尚未完成。因为PCA涉及到计算样本的均值和方差,而这些统计值对异常值的干扰非常敏感,所以要引起重视。不再讨论元件选择方法。选择解释度在80%以上的食材是否是最佳选择,是否有其他合理的选择方法,这次就不深究了。与LDA、ICA等其他降维方法相比。PCA的时间复杂性及其作为线性变换的局限性不再进一步讨论。附录参考:

  https://sebastianraschka.com/Articles/2015_pca_in_3_steps.html(代码部分参考了本文,感谢原文,非常详细)https://www.statology.org/covariance-matrix-python/#:~:text=A协方差矩阵是一个正方形矩阵,在python . https://stack overflow . com/questions/39120942/difference-between-standard scaler-and-normalizer-in-sk learn-pre conditioning中创建协方差矩阵的步骤有限。如有错误,请指正。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: