不平衡数据的二元分类模型

数据挖掘 机器学习 Python 分类 逻辑回归
2021-10-04 01:23:59

我有一个具有以下规格的数据集:

  • 包含 193,176 个样本和 2,821 个阳性样本的训练数据集
  • 包含 82,887 个样本和 673 个阳性样本的测试数据集
  • 有10个功能。

我想执行二进制分类(0 或 1)。我面临的问题是数据非常不平衡。在规范化和缩放数据以及一些特征工程并使用几种不同的算法之后,这些是我可以实现的最佳结果:

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

即只有 6 个正确的正面命中。这是使用逻辑回归。以下是我尝试过的各种方法:

  • 不同的算法,如 RandomForest、DecisionTree、SVM
  • 更改参数值以调用函数
  • 一些基于直觉的特征工程,包括复合特征

现在,我的问题是:

  1. 我可以做些什么来提高正面点击的数量?
  2. 在这种情况下如何确定是否存在过拟合?(我尝试过绘图等)
  3. 如果这可能是我可能拥有的最合适的人选,那么在什么时候可以得出结论?(考虑到 673 次中只有 6 次命中,这似乎很可悲)
  4. 有没有一种方法可以使正样本实例的权重更大,从而提高模式识别从而导致更多点击?
  5. 哪些图形可以帮助检测异常值或对哪种模式最适合的直觉?

我将 scikit-learn 库与 Python 一起使用,所有实现都是库函数。

编辑:

以下是其他一些算法的结果:

随机森林分类器(n_estimators=100)

[[82211   667]
[    3     6]]

决策树:

[[78611   635]
[ 3603    38]]
2个回答
  1. 既然是做二分类,有没有试过调整分类阈值?由于您的算法似乎相当不敏感,我会尝试降低它并检查是否有改进。

  2. 您始终可以使用Learning Curves或一个模型参数与训练和验证误差的关系图来确定您的模型是否过度拟合。它似乎不适合您的情况,但这只是直觉。

  3. 好吧,最终这取决于您的数据集以及您尝试过的不同模型。在这一点上,没有进一步的测试,不可能有一个确定的答案。

  4. 在不声称自己是该主题的专家的情况下,您可能会遵循许多不同的技术(提示:google 上的第一个链接),但在我看来,您应该首先确保仔细选择成本函数,以便它代表什么你实际上正在寻找。

  5. 不知道你所说的模式直觉是什么意思,你能详细说明一下吗?

顺便说一句,您尝试过的不同算法的结果如何?他们有什么不同吗?

由于数据非常倾斜,在这种情况下,我们也可以尝试对数据进行过采样后进行模型训练。

SMOTE 和 ADASYN是我们可以用来对数据进行过采样的一些技术。