利用类权重来改善类别不平衡

本文探讨了在类别不平衡数据集上如何利用类权重优化机器学习模型,特别是 logistic 回归。通过理解类别权重如何工作,以及在Python中使用sklearn库实现,可以改善模型对少数类别的预测能力。文章介绍了简单的逻辑回归、加权逻辑回归(使用'balanced'和手动设置权重)以及如何通过网格搜索进一步提高f1分数。类别权重是解决类别不平衡问题的有效方法,特别是在二分类问题中,如心脏病预测等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者|PROCRASTINATOR 编译|VK 来源|Analytics Vidhya

概述

  • 了解类权重优化是如何工作的,以及如何在logistic回归或任何其他算法中使用sklearn实现相同的方法

  • 了解如何在不使用任何采样方法的情况下,通过修改类权重可以克服类不平衡数据的问题

介绍

机器学习中的分类问题是我们给出了一些输入(独立变量),并且我们必须预测一个离散目标。离散值的分布极有可能是非常不同的。由于每个类的差异,算法往往偏向于现有的大多数值,而对少数值的处理效果不好。

类频率的这种差异影响模型的整体可预测性。

在这些问题上获得良好的准确度并不难,但并不意味着模型是良好的。我们需要检查这些模型的性能是否具有任何商业意义或有任何价值。这就是为什么理解问题和数据是非常必要的,这样你就可以使用正确的度量并使用适当的方法优化它。

目录

  • 什么是类别失衡?

  • 为什么要处理类别不平衡?

  • 什么是类别权重?

  • logistic回归中的类权重

  • Python实现

    • 简单logistic回归
    • 加权logistic回归('平衡')
    • 加权logistic回归(手动权重)
  • 进一步提高分数的技巧

什么是类别失衡?

类不平衡是机器学习分类问题中出现的一个问题。它只说明目标类的频率高度不平衡,即其中一个类的频率与现有的其他类相比非常高。换句话说,对目标中的大多数类存在偏见。

假设我们考虑一个二分类,其中大多数目标类有10000个,而少数目标类只有100个。在这种情况下,比率为100:1,即每100个多数类,就只有一个少数类。这个问题就是我们所说的类别失衡。我们可以找到这些数据的一般领域有欺诈检测、流失预测、医疗诊断、电子邮件分类等。

我们将在医学领域中处理一个数据集,以正确理解类不平衡。在这里,我们必须根据给定的属性(独立变量)来预测一个人是否会患上心脏病。为了跳过数据的清理和预处理,我们使用的是数据的已清理版本。

在下面的图像中,你可以看到目标变量的分布。

#绘制目标的条形图
plt.figure(figsize=(10,6))
g = sns.barplot(data['stroke'], data['stroke'], palette='Set1', estimator=lambda x: len(x) / len(data) )

#图的统计
for p in g.patches:
        width, height = p.get_width(), p.get_height()
        x, y = p.get_xy() 
        g.text(x+width/2, 
               y+height, 
               '{:.0%}'.format(height), 
               horizontalalignment='center',fontsize=15)

#设置标签
plt.xlabel('Heart Stroke', fontsize=14)
plt.ylabel('Precentage', fontsize=14)
plt.title('Percentage of patients will/will not have heart stroke', fontsize=16)

在这里,

0:表示患者没有心脏病。

1: 表示病人患了心脏病。

从分布上可以看出,只有2%的患者患有心脏病。所以,这是一个经典的类别失衡问题。

为什么要处理类别不平衡?

到目前为止,我们已经对类别失衡有了直觉。但是为什么需要克服这个问题,在使用这些数据建模时会产生什么问题?

大多数机器学习算法都假定数据在类中分布均匀。在类不平衡问题中,广泛的问题是算法将更偏向于预测大多数类别(在我们的情况下没有心脏病)。该算法没有足够的数据来学习少数类(心脏病)中的模式。

让我们以一个现实生活的例子来更好地理解这一点。

假设你已经从你的家乡搬到了一个新的城市,你在这里住了一个月。当你来到你的家乡,你会非常熟悉所有的地方,如你的家,路线,重要的商店,旅游景点等等,因为你在那里度过了你的整个童年。

但是

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值