【问题标题】:How can I stabilize a machine learning model?如何稳定机器学习模型?
【发布时间】:2020-09-29 12:57:39
【问题描述】:

我有一个数据来训练模型。此外,我还有另一个数据可以每周测试模型的性能。但是,模型似乎并不稳定。训练分数和每周测试分数之间存在一些差异。另一方面,这是一个欺诈问题,我正在使用 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)

【问题讨论】:

  • 你可以试试keras或tensorflow之类的深度学习方法。您可以使用此设置检查它是否正常工作kaggle.com/dakshmiglani/…

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


【解决方案1】:

我也做过类似的项目,提高模型的kappa或者f1分数非常困难....这是很多人面临的问题(数据不平衡),特别是在这个领域。我尝试了几种模型,特征工程数据清理,但似乎没有任何效果,我设法通过对不平衡类进行过采样将 kappa 提高了 2%(smote 没有改进或任何合成数据创建)

但这并不全是坏消息!我发现不同的模型在误报/误报方面会产生不同的结果。

所以问题是,您/您的公司希望优先考虑什么?一种具有较少误报(分类为欺诈,但实际上不是欺诈,可能是这个,更保守)或更少误报(分类为不是欺诈,但实际上是欺诈)的模型,不要只看kappa或F1的准确性!在这种情况下,混淆矩阵将为您提供帮助!

【讨论】:

  • 感谢您的评论。实际上,我正在研究不平衡的数据。但我使用 (scale_pos_weight=30) 参数进行平衡。另外,我正在使用“召回”分数对模型进行评分。我更喜欢更少的假阴性。我怎样才能做到这一点 ?再次感谢您。
  • 是的,回忆很好,我的建议是尽可能多地尝试模型并检查混淆矩阵,看看哪些模型产生的假阴性最少!我记得 SVM 在 FP 方面对我的数据集特别有用,它将取决于数据集和模型!尝试不同的参数等,我建议您创建某种自动化,以便您输入模型列表并自行训练模型或类似的东西!希望这有帮助!
【解决方案2】:

您只有 1 个班级的 24 件物品。这太少了,因此您必须进行一些抽样才能使两个类接近相同的数量。这是为了进行欺诈检测,您可以轻松获得 1000 多个非欺诈案例,但只有一手欺诈案例。

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

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

【讨论】:

  • 感谢您的评论。其实,照片不是训练成绩。在训练数据中,有 72 条欺诈记录,1897 条非欺诈记录。是的,我需要在它们之间做出平衡,为此我使用 scale_pos_weight 参数。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2022-12-10
相关资源
最近更新 更多