我正在研究一个随机森林分类器模型,将数据分类为4类。数据集是来自两个不同的防火墙应用程序的连接日志,带有100K+示例和10个属性。训练集样本数据集的准确度为0.90~0.97。
使用测试数据,我从一个防火墙获得了0.7-0.97的日志,另一个防火墙得到了~0.5 (总是)。我应该考虑调整射频,还是我的模型完全有问题?“文本field1”是要预测的。
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]`
我是这方面的初学者,任何帮助都是非常感谢的。谢谢!
发布于 2017-09-24 16:59:10
我在这里看到了两个问题。一个是,就像瑞秋说的那样,你肯定是过分拟合你的数据了。80是一棵很深的树!这将给每个节点2^80可能的叶子,或1后面24个零!因为您只有100k+示例,所以您肯定会在每棵树上为其各自的训练数据引导提供完美的匹配。一旦你有足够的深度去做这件事,深度限制的进一步增加不会有任何作用,而且你已经超过了那个点。这是不可取的。
因为即使是深度2^17的平衡树也是130 k叶节点,所以您应该查看一些比17浅的深度。一旦有了合理的深度,max_features=1可能不再是最优的。您还应该为此测试一些不同的值。
您提到的另一个问题是,您在这两个防火墙上具有不同的性能。这有几个可能的原因:
clf.oob_score_中)的外挂性能。如果培训您的模型是快速的,您可能会发现GridSearchCV将帮助您选择参数(这就是它设计的目的)。它将自动测试不同组合的参数。请记住,如果您测试N个深度和M个max_features,就会得到N*M的可能性,所以最好先对这些数据进行稀疏的采样(首先是18、12、8的深度和2、5、8的max_features ),然后再用更接近第一次找到的最优集的值运行它。
发布于 2017-09-23 18:34:00
你的模型太适合训练了。您应该通过以下方法减少模型的差异/增加模型的偏差:
https://stackoverflow.com/questions/46382802
复制相似问题