如何动态区分分类数据和数值数据?

数据挖掘 分类数据 数值
2021-10-12 03:20:20

我知道有人正在从事一个涉及摄取数据文件而不考虑列或数据类型的项目。任务是获取具有任意数量的列和各种数据类型的文件,并输出数字数据的汇总统计信息。

但是,他不确定如何为某些基于数字的数据动态分配数据类型。例如:

    CITY
    Albuquerque
    Boston
    Chicago

这显然不是数字数据,将存储为文本。然而,

    ZIP
    80221
    60653
    25525

没有明确标记为分类。他的软件会将邮政编码分配为数字并为其输出汇总统计信息,这对于那种数据没有意义。


我们有几个想法是:

  1. 如果一列都是整数,则将其标记为分类。这显然行不通,但这是一个想法。
  2. 如果一列的唯一值少于n 个并且是数字的,则将其标记为分类的。这可能更接近,但数字数据仍然可能存在问题。
  3. 维护一个实际应该是分类的常见数字数据列表,并将列标题与此列表进行比较以进行匹配。例如,任何带有“ZIP”的东西都是分类的。

我的直觉告诉我,没有办法准确地将数字数据分配为分类或数字,但希望得到建议。非常感谢您的任何见解。

3个回答

我不知道这样做的万无一失的方法。这是我脑海中浮现的一个想法:

  1. 默认情况下将值视为分类值。
  2. 检查数据的各种属性是否暗示它实际上是连续的。根据这些属性与连续数据关联的可能性对这些属性进行加权。以下是一些可能的示例:
    • 值是整数:+.7
    • 值是浮点数:+.8
    • 值呈正态分布:+.3
    • 值包含相对少量的唯一值:+.3
    • 值的字符数不同:+.1
    • 值不包含前导零:+.1
  3. 将总和大于 1 的任何列视为数值。根据针对不同数据集的测试调整因子和权重,以满足您的需求。你甚至可以构建和训练一个单独的机器学习算法来做到这一点。

例如,如果您有一个家庭的孩子数量(范围可能在 0 到 5 之间),它是分类变量还是数值变量?实际上,这取决于您的问题以及您打算如何解决它。从这个意义上说,您可以执行以下操作:

  • 计算该列的唯一值的数量
  • 将此数字除以总行数
  • 如果该比率低于某个阈值(例如,20%),则您认为它是分类的。

在离散值的情况下,一个额外的测试可能是:使用回归模型来估计一些参数并检查估计值是否包含在原始值集中。如果不是这样,您可能正在处理分类数据(就像 ZIP 的情况一样)。

过去它对我来说效果很好......

由于此问题已被交叉发布,@nickcox 在 Cross Validated 上的最初评论是高度相关且真实的。我的看法略有不同。例如,我将重新表述这个问题,将其分解为两部分:首先,存在如何按数据类型对未知信息流进行分类的问题,其次,可以预期什么样的错误分类率。如果有人想花时间去做,这两个问题都可以立即回答。

第一个问题相当于使用现成的真实世界数据样本,按照这些线程的评论和答案中初步提出的内容开发基于规则的专家系统。

其次,鉴于这个真实世界的数据包含已知的数据类型,对分类错误进行基准测试。

第三步将涉及迭代更新规则以更准确地反映正在传递的信息——在可能的范围内。

在我看来,虽然乏味,但这样的项目不会涉及大量的工作。

---- 附加评论 ----

一个很好的关于特征提取的讨论,因为它与数据生成过程有关,这里在 CV 上弹出:

https://stats.stackexchange.com/questions/191935/what-does-the-process-that-generates-the-data-mean-and-how-does-feature-selec

特征提取、选择和 DGP 是开发专家系统的绝佳起点。