如何稳定机器学习模型?

时间:2020-06-10 07:27:04

标签: python machine-learning data-science random-forest xgboost

我有一个训练模型的数据。另外,我还有另一个数据可以每周测试一次模型的性能。但是,该模型似乎不稳定。训练分数和每周测试分数之间存在一些差异。另一方面,这是一个欺诈问题,我正在使用XGBoosting方法。如何使模型稳定?我可以使用不同的算法和参数。

parameters = {
    'n_estimators':[100],
    'max_depth':[5],
    'learning_rate':[0.1],
    'classifier__min_sample_leaf':[5],
    'classifier__criterion':['gini']
}

xgboost = XGBClassifier(scale_pos_weight=30)

xgboost_gs = GridSearchCV(xgboost, parameters, scoring='recall', cv=5, verbose=False)

xgboost_gs.fit(X_train, y_train)

enter image description here

2 个答案:

答案 0 :(得分:2)

我也从事过类似的项目,因此很难提高模型的kappa或f1分数...。这是很多人面临的问题(数据失衡),特别是在该领域。我尝试了几种模型,进行了功能工程数据清理,但似乎无济于事。我通过对不平衡的类进行过采样(雾化没有改善或创建了任何合成数据),设法将kappa提升了2%

但这并不是所有的坏消息!我发现,就误报/误报而言,不同的模型会产生不同的结果。

问题是,您/您的公司想优先考虑什么?假阴性少(分类为欺诈,但实际上不是欺诈,可能更保守)的模型或假阳性少(分类为不是欺诈,但实际上是欺诈)的模型。这是一个交易活动,可以找到解决您问题的模型,不仅要关注Kappa或F1的准确性!在这种情况下,混淆矩阵将为您提供帮助!

答案 1 :(得分:1)

1个班级只有24个项目。这太少了,因此您必须进行一些采样才能使两个类接近相同的数量。这样做是为了进行欺诈检测,您可以轻松地获得数千个非欺诈案件,但只有一堆充满欺诈案件。

您可以使用诸如SMOTE之类的采样方法,在该方法中,使用较少的观察值对类进行过度采样,而使用更多的观察值对类进行欠采样,以使它们对每个类具有相同数量的事件。

因此,简而言之,您需要一个良好的平衡数据集进行训练。我假设您在训练集中的第1类案例太少了