我正在尝试解决XGBoost模型生产过程中出现的问题。我当前的问题是,训练数据中的列顺序与我需要评分的生产数据中的列顺序未完全相同。该问题是由于onehot编码步骤引起的。如果不是每个变量的所有级别都出现在训练数据中的生产得分数据中。这会导致评分结果不一致且不正确,或者评分过程会完全失败。
为了克服这一点,我试图在onehot编码步骤中提出一个过程,以确保列结构是一致的。我的理论是,如果保存从训练数据集创建的标头矢量,则可以针对每个生产评分集在此标头集上调用onehot预测函数。
例如。如果我有2个数据集进行测试和训练。我可以通过onehot包对火车数据进行onehot编码:
header <- onehot(train, max_levels = 100)
trainmatrix <- predict(header, train)
要保留此矩阵的列结构,我想简单地使用上面已经创建的标头对象对测试数据进行热编码,简单地:
testmatrix <- predict(header, test)
问题是结果与我希望的不一致。
如果我有火车数据:
要创建标头矢量:
然后使用它来对测试数据进行热编码:
我得到矩阵:
这些结果显然不符合我对有效解决方案的期望。有人对此有不同的解决方案吗?