导航:首页 > 源码编译 > 描述pca算法

描述pca算法

发布时间:2023-06-14 07:31:50

A. 主成分分析(PCA)

        在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。

       因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。

       主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。

        PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

        如图。我们希望找到某一个维度方向,它可以代表这两个维度的数据。图中列了两个向量方向,u1和u2,那么哪个向量可以更好的代表原始数据集呢?从直观上也可以看出,u1比u2好。

        为什么u1比u2好呢?可以有两种解释,第一种解释是样本点到这个直线的 距离足够近 ,第二种解释是样本点在这个直线上的 投影能尽可能的分开 。

        假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能 把x,y,z坐标系旋转一下 ,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x',y',z',那么这组数据的表示只用x'和y'两个维度表示即可!认为把数据降维后并没有丢弃任何东西,因为这些数据在平面以外的第三个维度的分量都为0,即z'的坐标为0。假设这些数据在z'轴有一个很小的抖动,那么我们仍然用上述的二维表示这些数据,理由是我们可以认为这两个轴x'和y'的信息是数据的主成分,而这些信息对于我们的分析已经足够了,z'轴上的抖动很有可能是噪声。

内积运算:

内积的几何意义:

        注意这里我们专门区分了矢量长度和标量长度,标量长度总是大于等于0,值就是线段的长度;而矢量长度可能为负,其绝对值是线段长度,而符号取决于其方向与标准方向相同或相反。

        A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,即让|B|=1|B|=1,那么就变成了:

        则内积几何意义:设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!

(1)什么是基?

        如上图,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2)。但是 只有一个(3,2)本身是不能够精确表示一个向量的 。这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2,我们隐式把以x轴和y轴上正方向长度为1的向量为标准,即基为(1,0)和(0,1)。因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。

         所以,要准确描述向量,首先要确定一组基,然后给出基所在的各个直线上的投影值,进而确定坐标值。

(2)什么是基变换?

      实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。例如:(1,1)和(-1,1)也可以成为一组基。

        一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。则(1,1)和(-1,1)同方向上模为1的新基为:

(3)用矩阵表示基变换

        将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:

        其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标。可以稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:

         一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果 。

        最后,上述分析同时给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。

        上面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最最关键的问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维(K小于N),那么我们应该如何选择K个基才能最大程度保留原有的信息?看下图:

那么如何选择最优基这个问题被形式化为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。

至此我们知道一下几点:

对原始数据进行(线性变换)基变换可以对原始样本给出不同的表示;

基的维度小于数据的维度可以起到降维的效果;

对基变换后的新样本求其方差,选取使其方差最大的基作为最优基。

          对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。

        至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

推广到一般情况:

(1)拉格朗日法

(2) 奇异值分解法(SVD)

        在PCA降维过程中,当进行协方差矩阵上求解特征值时,如果面对维度高达10000*10000 ,可想而知耗费的计算量程平方级增长。面对这样一个难点,从而引出奇异值分解(SVD),利用SVD不仅可以解出PCA的解,而且无需大的计算量。

PCA算法的主要优点有:

        1、仅仅需要以方差衡量信息量,不受数据集以外的因素影响。

        2、各主成分之间正交,可消除原始数据成分间的相互影响的因素。

        3、计算方法简单,主要运算是特征值分解,易于实现。

PCA算法的主要缺点有:

        1、主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。

        2、方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。

B. PCA降维算法

降维是机器学习中很重要的一种思想。在机器学习中经常会碰到一些高维的数据集,它们会占用计算机的内存和硬盘空间,而且在运算时会减缓速度。
降维能够使得数据量被压缩,加快运算速度,减小储存空间,以及方便可视化的观察数据特点。

PS:在降维中,我们减少的是特征种类而不是样本数量,样本数量m不变,特征值数量n会减少。

一种常用的降维算法是主成分分析算法(Principal Component Analysis),简称 PCA

PCA是通过找到一个低维的线或面,然后将数据投影到线或面上去,然后通过减少投影误差(即每个特征到投影的距离的平均值)来实现降维。

上图是一个包含二维特征值的样本集。黑色的叉代表样本,红色的线表示找到的低维的线,绿色的叉则是样本投影在线上的位置。而它们的投影距离就是PCA算法所需要考虑的。

通过上图可以看出PCA算法就是找出一个线,在数学上就是一个向量,使得其他样本投影到该向量上的距离最小。

推而广之:
一般情况下,将特征值的维度从n降到k,就是找到k个向量 ,使得样本在这些向量上的投影最小。

例如,2维降到1维,就是找到1个向量,即一条线;3维降到2维,就是找到2向量,即一个平面。

数据处理

假设有m个样本集:
下面需要对数据做一下特征值缩放或者均值归一化。
先计算出平均值,然后用样本值减去平均值。

然后用 替换 , 可以是数据最大值最小值的范围或者标准差。

算法部分

我们需要的就是矩阵U,他是一个n维方阵 ,它的每一列就是我们需要的向量:

使用 矩阵可以降维:

那么要回到原来的维度上去就需要:

这里我们只能得到原来的近似值

与 近似相等,两者之间的差就是投影误差,或平均平方映射误差:

数据的总变差(total variation),即样本的长度平方的均值:

选择维度k的最小值的方法:

表示平方投影误差除以总变差的值小于0.01,用PCA的语言称之为 保留了99%的差异性
PS:这个值是可以变化的,可以是95%,90%,85%等等。

使用循环验证的办法:
初始化 ,然后计算出 ,通过 计算出 和 ,然后通过上方的公式计算出值是不是小于0.01。
如果不是,增加k值,直到获得最小的k值满足条件。

快捷办法

通过奇异值分解的到的矩阵 是一个n维的对角矩阵:

通过这个矩阵可以来计算:

也可以用下面的式子:

这种方法就非常快捷高效。

我们在训练集上通过PCA获得矩阵 ,在交叉验证集和测试集上就不能再使用PCA来计算矩阵了,而是直接用训练集里的矩阵来映射交叉验证集和测试集上的数据。

PCA最常用的就是压缩数据,加速算法的学习,或者可视化数据。

PCA的错误用法,用来防止算法过拟合
算法过拟合的原因之一是算法过于复杂,特征值的维度过高,使用PCA可以降低维度,看起来会有效,但是实际上效果很差。防止算法过拟合还是使用正则化的方法来实现。

还有一个注意点。就是在设计一个机器学习算法时,不用一开始就考虑降维,先在不使用PCA的条件下设计算法,当算法出现问题,例如,算法计算过慢,占用大量内存...,之后当确定需要使用PCA的时候再继续使用。

C. 常用降维方法之PCA 和 LDA

PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。而方差最大的那个维度是主成分。
PCA是比较常见的线性降维方法,通过线性投影将高维数据映射到低维数据中,所期望的是在投影的维度上,新特征自身的方差尽量大,方差越大特征越有效,尽量使产生的新特征间的相关性越小。
PCA算法的具体操作为对所有的样本进行中心化操作,计算样本的协方差矩阵,然后对协方差矩阵做特征值分解,取最大的n个特征值对应的特征向量构造投影矩阵。

再举个栗子:

下面举一个简单的例子,说明PCA的过程。

假设我们的数据集有10个二维数据(2.5,2.4), (0.5,0.7), (2.2,2.9), (1.9,2.2), (3.1,3.0), (2.3, 2.7), (2, 1.6), (1, 1.1), (1.5, 1.6), (1.1, 0.9),需要用PCA降到1维特征。

首先我们对样本中心化,这里样本的均值为(1.81, 1.91),所有的样本减去这个均值向量后,即中心化后的数据集为(0.69, 0.49), (-1.31, -1.21), (0.39, 0.99), (0.09, 0.29), (1.29, 1.09), (0.49, 0.79), (0.19, -0.31), (-0.81, -0.81), (-0.31, -0.31), (-0.71, -1.01)。

现在我们开始求样本的协方差矩阵,由于我们是二维的,则协方差矩阵为:

对于我们的数据,求出协方差矩阵为:

求出特征值为(0.0490833989, 1.28402771),对应的特征向量分别为:

由于最大的k=1个特征值为1.28402771,对于的k=1个特征向量为 则我们的W=
我们对所有的数据集进行投影 得到PCA降维后的10个一维数据集为:(-0.827970186, 1.77758033, -0.992197494, -0.274210416, -1.67580142, -0.912949103, 0.0991094375, 1.14457216, 0.438046137, 1.22382056)

在上面的PCA算法中,我们假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里就需要用到和支持向量机一样的核函数的思想,先把数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n', 这里的维度之间满足n'<n<N。

使用了核函数的主成分分析一般称之为核主成分分析(Kernelized PCA, 以下简称KPCA。假设高维空间的数据是由n维空间的数据通过映射ϕ产生。

则对于n维空间的特征分解:

映射为:

通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方法进行降维。一般来说,映射ϕ不用显式的计算,而是在需要计算的时候通过核函数完成。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。

这里对PCA算法做一个总结。作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如第六节的为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。

PCA算法的主要优点有:

LDA(线性判别分析,Linear Discriminant Analysis)是另一种常用的降维方法,它是有监督的。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。这里需要注意的是,此处的LDA与文本主题模型中的LDA(隐含狄利克雷分布,Latent Dirichlet Allocation)并不相同,他是一种处理文档的主题模型。
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。

LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。
什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
可能还是有点抽象,我们先看看最简单的情况。假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。

以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。

LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。

这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。

当然,某些某些数据分布下PCA比LDA降维较优,如下图所示:

LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。

LDA算法的主要优点有:

参考文章: 刘建平老师的博客园

D. (十)PCA降维算法

主成分分析(Principal components analysis,以下简称PCA) 是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。它可以通过 线性变换 将原始数据变换为一组 各维度线性无关 的表示,以此来提取数据的主要线性分量。需要注意的是,PCA一般只用于线性数据降维,对于非线性数据一般采用KPCA。

降维就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据,并且希望损失尽可能的小。首先看几张图,有一个直观的认识。
这里面,把椭圆看成是数据:

基于这个知识,如果我们想对数据进行降维的话,比如图1的两个维度的数据降成一维,我们可以选择保留X1这个维度的数据,因为在这个维度上蕴含的信息量更多。同理,图2就可以保留x2这个维度的数据。但是,问题来了,图3应该保留哪个维度的数据呢?答案是保留哪个维度都不好,都会丢失较大的信息量。但是,如果我们把图3的坐标轴旋转一下

比较容易看出,图3在新的坐标轴下就能进行降维了。
所以,第一,变换正确的坐标轴(基);第二,保留方差最大的几个轴作为主成分,这样的做法就是PCA的核心思想。

从前文可以看出,理想的坐标轴是要求数据投在新坐标轴后,尽可能的分散,也就是数据的方差最大。然后每次选择方差最大的轴作为主成分。
将前文2维降1维的例子扩展到更高维度,还有一个问题需要解决,考虑三维降到二维问题。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因为发生了大量的信息重复,起不到降维的作用,因此,应该有其他约束条件——就是正交。 PCA要求轴与轴之间是正交的,也就是不同维度的信息相关性为0。

在表示相关性中,相关系数与协方差是等价的,这里为了方便计算,使用协方差。下面是协方差公式,当协方差为0时,表示两个特征a,b线性不相关。

可以发现,当a=b时,协方差公式就变成了方差公式,方差是特殊的协方差。如果运气更好,特征a与b的平均数都为0,那么公式会进一步简化,得到:

所以说,为了计算方便,PCA降维前,一般都要求将所有特征属性中心化,即平均数为0。

因为PCA要求,同一轴内方差最大,不同轴协方差为0,如何把它们放在一块呢?这里就引入了协方差矩阵的概念:
假设有m个样本,每个样本特征维度是2,每个特征都经过中心化处理:

我们发现协方差矩阵的对角线是方差,而且是对称矩阵。方差和协方差都放在了一个矩阵里面,只需对这个矩阵优化,使它除了对角线的其余元素都为0,就可以了,美滋滋。

我们知道矩阵乘法,本质上就是一种线性变换的过程。而正交基矩阵的乘法,则是坐标系变换的过程。设原空间的数据为X,协方差矩阵为C,经过正交基矩阵P,得到了新坐标系下的数据Y,即Y=PX。那么新坐标系下的协方差矩阵D是怎样的呢?

我们发现,新旧空间的协方差矩阵是有关系的,而且都和变换矩阵P有关系。问题就转化成了,能不能找到一个矩阵P,使得新空间下的协方差矩阵的非对角线元素都为0.

首先,原始数据矩阵X的协方差矩阵C是一个实对称矩阵,它有特殊的数学性质:

也就是说,P就是是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。 如果设P按照中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y
其实,经过数学上的推导的,我们就可以知道,特征值对应的特征向量就是理想中想取得正确的坐标轴,而特征值就等于数据在旋转之后的坐标上对应维度上的方差。

由于协方差矩阵的维度和特征相同,所以在进行特征值分解时,得到的特征值数目不会超过特征的数目。

在学习线性代数时,我们都会学矩阵的特征值分解,我们知道一个方阵A经过 特征值分解 后就得到 特征向量 特征值 了。那么,这个所谓的特征值和特征向量到底是什么东西呢?
很多人都会说是那个经典的式子:

首先给出概念上的一种解释。所谓的特征值和特征向量,最重要的是理解“特征”这两个字,特征向量翻译为eigen vector, eigen这个单词来自德语,本义是在“本身固有的,本质的”。纯数学的定义下,并不能很明白地理解到底为什么叫做特征值和特征向量。但是举一个应用例子,可能就容易理解多了。

在图像处理中,有一种方法就是特征值分解。我们都知道图像其实就是一个像素值组成的矩阵,假设有一个100x100的图像, 对这个图像矩阵做特征值分解,其实是在提取这个图像中的特征,这些提取出来的特征是一个个的向量,即对应着特征向量。而这些特征在图像中到底有多重要,这个重要性则通过特征值来表示。 比如这个100x100的图像矩阵A分解之后,会得到一个100x100的特征向量组成的矩阵Q,以及一个100x100的只有对角线上的元素不为0的矩阵E,这个矩阵E对角线上的元素就是特征值,而且还是按照从大到小排列的(取模,对于单个数来说,其实就是取绝对值),也就是说这个图像A提取出来了100个特征,这100个特征的重要性由100个数字来表示,这100个数字存放在对角矩阵E中。 在实际中我们发现,提取出来的这100个特征从他们的特征值大小来看,大部分只有前20(这个20不一定,有的是10,有的是30或者更多)个特征对应的特征值很大,后面的就都是接近0了,也就是说后面的那些特征对图像的贡献几乎可以忽略不计。

我们知道,图像矩阵 A 特征值分解后可以得到矩阵 P 和矩阵 E (特征值对角矩阵):

我们可以看到,在只取前20个特征值和特征向量对图像进行恢复的时候,基本上已经可以看到图像的大体轮廓了,而取到前50的时候,几乎已经和原图像无异了。明白了吧,这就是所谓的矩阵的特征向量和特征值的作用。

所以归根结底,特征向量其实反应的是矩阵A本身固有的一些特征,本来一个矩阵就是一个线性变换,当把这个矩阵作用于一个向量的时候,通常情况绝大部分向量都会被这个矩阵A变换得“面目全非”,但是偏偏刚好存在这么一些向量,被矩阵A变换之后居然还能保持原来的样子,于是这些向量就可以作为矩阵的核心代表了。于是我们可以说:一个变换(即一个矩阵)可以由其特征值和特征向量完全表述,这是因为从数学上看,这个矩阵所有的特征向量组成了这个向量空间的一组基底。而矩阵作为变换的本质其实不就把一个基底下的东西变换到另一个基底表示的空间中么?

参考:
https://blog.csdn.net/hjq376247328/article/details/80640544
https://blog.csdn.net/hustqb/article/details/78394058
https://blog.csdn.net/woainishifu/article/details/76418176

E. PCA的算法是什么

PCA是主成分分析法,目的就是对高维数据进行降维,提取主要成分。我也是最近才开始看这个的,我也不是很明白。网上应该有这方面的代码。可以去程序员联合开发网看看,http://www.pudn.com/downloads188/sourcecode/windows/detail882107.html
http://www.pudn.com/downloads102/sourcecode/graph/texture_mapping/detail415764.html

阅读全文

与描述pca算法相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:382
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163