0

我正在处理一个有监督的学习二元分类任务。作为特征,我有我用一袋单词建模的文本。我正在使用 python scikit-learn 管道。

现在,我并不完全信任我的数据集。我知道它有一些偏见。我正在尝试利用我对该问题的领域知识来抵消这些偏差对模型的影响。当然,在可能的范围内。

例如,在拟合模型并进行特征重要性分析后,我发现一个特征——即标记“png”的存在/不存在——通常存在于正类中,但不存在于负类中。因此,与其他功能相比,该模型当然赋予了它非常高的权重。确实,在野外,“png”在积极方面比在消极方面更常见,但由于我的领域知识,我知道差异绝不是那么大。让我们假设我是对的。那么问题是,我怎样才能修改训练,使模型赋予该特征“一些”但更轻的权重?

欢迎任何想法。到目前为止,对我来说最有意义的是为一些训练数据点随机“隐藏”该特征。这可以通过修改解析文本的标记器或在 BOW 矩阵转换后将标记特征列替换为 0 来完成。一种或另一种方式,我需要“随机隐藏”仅在适合期间而不是在预测期间发生。类似于神经网络中的 dropout。我强烈希望将此逻辑作为 scikit-learn 管道的一部分而不是直接在其外部的数据集上实现,因为我经常通过我的项目拆分我的数据集以进行交叉验证、培训等。

不幸的是,我在 scikit-learn API 中没有找到任何可以让我在预测期间发生的管道内的转换和训练期间发生的转换之间产生任何差异的东西。

关于如何做到这一点的任何想法?

4

0 回答 0