【问题标题】:If a dataset has multiple columns all in different formats, what would be the best approach to deal with such data?如果一个数据集有多个不同格式的列,那么处理这些数据的最佳方法是什么?
【发布时间】:2026-01-03 12:30:01
【问题描述】:

比如说,一个数据集有像长度和宽度这样的列,可以是浮点数,它也可以有一些二进制元素(是/否)或离散数字(类别转换为数字)。简单地使用所有这些作为特性而不用担心格式(或者更像特性的性质)是明智的吗?在进行归一化时,我们可以像连续数一样对离散数进行归一化吗?我真的对处理多种格式感到困惑.....

【问题讨论】:

    标签: machine-learning feature-selection


    【解决方案1】:
    1. 是的,您可以标准化离散值。但它应该没有真正的 对学习的影响 - 如果你是,则需要标准化 进行某种形式的相似性测量,但事实并非如此 对于因子变量。有一些特殊情况,例如神经 网络,对输入\输出的规模和 权重的大小(参见“消失\爆炸梯度”主题)。还有它 如果您正在对数据进行聚类,那将是有意义的。 聚类使用某种距离度量,因此它将是 最好将所有功能都放在相同的规模上。
    2. 分类的东西没有什么特别的,除了一些 学习方法特别擅长使用分类 特征,一些 - 擅长使用实值特征,一些擅长 两者都有。

    对于分类和实值特征的混合,我的第一选择是使用一些基于树的方法(RandomForest 或 Gradient Boosting Machine),第二个方法是人工神经网络。

    此外,处理因子(分类变量)的极好的方法是将它们转换为一组布尔变量。例如,如果您有一个具有五个级别(1、2、3、4 和 5)的因子,那么一个好的方法是将其转换为 5 个特征,其中 1 在一列中代表一个级别。

    【讨论】:

    • @JChao 好吧,如果你有 10 个输入,KNNR 的性能会很糟糕(维度的诅咒 - 大多数 NN 将比任何示例更接近边界,无论输入比例如何)。另外,如果 RandomForest 不能满足您的要求,我真的建议您尝试 GBR - 它也是基于树的,但以更智能的方式构建树的集合,并且几乎总是(根据我的经验)优于 RandomForest
    • @JChao,抱歉,之前您提到了 KNNR,即 K-NN 回归,而现在您说的是“28 类”。所以你实际上是在尝试做一个 KNNC——一个有 28 个类的分类器?如果是真的,那么,如果没有几个技巧,拥有 28 个类是一项相当艰巨的任务 - 因为大致上你减少了你必须通过你拥有的类的数量来区分每个类与其他类的数据量。
    • @JChao 粗略地说,假设您有 10000 个训练示例,并且您训练将它们分类为 5 个类。每个类(平均)有 2000 个数据点。现在,如果您尝试对 20 个类执行相同操作,每个类将只有 400 个数据点,这肯定会使任务变得更加困难
    • @JChao 因此,如果您想对这么多类进行分类,您可能需要使用 OneVsRest 元分类器方法。这意味着你训练的不是一个而是 28 个分类器,每个类一个。它们中的每一个都应该是一个二元分类器,它应该只为每个类输出 1 或 0(以及置信度或概率)。阅读 OneVsRest 分类方法并尝试一下。另外 - 试试 Gradient Boosting Machine,它在 sklearn 中可用,可能会更好。
    • @JChao 好吧,现在我们正在进入纯数据科学的领域,这意味着你需要玩一段时间。尝试 PCA 或其他一些降维方法。尝试特征工程以提高性能等。您还可以尝试删除对结果不重要的特征 - 这对于 RandomForest 和 GBM 来说很简单,因为这两个分类器都输出特征重要性,您可以删除重要性较低的特征.