如何对来自不同特征工程过程的特征进行标准化和归一化?

How to perform standardization and normalization on features from different feature engineering process?

我正在处理一个数据集,其中每个样本都包含数字和文本数据。因此,采用多种方法从数据集中构建训练特征矩阵。对于数据集中的每个样本,我从 3 个部分构造一个向量表示。

  1. 段落文本的 Doc2Vec 矢量表示:我使用 gensim implemetation of paragraph vector 将文本编码为 [-5, 5]

    之间的 100 维浮点矢量
  2. 文本标签的单热编码向量:数据集中的每个样本都有零个或多个文本标签,我聚合了数据集中使用的所有唯一标签并将其编码为二进制数组仅包含 0 和 1。例如,如果完整的标签集是 [Python, Java, JavaScript, C++],样本包含标签 PythonJava,则结果向量将是 [1, 1, 0, 0]

  3. 数值数据和分类数据:

    • 数字数据字段按原样内置到特征向量中
    • 分类数据被映射到整数并构建到特征向量中

生成的特征矩阵如下所示

[
  [-1.02, 1.33, 2.35, -0.48, ... -4.11, 1, 0, 1, 1, 0, 0, ..., 1, 0, 235, 11.5, 333],
  [-0.22, 3.03, 1.95, -0.48, ... -4.11, 0, 1, 1, 1, 0, 0, ..., 0, 0, 233, 22, 333],
  [-2.07, -1.33, -2.35, -0.48, ... -4.11, 1, 1, 0, 1, 1, 0, ..., 1, 1, 102, 13, 333],
  [-4.32, 4.33, 1.75, -0.48, ... -4.11, 0, 0, 0, 1, 0, 1, ..., 1, 0, 98, 8, 333],
]

我的问题是,我应该对数据集应用任何标准化或规范化吗?如果是这样,我应该在连接特征的不同部分之前还是之后进行?

我正在使用 scikit-learn,我使用的主要算法是梯度提升。

是的,您需要单独处理特征:您应该只对原始数值特征应用标准化或归一化,不应该对 doc2vec、OHE 或编码的分类特征进行标准化。