本文主要讲解“如何使用python提高不平衡数据模型的性能”。本文的解释简单明了,易学易懂。现在,请跟随边肖的思路,学习学习“如何利用python提高不平衡数据模型的性能”!
数据集
训练数据中有三个标签,分别标记为[1,2,3],这意味着问题是一个多分类问题。训练数据集有17个特征和38829个独立数据点。在测试数据中,有16个未标记的特征和16641个数据点。训练数据集非常不平衡,大部分数据在类别1 (95%),而类别2和类别3的数据分别为3.0%和0.87%,如下图所示。
算法
经过初步观察,我们决定采用随机森林(RF)算法,因为它优于支持向量机、Xgboost和LightGBM算法。在这个项目中选择射频还有其他几个原因:
森林对过拟合有很强的鲁棒性;
参数化还是很直观的;
在这个项目中,有许多将随机森林算法应用于高度不平衡数据集的成功用例。
个人以往算法实现经验;
要查找* * *参数,请使用scikit-sklearn实现的GridSearchCV对指定的参数值执行网格搜索。更多细节可以在我的Github上找到。
为了处理数据不平衡,使用了以下三种技术:
A.使用集成交叉验证(CV):
在这个项目中,交叉验证用于验证模型的健壮性。整个数据集分为五个子集。在每个交叉验证中,四个子集用于训练,其余子集用于验证模型,模型还预测测试数据。在交叉验证结束时,将获得五个测试预测概率。* * *,平均所有类别的概率。模型的训练性能稳定,每次交叉验证都有稳定的召回率和f1评分。这项技术也帮助我在Kaggle比赛中取得了不错的成绩(前1%)。以下代码片段显示了集成交叉验证的实现:
B.设置类别权重/重要性:
成本敏感学习是使随机森林更适合从非常不平衡的数据中学习的方法之一。随机森林倾向于支持大多数类别。因此,对少数群体的错误分类施加昂贵的惩罚可能是有益的。因为这种技术可以提高模型的性能,所以我给少数群体分配了较高的权重(即较高的误分类成本)。然后,将类别权重合并到随机森林算法中。我根据类别1中数据集的数量与其他数据集的数量之比来确定类别权重。例如,类别1和类别3的数据集数量之间的比率约为110,而类别1和类别2的比率约为26。现在我稍微修改一下数量来提高模型的性能。下面的代码片段展示了不同类权重的实现:
C.过大预测标签而不是过小预测(Over-Predict a Label than Under-Predict):
这项技术是可选的。实践表明,这种方法对提高少数类别的性能非常有效。简而言之,如果模型被错误地归类为3类,这种技术可以在有限的程度上惩罚模型,但对2类和1类的惩罚稍差。为了实现这个方法,我改变了每个类别的概率阈值,将类别3、类别2、类别1的概率按递增顺序设置(即P3=0.25,P2=0.35,P1=0.50),迫使模型过度预测类别。这个算法的详细实现可以在Github上找到。
最终结果
以下结果显示了上述三种技术如何帮助提高模型性能:
1.使用集成交叉验证的结果:
2.使用集成交叉验证+类别权重的结果:
3.使用集成交叉验证+类别权重+过大预测标签的结果:
感谢阅读。以上就是“如何用python提高数据不平衡模型的性能”的内容。学习完这篇文章,相信你对如何使用python提高数据不平衡模型的性能有了更深的理解,具体用法还需要实践验证。在这里,边肖将为您推送更多关于知识点的文章,敬请关注!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/128598.html