RandomForest 惊人的高精度

数据挖掘 Python 随机森林
2022-02-18 09:57:52

在尝试了朴素贝叶斯之后,我一直在尝试在 Python 上使用随机森林,这使我的准确率低于我的预期,为 62%。我的 csv 文件有大约 14,000 条记录,我将 80% 用于训练集,20% 用于测试集。我尝试了不同的参数,比如 100 棵树,500 和 1000,n_jobs 的 -1 等等,但在所有这些测试中,准确度从未发生太大变化,它总是在 74% 或 75% 左右,有时几乎是 76%。我检查了教如何实现的在线教程得到了73%的准确率,因为我的测试得到了更高的准确率,我并不担心,认为这种算法是正常的。

然而,在我最近的测试中让我感到惊讶,唯一的区别是我将模型和矢量化器保存到文件中,因此我不必每次都训练模型。新脚本加载了这些文件,将加载的(训练的)模型应用于测试集,哇,我得到了迄今为​​止我见过的最高准确率,93.989%,几乎是 94%。

有人有类似的经历吗?这种大幅增加是否与将模型保存到文件并加载它有关?其余的代码都是一样的。还是我太幸运了,如果我尝试更多次,我会恢复到通常的 75% 左右的准确率?

2个回答

您可以确定将模型保存到磁盘不会使模型在再次加载时具有更高的精度。例如,如果参数被截断,将模型保存到磁盘只会导致性能下降。

为了建立一个公平和严格的比较方法,你必须跟踪你的训练/测试分割结果。从这个意义上说,您可以:

  • 使您的代码可重现,方便地使用随机种子
  • 在保存模型之前,您可以通过保存数据或返回训练集和测试集的索引来保存分割结果。为此,您必须将数据集存储在列表中(例如,带有文件名的列表......)

获得无偏准确度估计的一种方法是组合整个数据集,运行随机森林(包含装袋,就像大多数算法一样),并报告随机森林袋外 (OOB) 准确度(如果使用 sklearn,请参阅 oob_score_)作为对真实准确度的估计(如Breiman 建议的,参见第 3.1 节)。您可以这样做,这样您的训练集就不会与您的测试集重叠。此 OOB 可用作准确度的估计值。