我还没有找到任何关于将随机森林应用于 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% 的测试错误。