编码来自同一特征空间的多个观察值

数据挖掘 机器学习 预处理 编码
2022-03-03 01:26:53

我的数据包含分类特征的多个观察值。特征空间是医学症状,所以这个特征的数据是这样的:['发烧','疼痛','黄色皮肤' ....]。每个症状观察的数量样本不固定,我有大约 50 种不同的症状

我如何将此功能编码为 ML 模型可以处理的东西?数组中症状的顺序并不重要。

我尝试了一种热编码,但将 50 个类别级别的特征空间投影到 50 个指标中意味着丢失信息(具有稀疏矩阵)

有任何想法吗?

1个回答

您需要的是编码分类变量。这个话题在很多博文中都有讨论,绝对值得看看这篇最近的文章,它很好地广泛地介绍了大多数方法,因为我不打算再次重写那里的内容,而是给你我的个人经验。

我之前问过你你追求什么算法,只是这可能会改变你对编码方法的选择。当您的分类变量非常基数时(通常不推荐!),一些编码方法(例如 One-hot-encoding)会使您的特征空间非常稀疏,最好使用稀疏感知算法。

简而言之,我建议从以下(经典和简单)开始,从那篇文章中借用解释:

  • OneHot  — 每个值与所有其他值进行比较的一列。
  • 二进制 — 将每个整数转换为二进制数字。每个二进制数字都有一列。
  • 散列 - 与 OneHot 类似,但维度更少,由于碰撞导致一些信息丢失。
  • 后向差 ——将一个级别的因变量的平均值与前一个级别的因变量的平均值进行比较。
  • 目标 ——使用因变量的平均值。

上述方法几乎可以用于所有算法。而且每一首单曲都有其优点和缺点。有些人比其他人有更多的信息丢失,依此类推。好消息是这些方法中的大多数都非常容易使用,例如通过这个Python 包

我发现另一种非常有趣且适用于神经网络的方法是:

  • 实体嵌入- 一种从 NLP 借来的特殊编码方法,其中为每个分类变量动态学习嵌入空间。

请参阅这些博文123我正在 Google Colab 中编写一个启动并运行的代码来充分展示这一点,但您仍然可以在这些博客文章中找到代码片段来尝试一下。我发现这种方法比 OneHot for Neural Networks 更好。

希望这些帮助!