高维数据降维之主成分分析 PCA
高维数据降维是指采用某种映射方法,降低随机变量的数量,例如将数据点从高维空间映射到低维空间中,从而实现维度减少。
降维分为:特征选择 和 特征提取
特征选择:是从含有冗余信息以及噪声信息的数据中找出主要变量;
特征提取:是去掉原来的数据,生成新的变量,可以寻找数据内部的本质结构特征。
降维的过程是通过对输入的原始数据特征进行学习,得到一个映射函数,实现将输入样本映射后到低维空间中之后,原始数据特征并没有明显的损失,通常情况下新空间的维度要小于原空间的维度。目前大部分降维算法是处理向量形式的数据。
主成分分析 PCA
主成分分析 PCA 是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的方差最大,以此使用较少的维度,同时保留较多原数据的维度。
主成分分析的降维是指经过正交变换后,形成新的特征集合,然后从中选择比较重要的一部分子特征集合,从而实现降维。这种方式并非是在原始特征中选择,所以 PCA 这种线性降维方式最大程度上保留了原有的样本特征。
设有 m 条 n 维的数据, PCA一般步骤为:
(1) 将原始数据按列组成 n 行 m 列矩阵 X;
(2) 计算矩阵 X 中每个特征属性 (n 维) 的平均向量 M (平均值);
(3) 将 X 的每一行(代表一个属性字段)进行零均值化,即减去 M ;
(4) 按照公式 C=1mXXTC = \frac{1}{m} XX^TC=m1XXT 求出协方差矩阵;
(5) 求出协方差矩阵的特征值及对应的特征向量;
(6) 将特征向量按照对应特征值从大到小按行排列成矩阵,取前 k(k<n) 行组成基向量 P;
(7) 通过 Y=PXY = PXY=PX 计算降维到 k 维后的样本特征。
例子:
# 例:基于sklearn和numpy随机生成2个类别共40个三维空间的样本点import numpy as npimport matplotlib.pyplot as plt# multivariate_normal 生成多元正态分布需要参数:期望和方差# 第一个类别mu_vec1 = np.array([0,0,0]) # 样本均值cov_mat1 = np.array([[1,0,0],[0,1,0],[0,0,1]]) # 协方差矩阵class1_sample = np.random.multivariate_normal(mu_vec1, cov_mat1, 20).T# 第二个类别mu_vec2 = np.array([1,1,1])cov_mat2 = np.array([[1,0,0],[0,1,0],[0,0,1]])class2_sample = np.random.multivariate_normal(mu_vec2, cov_mat2, 20).Tax = plt.subplot(projection = '3d')ax.scatter(class1_sample[0],class1_sample[1],class1_sample[2],c = 'b')ax.scatter(class2_sample[0],class2_sample[1],class2_sample[2],c = 'r')
现在用 PAC 降维到二维空间
# 计算平均向量all_samples = np.concatenate((class1_sample, class2_sample), axis=1)mean_x = np.mean(all_samples[0,:])mean_y = np.mean(all_samples[1,:])mean_z = np.mean(all_samples[2,:])print(mean_x,mean_y,mean_z)mean_vector = np.array([mean_x,mean_y,mean_z])print(mean_vector)scatter_matrix = np.zeros((3,3))for i in range(all_samples.shape[1]):scatter_matrix += (all_samples[:,i].reshape(3,1) - mean_vector).dot((all_samples[:,i].reshape(3,1) - mean_vector).T)# 散布矩阵 S 和协方差矩阵是不一样的,但是都是 PCA 里可用于求解特征向量和特征值print(scatter_matrix)# 计算特征值 和 特征向量eig_val_sc,eig_vec_sc = np.linalg.eig(scatter_matrix)print(eig_val_sc)print(eig_vec_sc)
最后按照特征值和特征向量进行配对,并按照特征值的大小从高到低进行排序,由于需要将三维空间投射到二维空间中,选择前两个特征值 - 特征向量对作为坐标,并构建 2 ×\times× 3 的特征向量矩阵 W ,原来空间的样本通过与此矩阵相乘,使用公式 y=WTxy=W^Txy=WTx 的方法将所有样本转换到新的空间中。