首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调谐随机森林分类器

调谐随机森林分类器
EN

Stack Overflow用户
提问于 2017-09-23 18:11:54
回答 2查看 1.4K关注 0票数 0

我正在研究一个随机森林分类器模型,将数据分类为4类。数据集是来自两个不同的防火墙应用程序的连接日志,带有100K+示例和10个属性。训练集样本数据集的准确度为0.90~0.97。

使用测试数据,我从一个防火墙获得了0.7-0.97的日志,另一个防火墙得到了~0.5 (总是)。我应该考虑调整射频,还是我的模型完全有问题?“文本field1”是要预测的。

代码语言:javascript
复制
y,label = pd.factorize(train["Text field1"])

clf=RandomForestClassifier(n_jobs=10,n_estimators=100,max_features=1,max_depth=80)
clf.fit(train[features],y)
pred=clf.predict(test[features])
pred_label=label[pred]

`

我是这方面的初学者,任何帮助都是非常感谢的。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-24 16:59:10

我在这里看到了两个问题。一个是,就像瑞秋说的那样,你肯定是过分拟合你的数据了。80是一棵很深的树!这将给每个节点2^80可能的叶子,或1后面24个零!因为您只有100k+示例,所以您肯定会在每棵树上为其各自的训练数据引导提供完美的匹配。一旦你有足够的深度去做这件事,深度限制的进一步增加不会有任何作用,而且你已经超过了那个点。这是不可取的。

因为即使是深度2^17的平衡树也是130 k叶节点,所以您应该查看一些比17浅的深度。一旦有了合理的深度,max_features=1可能不再是最优的。您还应该为此测试一些不同的值。

您提到的另一个问题是,您在这两个防火墙上具有不同的性能。这有几个可能的原因:

  • 如果您在一个防火墙上进行培训,在另一个防火墙上进行测试,那么您希望该模型只能在类似数据集的部分上做得很好。最好是在同一个防火墙的(独立)数据中进行一次列车/测试分割,或者因为您使用的是随机林型,所以只需查看一下(存储在clf.oob_score_中)的外挂性能。
  • 如果您已经在这样做,那么您所使用的非最佳参数可能会对这两个数据集产生不同的影响。例如,如果防火墙1的所有数据都是类似的,过度拟合不会降低您所选择的测试数据的性能,而如果防火墙2有许多异常情况,过度拟合将大大降低性能。如果您在这个场景中,修复第一个问题将有助于解决第二个问题。

如果培训您的模型是快速的,您可能会发现GridSearchCV将帮助您选择参数(这就是它设计的目的)。它将自动测试不同组合的参数。请记住,如果您测试N个深度和M个max_features,就会得到N*M的可能性,所以最好先对这些数据进行稀疏的采样(首先是18、12、8的深度和2、5、8的max_features ),然后再用更接近第一次找到的最优集的值运行它。

票数 1
EN

Stack Overflow用户

发布于 2017-09-23 18:34:00

你的模型太适合训练了。您应该通过以下方法减少模型的差异/增加模型的偏差:

  1. 增加随机性:考虑每一次拆分的特性百分比较小
  2. 限制每棵树可以分割的数目。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46382802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档