SVM表现不如随机森林
我正在使用 scikit-learn
这个Python库来解决一个分类问题。我用了 RandomForestClassifier
和支持向量机(SVM,指的是SVC类)。结果发现,随机森林的准确率大约是66%,召回率是68%,而SVM的准确率和召回率都只有45%。
我对rbf-SVM的参数C和gamma进行了 GridSearch
,而且在此之前也考虑了数据的缩放和标准化。不过,我觉得随机森林和SVM之间的差距还是太大了。
我还应该考虑什么,才能让SVM的表现更好呢?
我觉得至少应该能达到相同的结果。(所有的评分都是通过交叉验证在同一组测试和训练数据上得到的。)
1 个回答
4
正如EdChum在评论中提到的,并没有任何规则或保证说某个模型总是表现最好。
SVM(支持向量机)使用RBF核时,假设最佳的决策边界是平滑的,并且对旋转不敏感(前提是你选择的特征缩放方式不受旋转影响)。
而随机森林模型则不假设边界是平滑的(它的预测是分段常数的),更倾向于选择与坐标轴对齐的决策边界。
随机森林模型的假设可能更适合当前的任务。
顺便说一下,感谢你在提问之前对C
和gamma
进行了网格搜索,并检查了特征归一化的影响,这样的准备工作很棒!
编辑:为了获得更多的见解,可以考虑绘制这两个模型的学习曲线。可能的情况是,SVM模型的正则化和核带宽无法很好地处理过拟合,而随机森林的集成特性在这个数据集大小下表现得更好。如果你有更多的数据,这个差距可能会缩小。学习曲线图是检查你的模型如何从更多样本中受益的好方法。