随机森林能比 MNIST 上 2.8% 的测试错误做得更好吗?

机器算法验证 r 机器学习 分类 随机森林 scikit-学习
2022-02-27 17:50:30

我还没有找到任何关于将随机森林应用于 MNIST、CIFAR、STL-10 等的文献,所以我想我自己会尝试使用置换不变的MNIST。

R中,我尝试过:

randomForest(train$x, factor(train$y), test$x, factor(test$y), ntree=500)

这运行了 2 个小时,得到了 2.8% 的测试错误。

我也试过scikit-learn

RandomForestClassifier(n_estimators=2000,
                       max_features="auto", 
                       max_depth=None)

70 分钟后,我得到了 2.9% 的测试错误,但使用 n_estimators=200 时,仅 7 分钟后我得到了 2.8% 的测试错误。

使用OpenCV,我尝试了

rf.train(images.reshape(-1, 28**2), 
         cv2.CV_ROW_SAMPLE, 
         labels.astype('int'))

这运行了 6.5 分钟,rf用于预测的测试误差为 15%。我不知道它训练了多少棵树,因为它们对随机森林的 Python 绑定似乎忽略了这个params论点,至少在 2.3.1 版中是这样。我也不知道如何让 OpenCV 清楚我想解决分类问题,而不是回归——我有疑问,因为替换astype('int')astype('float32')给出了相同的结果。

神经网络中,对于排列不变的MNIST 基准,最先进的技术是 0.8% 的测试错误,尽管在一个 CPU 上训练可能需要超过 2 小时。

是否有可能比使用随机森林的 MNIST 上 2.8% 的测试错误做得更好?我认为普遍的共识是随机森林通常至少与内核 SVM 一样好,我相信它可以得到 1.4% 的测试错误。

1个回答

是否有可能比使用随机森林的 MNIST 上 2.8% 的测试错误做得更好?

可能是。但这并不意味着您将使用默认获得的相同功能。决策树通常不能很好地解决像这样的高维问题,因为您一次只能拆分一个特征。随机森林扩展了决策树的用途,但它们仍然存在相同的问题。使用 RF 击败 2.8% 可能需要您进行一些特征预处理并将特征转换为更有用的子集。

神经网络和内核 SVM 隐含地进行了一些特征转换/工程。因此,从某种意义上说,随机森林在没有任何额外工作的情况下相当接近,这令人印象深刻(事实上,RF 流行的真正原因是它很容易获得“足够好”的结果)。

我认为普遍的共识是随机森林通常至少与内核 SVM 一样好

没有这样的共识。它们在准确性方面通常具有相似的结果 - 但它们是非常不同的算法,具有不同的优势/劣势。在许多问题上,准确度是相似的,在其他问题上,SVM 以可观的优势获胜,在某些 RF 上以可观的优势获胜。