R中分类模型的增量学习

机器算法验证 分类 监督学习
2022-03-03 10:39:47

假设,我有一个分类器(它可以是任何标准分类器,如决策树、随机森林、逻辑回归等),用于使用以下代码进行欺诈检测

library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier 

Say, Y is a binary outcome - Fraud/Not-Fraud

现在,我已经在一个看不见的数据集上进行了预测。

pred = predict(rfFit, newData)

然后我得到了调查组对我的分类的反馈,发现我错误地将欺诈归类为非欺诈(即One False Negative无论如何,我可以让我的算法明白它犯了错误吗?即,有什么方法可以在算法中添加反馈循环,以便它可以纠正错误?

我能想到的一个选择是构建一个adaboost classifier,以便新分类器纠正旧分类器的错误。or 我听说过Incremental Learningor Online learning中是否有任何现有的实现(包)R

这是正确的方法吗?或者有没有其他方法来调整模型而不是从头开始构建它?

2个回答

提升策略可能会提高模型的性能,因此值得一试。关于增量/在线学习,我不知道 R 中有任何实现它的包(其他人,如果我错了,请纠正我)。在 Scikit Learn 中,有允许增量学习的核外分类器。但是,如果您使用 R,您可能别无选择,只能编写自己的增量模型。无论哪种情况,研究 Scikit Learn 的核外分类器可能会让您知道从哪里开始。

要记住的另一个细节是在单个误报或误报上更新模型将在多大程度上提高模型的性能。在欺诈领域,非欺诈事件通常比欺诈多数千到数百万倍。因此,尝试学习正确区分每个欺诈实例很重要,但在单个欺诈实例上更新模型可能不会显着改变模型。考虑其他策略以使模型将更多重要性归因于欺诈实例。

根据人类调查人员的反馈,改进监督模型的最直接方法是从纠正的实例(即正确标记后预测不正确的实例)建立一个单独的模型。然后,您可以让您的两个模型通过聚合它们预测的类成员资格对未来实例的分类进行“投票”。例如,ModelA可能认为Instance1是 [Fraud: 0.65, Non-Fraud: 0.35],而ModelB认为Instance1是 [Fraud: 0.47, Non-Fraud: 0.53]。因此,整体的预测将是[欺诈:(0.65+0.47)/2=0.56,非欺诈:(0.35+0.53)/2=0.44]。

如果您的原始模型表现得比偶然性好,那么它正确分类的实例数量将大于错误分类的数量。因此,如果模型在不成比例的实例数量上进行训练,您不希望对模型赋予相同的权重。有两个直接的选项可以处理这种差异:1)等到您积累足够的校正实例以大致等于训练原始模型的数量,或者 2)根据模型在验证集上的执行情况为每个模型分配权重。

我过去做过一些关于在线和增量学习的研究。您需要考虑一些想法。

每个分类器都可以“进行”增量学习,唯一的问题是有些分类器更难做到。没有这样的增量学习算法,只有一种使用通用算法实现这种购买的方法。通常,您会选择其中一个并调整您训练它的方式,并以批量或在线方式提供数据。

您可以通过两种方式做到这一点: a) 每次有新样本(或一组样本)到达时,从头开始重新训练模型。显然这并不理想,但是如果您的模型不太复杂(意味着您可以在即将到来的实例之间执行整个训练)并且您限制了数据集大小(丢弃旧数据、新数据或随机数据并保持稳定数量的训练实例),它可以在某些情况下工作。可以在此处找到使用支持向量机进行这种“伪增量”学习的一个很好的示例。

b)找到一种方法来更新您的模型参数/权重,仅在预测错误时修改“一点点”这些参数。神经网络自然非常适合这一点,因为您可以训练模型,保存权重,然后在新批次数据到来时重新训练。此外,您可以调整学习率,以增加/减少与新输入的相关性。如果您可以为您的案例选择任何算法,这将是我的选择。但是,还有许多其他方法:例如,在贝叶斯方法中,您可以对某些参数应用数值增量/减量来修改分布(参见另一个示例。)

做一些阅读并寻找与您想要的学习算法行为相匹配的先前方法。一开始为自己设置所有东西而不是使用这个或那个库似乎令人生畏,但是当你到达你觉得自己负责模型的所有学习过程的地步时,它变得超级酷。

祝你好运!