当前位置:   article > 正文

【高维数据降维】主成分分析PCA_:高维数据降维(主成分分析pca)

:高维数据降维(主成分分析pca)

高维数据降维之主成分分析 PCA

高维数据降维是指采用某种映射方法,降低随机变量的数量,例如将数据点从高维空间映射到低维空间中,从而实现维度减少。

降维分为:特征选择 和 特征提取
特征选择:是从含有冗余信息以及噪声信息的数据中找出主要变量;
特征提取:是去掉原来的数据,生成新的变量,可以寻找数据内部的本质结构特征。

降维的过程是通过对输入的原始数据特征进行学习,得到一个映射函数,实现将输入样本映射后到低维空间中之后,原始数据特征并没有明显的损失,通常情况下新空间的维度要小于原空间的维度。目前大部分降维算法是处理向量形式的数据。

主成分分析 PCA

主成分分析 PCA 是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的方差最大,以此使用较少的维度,同时保留较多原数据的维度。

主成分分析的降维是指经过正交变换后,形成新的特征集合,然后从中选择比较重要的一部分子特征集合,从而实现降维。这种方式并非是在原始特征中选择,所以 PCA 这种线性降维方式最大程度上保留了原有的样本特征。

设有 m 条 n 维的数据, PCA 一般步骤为:

(1) 将原始数据按列组成 n 行 m 列矩阵 X;

(2) 计算矩阵 X 中每个特征属性 (n 维) 的平均向量 M (平均值);

(3) 将 X 的每一行(代表一个属性字段)进行零均值化,即减去 M ;

(4) 按照公式 C = 1 m X X T C = \frac{1}{m} XX^T C=m1XXT 求出协方差矩阵;

(5) 求出协方差矩阵的特征值及对应的特征向量;

(6) 将特征向量按照对应特征值从大到小按行排列成矩阵,取前 k(k<n) 行组成基向量 P;

(7) 通过 Y = P X Y = PX Y=PX 计算降维到 k 维后的样本特征。

例子:

# 例:基于sklearn和numpy随机生成2个类别共40个三维空间的样本点
import numpy as np
import 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).T     

ax = 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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述
现在用 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

最后按照特征值和特征向量进行配对,并按照特征值的大小从高到低进行排序,由于需要将三维空间投射到二维空间中,选择前两个特征值 - 特征向量对作为坐标,并构建 2 × \times × 3 的特征向量矩阵 W ,原来空间的样本通过与此矩阵相乘,使用公式 y = W T x y=W^Tx y=WTx 的方法将所有样本转换到新的空间中。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/649163
推荐阅读
相关标签
  

闽ICP备14008679号