对我的计划的建议——学生和成绩的大型数据集,希望对后 2% 的人进行分类

Advice for my plan - large dataset of students and grades, looking to classify bottom 2%

我有一个数据集,其中包括全国学生的社会经济指标及其成绩。更具体地说,这个数据集有 36 个变量,大约 3000 万学生作为预测变量,然后学生评分作为响应。

我的目标是能够预测学生是否会不及格(即在成绩方面处于全国倒数 2%)。我知道 class 不平衡数据集 (98% : 2%) 的化会引入偏差。根据一些研究,我计划通过增加少数 class 中错误 class 化的成本来解决这个问题 class.

有人可以确认这是正确的方法吗(没有更好的方法,我假设有)?而且,考虑到这个数据集的性质,有人可以帮我选择一个机器学习算法来完成这个吗?

我正在 Google Colab 中使用 TensorFlow 2.0。我使用 pandas 将所有数据一起编译成一个 .feather 文件。

在数据集不平衡的情况下,使用加权 class 是最常用的方法,但是对于二进制文件来说,有如此大的数据集(30M 训练示例) class化问题表示第一个 class 为 2%,第二个为 98%,我可以说很难防止模型 公正 反对第一个class 使用加权 class 因为它与减少训练集大小以达到平衡没有太大区别。

这里是模型精度评估的一些步骤。


  1. 将您的数据集拆分为训练集、评估集和测试集。

  2. 对于评估指标,我建议使用这些替代方案。

    a. 确保至少有+20%,代表两者的第一个class 评估和测试集。

    b. 将评估指标设置为精度和召回率以提高模型准确性 (而不是使用 f1 分数)。

    c. 将评估指标设置为 Cohen 的 kapp 分数(系数)。

    从我自己的角度来看,我更喜欢使用b


既然你用的是tensorflow,我假设你对深度学习很熟悉。所以使用深度学习而不是机器学习,这使您能够拥有许多其他选择,无论如何,这里有一些机器学习和深度学习方法的步骤。

对于机器学习算法


  1. 决策树算法(尤其是随机森林)。
  2. 如果我的特征没有相关性,相关性接近于零(即0.01), 我将尝试 补充朴素贝叶斯 class 化器以获得 多项式特征 高斯朴素贝叶斯 使用 加权 class 用于 连续特征
  3. 尝试一些非参数学习算法。你可能不适合这个 使用支持向量机 (SVM) 的训练集很容易因为你 不知何故有大数据集,但你可以试试。
  4. 尝试无监督学习算法 (这有时会给你更多 generic 模型)

对于深度学习算法


  1. 编码器解码器架构或简单的生成对抗 网络(GAN)。
  2. 连体网.
  3. 使用 1D 卷积 层训练模型。
  4. 使用加权 class.
  5. 训练集的平衡批次随机选择。

你还有很多其他选择,从我自己的角度来看,我可能会努力尝试1、3或5。

对于深度学习,第 5 种方法有时效果很好,我建议尝试使用第 1、3 种方法。