怎么用python提升数据不平衡模型的性能-成都快上网建站

怎么用python提升数据不平衡模型的性能

这篇文章主要讲解了“怎么用python提升数据不平衡模型的性能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用python提升数据不平衡模型的性能”吧!

创新互联专注于企业全网整合营销推广、网站重做改版、霸州网站定制设计、自适应品牌网站建设、H5开发商城系统网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为霸州等各大城市提供网站开发制作服务。

数据集

训练数据中有三个标签,分别标记为[1、2、3],这意味着该问题是一个多分类问题。训练数据集有17个特征以及38829个独立数据点。而在测试数据中,有16个没有标签的特征和16641个数据点。该训练数据集非常不平衡,大部分数据是1类(95%),而2类和3类分别有3.0%和0.87%的数据,如下图所示。

怎么用python提升数据不平衡模型的性能

算法

经过初步观察,决定采用随机森林(RF)算法,因为它优于支持向量机、Xgboost以及LightGBM算法。在这个项目中选择RF还有几个原因:

  1. 机森林对过拟合具有很强的鲁棒性;

  2. 参数化仍然非常直观;

  3. 在这个项目中,有许多成功的用例将随机森林算法用于高度不平衡的数据集;

  4. 个人有先前的算法实施经验;

为了找到***参数,使用scikit-sklearn实现的GridSearchCV对指定的参数值执行网格搜索,更多细节可以在本人的Github上找到。

为了处理数据不平衡问题,使用了以下三种技术:

A.使用集成交叉验证(CV):

在这个项目中,使用交叉验证来验证模型的鲁棒性。整个数据集被分成五个子集。在每个交叉验证中,使用其中的四个子集用于训练,剩余的子集用于验证模型,此外模型还对测试数据进行了预测。在交叉验证结束时,会得到五个测试预测概率。***,对所有类别的概率取平均值。模型的训练表现稳定,每个交叉验证上具有稳定的召回率和f1分数。这项技术也帮助我在Kaggle比赛中取得了很好的成绩(前1%)。以下部分代码片段显示了集成交叉验证的实现:

怎么用python提升数据不平衡模型的性能

B.设置类别权重/重要性:

代价敏感学习是使随机森林更适合从非常不平衡的数据中学习的方法之一。随机森林有倾向于偏向大多数类别。因此,对少数群体错误分类施加昂贵的惩罚可能是有作用的。由于这种技术可以改善模型性能,所以我给少数群体分配了很高的权重(即更高的错误分类成本)。然后将类别权重合并到随机森林算法中。我根据类别1中数据集的数量与其它数据集的数量之间的比率来确定类别权重。例如,类别1和类别3数据集的数目之间的比率约为110,而类别1和类别2的比例约为26。现在我稍微对数量进行修改以改善模型的性能,以下代码片段显示了不同类权重的实现:

怎么用python提升数据不平衡模型的性能

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.使用集成交叉验证的结果:

怎么用python提升数据不平衡模型的性能

2.使用集成交叉验证+类别权重的结果:

怎么用python提升数据不平衡模型的性能

3.使用集成交叉验证+类别权重+过大预测标签的结果:

怎么用python提升数据不平衡模型的性能

感谢各位的阅读,以上就是“怎么用python提升数据不平衡模型的性能”的内容了,经过本文的学习后,相信大家对怎么用python提升数据不平衡模型的性能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


本文标题:怎么用python提升数据不平衡模型的性能
本文地址:http://kswjz.com/article/ijpecs.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流