我正在研究一个随机森林分类器模型,将数据分为4类。数据集是来自两个不同防火墙应用程序的连接日志,具有100K +样本和10个属性。来自训练集的样本数据集的准确度为0.90-0.97。
根据测试数据,我从1个防火墙获得的日志为0.7-0.97,而另一个防火墙的日志为0.5(总是)。我应该考虑调整RF还是我的模型完全出错? “Text 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]
`
我是初学者,感谢任何帮助。谢谢!
答案 0 :(得分:1)
我在这里看到两个问题。一个是,像雷切尔说的那样,你肯定过度拟合你的数据了。 80是真正的深树!这将为每个节点提供2 ^ 80个可能的叶子,或者1个后跟24个零!由于您只有100k +样本,因此您肯定会在每棵树上与其各自的训练数据引导程序完美匹配。一旦你有足够的深度来做到这一点,深度限制的进一步增加没有做任何事情,你显然超过了这一点。这是不可取的。
由于即使深度为2 ^ 17的(平衡)树也是130k叶节点,你应该看一些浅于17的深度。一旦你有一个合理的深度,max_features=1
可能不再是最优的。您还应该测试一些不同的值。
您提出的另一个问题是您在两个防火墙上有不同的性能。这有几个可能的原因:
clf.oob_score_
)。如果您的模型训练很快,您可能会发现GridSearchCV
将有助于您的参数选择(这就是它的设计目的)。它将自动测试不同的参数组合。请记住,如果您在N个深度和M max_features
上进行测试,您将获得N * M种可能性,因此最好先对它们进行稀疏采样(可能是深度为18,12,8和max_features
的2, 5,8开始),然后你可以再次运行它,其值更接近你第一次找到的最佳设置。
答案 1 :(得分:0)
您的模型过度适应训练集。您应该通过以下方式减少方差/增加模型的偏差: