文章插图
降维是一种减少特征空间维度以获得稳定的、统计上可靠的机器学习模型的技术 。降维主要有两种途径:特征选择和特征变换 。
特征选择通过选择重要程度最高的若干特征,移除共性的或者重要程度较低的特征 。
特征转换也称为特征提取,试图将高维数据投影到低维空间 。一些特征转换技术有主成分分析(PCA)、矩阵分解、自动编码器(Autoencoders)、t-Sne、UMAP等 。
本文主要介绍了主成分分析以及自动编码器两种方法,具体分析两者的优缺点,并且通过一个生动的示例进行详解 。
主成分分析主成分分析是一种无监督技术,将原始数据投影到若干高方差方向(维度) 。这些高方差方向彼此正交,因此投影数据的相关性非常低或几乎接近于 0 。这些特征转换是线性的,具体方法是:
步骤一:计算相关矩阵数据,相关矩阵的大小为 n*n 。
步骤二:计算矩阵的特征向量和特征值 。
步骤三:选取特征值较高的 k 个特征向量作为主方向 。
步骤四:将原始数据集投影到这 k 个特征向量方向,得到 k 维数据,其中 k≤n 。
自动编码器自动编码器是一种无监督的人工神经网络,它将数据压缩到较低的维数,然后重新构造输入 。自动编码器通过消除重要特征上的噪声和冗余,找到数据在较低维度的表征 。它基于编解码结构,编码器将高维数据编码到低维,解码器接收低维数据并尝试重建原始高维数据 。
文章插图
自动编码器基本结构示意图
文章插图
深层自动编码器结构示意图
上图中,X 是输入数据,z 是 X 在低维空间的数据表征,X' 是重构得到的数据 。根据激活函数的不同,数据从高纬度到低纬度的映射可以是线性的,也可以是非线性的 。
性能对比:主成分分析 VS 自动编码器1. PCA 只能做线性变换;而自动编码器既可以做线性变换,也可以做非线性变换 。
1. 由于既有的 PCA 算法是十分成熟的,所以计算很快;而自动编码器需要通过梯度下降算法进行训练,所以需要花费更长的时间 。
1. PCA 将数据投影到若干正交的方向;而自动编码器降维后数据维度并不一定是正交的 。
1. PCA 是输入空间向最大变化方向的简单线性变换;而自动编码器是一种更复杂的技术,可以对相对复杂的非线性关系进行建模 。
1. 依据经验来看,PCA 适用于数据量较小的场景;而自动编码器可以用于复杂的大型数据集 。
1. PCA 唯一的超参数是正交向量的数量;而自动编码器的超参数则是神经网络的结构参数 。
1. 单层的并且采用线性函数作为激活函数的自动编码器与 PCA 性能一致;但是多层的以非线性函数作为激活函数的自动编码器(深度自动编码器)能够具有很好的性能,虽然可能会存在过拟合,但是可以通过正则化等方式进行解决 。
降维示例:图像数据
文章插图
示例图片
该示例图片的数据维度为 360*460 。我们将尝试通过 PCA 和自动编码器将数据规模降低为原有的 10% 。
PCA 方法
pct_reduction = 0.10reduced_pixel= int( pct_reduction* original_dimensions[1])#Applying PCApca = PCA(n_components=reduced_pixel)pca.fit(image_matrix)#Transforming the input matrixX_transformed = pca.transform(image_matrix)print("Original Input dimesnions {}".format(original_dimensions))print("New Reduced dimensions {}".format(X_transformed.shape))
输出如下:Original Input dimesnions (360, 460)New Reduced dimensions (360, 46)
检查各维度的相关性:df_pca = pd.DataFrame(data = https://www.isolves.com/it/cxkf/sf/2020-08-04/X_transformed,columns=list(range(X_transformed.shape[1])))figure = plt.figure(figsize=(10,6))corrMatrix = df_pca.corr()sns.heatmap(corrMatrix, annot=False)plt.show()
文章插图
PCA降维后各维度相关性
从上图可以看出,PCA 降维后各个维度都是不相关的,也就是完全正交 。
接下来,我们通过降维后的数据来重构原始数据:
reconstructed_matrix = pca.inverse_transform(X_transformed)reconstructed_image_pca = Image.fromarray(np.uint8(reconstructed_matrix))plt.figure(figsize=(8,12))plt.imshow(reconstructed_image_pca,cmap = plt.cm.gray)
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 数据库服务器主机重启故障诊断分析
- 利用YOLOV3检测算法来实现人物定位与距离计算,打造全球定位系统
- 茶叶变质的主要因素,如何判断茶叶变质
- 超级店长怎么用 超级店长的主要功能
- 碳纤维浴霸
- 什么是浴霸
- 自来水净化器
- 直排式热水器
- 淘宝运营绩效考核表 淘宝运营主要负责什么
- 保健品|想要减肥成功,要避免2个减肥误区,4种主食或越吃越瘦,不妨尝试