我正在一个特征集上训练一个 XGBoost 回归模型包括一个功能具有高基数(~100)。首先,我使用 one-hot-encoding 进行转换然后将集合拆分为training和testing集合。该模型似乎运作良好。到目前为止,一切都很标准。
当我对看不见的数据进行预测时,问题就出现了。在看不见的数据中,基数略有不同。换个角度来看,说一下独特的价值观在训练和测试集中是. 在看不见的数据中,基数集是. 所以不会出现在看不见的数据中。为了能够使用我拥有的模型进行预测,我必须在看不见的数据中拥有与training. 为了解决这个问题,我尝试了两种方法:
- 在看不见的数据中创建一个与虚拟变量相对应的新列, 并将 0 分配给所有行。在这里,我的逻辑是:“好吧,显然很少观察到,因此创建一个全为零值的列将使集合保持一致,并且不应该对准确性造成如此严重的伤害”。确实如此。
- 通过删除虚拟变量对应的列来训练 XGBoost 模型. 您可以将其视为对基数集应用 one-hot-encoding. 在这种情况下,
testing集合和未见数据的准确性很好。但是,问题是我需要再次训练模型,而我不想在每次要进行预测时都这样做。
我知道除了 one-hot-encoding 之外的分类特征还有其他方法,但我很好奇如何解决这个特定问题。