大家好,我是小寒
今天给大家分享处理不平衡数据集的常用方法。
在开始之前,我们先来了解一下什么是不平衡的数据集。
不平衡数据集是指在分类任务中,不同类别的样本数量差异显著的数据集,通常表现为少数类样本远少于多数类样本。这样的数据集在现实生活中很常见,比如欺诈检测、医疗诊断、故障预测等场景。
例如,在一个包含 10,000 个实例的数据集中,95% 属于一个类(类 0),只有 5% 属于另一个类(类 1),很明显,模型可能会高度关注多数类,而经常完全忽略少数类。
不平衡数据的问题
在不平衡的数据集中,多数类别主导着模型的预测,导致少数类别的预测性能较差。
例如,如果 95% 的数据被标记为 0 类,则将所有实例预测为 0 类可获得 95% 的准确率,即使 1 类预测完全不正确。
示例:
考虑一个欺诈检测系统,其中 99% 的交易是合法的,只有 1% 是欺诈的。预测所有交易均为合法的模型将达到 99% 的准确率,但无法检测到任何欺诈行为,使其无法达到预期目的。
让我们通过一个例子来可视化不平衡数据
import numpy as npimport pandas as pdimport plotly.express as pxfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matriximport plotly.figure_factory as ff# Generate imbalanced,, width=800, height=600)fig.update_layout(title_x=0.5)fig.update_xaxes(tickvals=[0, 1], ticktext=['Class 0', 'Class 1'])fig.show()# Split, width=800, height=600, title_x=0.5)fig.show()
此代码生成一个不平衡的数据集,其中 95% 的实例被标记为类 0,只有 5% 被标记为类 1。
当我们可视化类别分布时,我们会看到两个类别之间的明显不平衡。
Accuracy: 0.9815Precision: 0.8451Recall: 0.6977F1-score: 0.7643
混淆矩阵显示,虽然准确率很高,但少数类(类1)的准确率和召回率要低得多。该模型偏向多数类。
© 版权声明