【问题标题】:How to handle large Sets of categorical Data如何处理大量分类数据
【发布时间】:2018-11-04 17:05:29
【问题描述】:

我是机器学习的初学者。我有一个包含大量分类数据的大型数据集。数据是名义上的。我想用 Python 和 scikit-learn 应用 SVM 和决策树等算法来查找数据中的模式。

我的问题是,我不知道如何最好地处理这种数据。我读了很多关于 One-Hot Encoding 的内容。这些例子都很简单,比如三种不同的颜色。在我的数据中,大约有 30 种不同的分类特征。在这些特征中大约有 200 个不同的“值”。 如果我使用简单的 One-Hot 编码,数据帧会变得非常大,我几乎无法对数据使用任何算法,因为我的内存用完了。

那么这里最好的方法是什么?对编码表使用 sql 数据库?这在“真实”世界中是如何做到的?

提前感谢您的回答!

【问题讨论】:

  • 你熟悉稀疏矩阵的概念吗?有几个库可以处理它们,可以帮助您节省一些空间。根据您当前使用的机器学习库,查找涉及稀疏矩阵的方法和类。当然,另一种解决方案可能是按照 Rocky Li 的answer 中的建议降低维度
  • 感谢@gvgramazio,我不熟悉sparce 矩阵。我会读进去的!

标签: python machine-learning categorical-data one-hot-encoding


【解决方案1】:

Sklearn 不处理带有决策树和随机森林的分类特征 - 它需要将它们转换为 one-hot 编码列。但实际上,有一个更好的选择:

这称为二进制编码,它将所有类型分开,比分类列的数字编码要好得多。

解决此问题的另一种方法是使用clipping。裁剪的想法是只注册最大的类别,例如占所有值 5% 以上的所有类别,并将其余类别编码为“尾部”。这是另一种降维的方法。

【讨论】:

    【解决方案2】:

    说实话,这个问题给我带来了巨大的新认识。

    首先,重要的是根据内容区分您的分类数据;又名nominalordinal 数据。

    名义数据代表任何一种分类数据,不同值之间没有排名或顺序关系,即牛奶、鸡蛋、面包等。

    另一方面,序数数据是指具有顺序关系的值,即小学、高中、大学、硕士等(换句话说,当您分配小学 1 时,您会分配高中 2,因为有排名)。

    之后,您可以使用多种编码方法,详细说明您可以在此处使用: Smarter ways for encoding categorical data

    【讨论】:

      猜你喜欢
      • 2013-12-24
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2017-02-09
      • 1970-01-01
      相关资源
      最近更新 更多