为具有分类变量的数据集选择模型

数据挖掘 预测建模 模型选择
2021-09-25 12:02:50

我有一个关于我应该用于我拥有的数据集的模型类型的问题。

该数据集共有 7 个自变量和 1 个因变量,我需要预测它们。

在 7 个输入变量中,其中 6 个是分类变量,1 个是日期列。现在我已经使用标签编码对分类列进行了编码,并将它们转换为数值。现在我在这个数据集上使用了一个简单的线性回归模型,并获得了 0.11 的归一化 RMSE 值。

如果我想提高这个准确性,我该怎么做呢?考虑到我拥有的数据集,我如何推导出可以使用的模型类型?

这些数据主要是关于每个产品组的预测收入。这就是为什么我有那些代表产品组层次结构的分类列。

1个回答

我知道您在这里询问模型选择,但值得首先讨论您的输入数据。具有许多分类特征的数据仍然是一项活跃的研究;所以它不是那么简单。我建议你先看看这篇非常相似的帖子,我在其中讨论了一些将分类变量转换为数值的技术。

由于您提供的有关分类变量的信息很少,例如每个分类变量有多少级别或您如何进行标签编码(只是开箱即用的方法?)很难给出更好的指导。一般来说,如果标签编码是分类的,则主要用于编码目标变量(因变量),而您提到您对其他 6 个自变量(输入)使用标签编码。在这里,您的目标是数值(回归),因此我将超越标签编码来转换您的独立分类变量。

想象一下以下非常简化的场景(仅用于教育目的),以了解为什么标签编码在有超过 1 个独立分类变量的情况下不是一个好主意:

   Color   Year
0    Red   2010
1   Blue   2011
2  Green   2012

现在标签编码这会将其转换为(天真地说):

  Color  Year
0   1    1
1   2    2
2   3    3

有一些方法可以为每个分类变量和与其级别相关的值构建自己的字典,同时标签编码以防止这种明显的错误。除此之外,由于您几乎不会超过 0.11 的 RMSE 值,因此可以考虑您的输入值(可能未正确编码!)和模型的选择。

也许尝试使用此代码来处理您的独立分类变量。请注意,作为一般经验法则,请避免使用 one-hot 编码,尽管它在 XGBoost 中被广泛使用(在帖子中进行了解释)。也许尝试“目标编码”!

现在说到型号的选择:

  1. 您是否尝试过正则化(L1,L2)?
  2. 对自变量的独立性有信心吗?在简单回归中,您假设这成立,但可能并非如此,您的自变量是相关的。也许你应该首先使用混淆矩阵来分析这个(见这里的简短教程)
  3. 您是否尝试过梯度提升决策树 (GBDT) 进行回归?注意 1:如果您想使用 GBDT,请不要单独留下其他 1 个自变量。您说 7 个自变量中有 6 个。我假设另一个是连续数值?如果是这样,您必须在 GBDT 中正确处理该问题,例如二值化(放入垃圾箱)。注意2:您可以尝试XGBoostCatboost,以及一个不错的教程使用 Catboost。每个都有其优点和缺点。对于前一种超参数调整可能具有挑战性,并且没有办法自动考虑分类变量但具有更大的社区。虽然后者是最近发布的(去年年中),但在超参数调整方面要容易得多(通常默认设置效果很好),并且有一些方法可以自动解释分类特征而无需显式编码,但支持较少且社区较小. Note3:GBDT 的好处是你不需要担心特征本身的相关性。算法会自动忽略强相关特征的耦合。注意 4:尽管有内置的正则化,但您可能很容易过拟合。

我坚信照顾好您的输入以及正确选择算法会增加您的 RMSE 误差。