2020 年 2 月 27 日 - maiot 的 Hamza Tahir 以及 Robert Crowe 和 Tris Warkentin 代表 TFX 团队撰写
简介主成分分析(PCA)是一种降维技术,在许多不同的机器学习场景中都有用。本质上,PCA 以保留数据集中的最大方差的方式降低输入向量的维度。降低模型输入的维数可以提高模型性能,减少训练所需的尺寸和资源,并降低非随机噪声。
preprocessing_fn
函数内部,该函数被馈送到 TFX 管道中的 Transform 组件中。此函数接受特征张量的字典并输出包含应用相关转换的特征字典。虽然您可以在此处使用普通的 TensorFlow 代码,但许多基本转换已经与 TensorFlow Transform 一同内置(例如,归一化、分桶、计算词汇表等)。在此处找到开箱即用的转换的完整列表此处。tft.pca
转换,我们将使用它来计算我们数据集的 PCA。以下是您如何在preprocessing_fn
函数中利用此转换的方法。def preprocessing_fn(inputs):
features = []
outputs = {}
for feature_tensor in inputs.values():
# standard scaler pre-req for PCA
features.append(tft.scale_to_z_score(feature_tensor))
# concat to make feature matrix for PCA to run over
feature_matrix = tf.concat(features, axis=1)
# get orthonormal vector matrix
orthonormal_vectors = tft.pca(feature_matrix, output_dim=2, dtype=tf.float32)
# multiply matrix by feature matrix to get projected transformation
pca_examples = tf.linalg.matmul(feature_matrix, orthonormal_vectors)
# unstack and add to output dict
pca_examples = tf.unstack(pca_examples, axis=1)
outputs['Principal Component 1'] = pca_examples[0]
outputs['Principal Component 2'] = pca_examples[1]
return outputs
注意:在此示例中,我们假设所有输入特征都是数值型的,并且都被馈送到 PCA 转换中。如果需要,可能只使用输入特征的子集。tft.pca
函数的地方。这将计算我们数据的正交向量矩阵。正如tft.pca 文档中所解释的,该矩阵可用于计算我们数据的最终投影。我们通过将此矩阵与特征矩阵相乘来实现这一点。最后一步是“拆分”投影矩阵,将各个主成分分开。然后,我们在输出字典中返回这些值。preprocessing_fn
执行 Transform 组件时,幕后发生了很多被抽象掉的事情。为了在计算集群上执行分布式处理,TFX 创建了一个分布式Apache Beam 管道,该管道计算相关协方差和正交向量矩阵。它还创建了一个包含此嵌入转换的普通 TensorFlow 图表,该图表将成为您训练模型的一部分,以便您可以在服务时使用 PCA 转换。PCA 的结果是一个新的向量空间,具有更少的维度。在服务时,新数据将从原始高维空间投影到该低维空间。