上QQ阅读APP看书,第一时间看更新
3.5 线性数据降维
3.5.1 原理概述
数据降维用于将输入数据向量的尺寸进行“缩减”。它一般用于对机器学习算法的输入数据进行预处理,经过预处理之后的数据再输入至之前提到的各种分类算法中。线性数据降维的主要运算是矩阵运算,比如对于N×1的输入向量x,我们希望减少它的尺寸,得到M×1的向量。线性降维算法通过下面的运算实现向量尺寸的改变:
其中μ是N×1的向量,一般由x的数据样本均值构成,M是M×N的矩阵,这一矩阵的选择依据是希望它能够从x中提取对分类最有用的分量构成向量y,删除x中对数据类别没有“鉴别能力”的元素。降维矩阵M一般通过主分量分析(Principal Component Analysis,PCA)获得。
3.5.2 模型训练和推理
PCA降维的模型参数M和μ可以通过训练得到,代码清单3-5给出了基于Scikit-Learn的Python训练程序,得到PCA的降维模型参数。这里使用的数据是之前的“乳腺癌”分类数据,所给出的例子中要求降维后的数据维度是3维(见代码清单3-5中第2行中n_components=3)。
代码清单3-5 数据降维训练例程
from sklearn.decomposition import PCA pca = PCA(n_components=3) // 3 是降维后的数据维度 train_x = pca.fit_transform(np.array(train_x)) test_x = pca.transform(test_x)
代码中
pca.fit_transform(np.array(train_x))
完成两件事:1)使用数据train_x训练PCA模型;2)返回降维后的数据。PCA“降维器”的参数保存在Python数据对象pca中。pca有两个成员变量:mean_和components_(未在代码中展示),它们分别对应降维算法中的μ和矩阵M。代码中
test_x = pca.transform(test_x)
使用训练好的PCA降维模型,对测试数据test_x进行降维,降维结果仍旧存放在变量test_x中。