数据集特征编码和缩放

Posted

技术标签:

【中文标题】数据集特征编码和缩放【英文标题】:Dataset features Encoding and Scaling 【发布时间】:2021-03-09 16:59:01 【问题描述】:

我有一个具有非序数分类特征的数据集。在训练机器学习模型(线性 SVC)之前转换它们(编码 + 缩放)的最佳方法是什么?

我尝试过的事情:

    标签编码 - 这有效。但是缩放没有意义,因为功能中的不同类别没有任何特定顺序。

    One-Hot encoding - 一个特征中有数千个独特的类别,这通过创建数千列使 ML 模型变得复杂。

    计数编码 - 我的训练-测试拆分没有训练集中某个特征的所有唯一类别,当我对这些特征进行计数编码时,这会在测试集中引入 NaN。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

要解决您在测试集中有一些不在训练集中的唯一值的问题,您可以尝试执行以下操作:

    使用df = train.append(test)合并训练数据集 应用您之前使用的编码 使用以下方法将数据集拆分回训练和测试:

train = df.head(len(train))

test = df.tail(len(test))

根据我的经验,我可以说 LabelEncoding 和 OneHotEncoding 是编码非序数特征的一些最佳技术。

希望这会有所帮助:)

【讨论】:

假设我遵循这个并应用标签编码。我可以将其传递给 ML 模型而不进行任何缩放吗? @VamsiMohanRamineedi。标签编码和 OneHot 编码是针对分类的列进行的,即值不是连续的而是离散的。所以你不需要缩放它们。对于连续列,建议对其进行缩放,以使它们位于同一范围内。是的,一旦你附加了你的测试,你就可以应用你的标签编码将它们拆分回训练和测试并完成。您可以将其传递给您的 ML 模型

以上是关于数据集特征编码和缩放的主要内容,如果未能解决你的问题,请参考以下文章

点云数据集的归一化(特征缩放)

R语言使用caret包的predict函数对测试数据集进行数据预处理(和训练集的处理方式保持一致):缺失值填充数值变量最小最大缩放因子变量独热编码等

特征工程(完)

特征工程(完)

R语言使用caret包的predict函数对模型在测试集上的表现进行推理和预测predict函数对测试数据集进行数据预处理(和训练集的初始方式保持一致):缺失值填充数值变量最小最大缩放独热编码

具有特征的 Spark 2.0 数据集编码器