我正在自学一些数据科学,并开始了一个 Kaggle 项目。我已经用几百万行数据拟合了一个随机森林分类模型(使用 sci-kit learn)。每行有两种可能的结果(0 或 1)。当我针对测试数据运行它时,每行都得到 0。这实际上是不可能的,但我不知道如何诊断我的模型以及如何前进。这是极端过拟合的例子吗?我没有看到的训练数据(或测试数据)是否更有可能出现问题?
我应该简单地增加估算器的数量吗?是否有可能我以一种不会导致错误的微妙方式错误地格式化了输入文件?我不知道如何前进。
我正在自学一些数据科学,并开始了一个 Kaggle 项目。我已经用几百万行数据拟合了一个随机森林分类模型(使用 sci-kit learn)。每行有两种可能的结果(0 或 1)。当我针对测试数据运行它时,每行都得到 0。这实际上是不可能的,但我不知道如何诊断我的模型以及如何前进。这是极端过拟合的例子吗?我没有看到的训练数据(或测试数据)是否更有可能出现问题?
我应该简单地增加估算器的数量吗?是否有可能我以一种不会导致错误的微妙方式错误地格式化了输入文件?我不知道如何前进。
其中一些可能性包括:
1)训练数据存在类别不平衡。
解决方案:
使用 CV = 5 或 10 训练模型;
做一个对数变换,使目标分布在本质上更正常;
检查您是否可以添加可以修复分布的权重变量。
2)测试数据是一个小的子样本。由于是 Kaggle,我相信测试数据在本质上是标准的,所以问题可能出在生成提交脚本的过程中。
作为初学者,您应该使用论坛中可用的任何基准脚本开始,它不应该有这样的问题。
1) 像 0xF 建议的那样:请检查您预测的标签的分布,即 0 和 1 的数量。如果存在类不平衡问题并且您为所有实例分配了相同的权重,则最有可能发生此问题。
2) 假设您处理了类不平衡,同时使用函数 predict_proba() 和 predict()。现在,用 prob(0) 来计算 prob(1) 的比例。在除以零错误的情况下无关紧要,因为您可以用一些非常大的数字替换这些数字。现在,根据您的方便调整分类边距,以尽量减少误报和漏报。