这是一个有点菜鸟的问题。在
我想用sklearn
中的RandomForestClassifier
来训练Random Forest
。我有一些变量,但是从这些变量中,我希望算法在它训练的每一棵树中确定地选择一个变量(我们称之为SourceID
)。在
我该怎么做?我在分类器中看不到任何参数在这种情况下会有帮助。在
任何帮助都将不胜感激! 蒂娅。在
编辑
下面是我的场景。。在
如果老师在Concept A
上布置作业,我必须预测下一个可能的作业概念。下一个分配的概念将严重依赖于已经分配的Concept A
。例如,在指定“牛顿第一运动定律”之后,“牛顿第二运动定律”很有可能被指定。通常,在Concept A
之后分配的概念的选择是有限的。根据过去的数据,我想在分配Concept A
之后预测最佳可能的选项。在
如果我让random forest
随机挑选变量,那么会有一些树没有Concept A
的变量,在这种情况下,预测可能没有多大意义,这就是为什么我要强制选择这个变量。更好的是,如果这个变量被选为每个树中要拆分的第一个变量,那就更好了。在
这说明问题了吗?random forest
根本不是这份工作的候选人吗?在
我不相信scikit现在有办法了。您可以使用max_features=None这将删除所有特征选择的随机性。在
如果可以切换包,R的Ranger(https://cran.r-project.org/web/packages/ranger/ranger.pdf)有选项拆分.select.weights和always.split.variables这可能是您要找的。定义随机选择的概率,或总是在随机选择之外包括这些特征。在
这违背了随机森林的总体设计,降低了随机性,进而削弱了算法的方差约简。你应该知道很多关于你的数据和选择这个选项的问题。正如@Michal所暗示的,在这里小心行事。在
在
RandomForestClassifier
中没有这样的选项,但是随机森林算法只是一个决策树的集合,其中每个树只考虑所有可能特征的子集,并在训练数据的引导子样本上进行训练。在因此,对于那些被迫使用一组特定特性的树,我们自己手动创建这个并不困难。我在下面写了一个类来做这个。这不会执行健壮的输入验证或类似的操作,但是您可以参考sklearn的random forest
fit
函数的源代码。这是为了让您了解如何自己构建它:下面是一个测试脚本,以查看上面的类是否按预期工作:
^{pr2}$输出为:
没有一个断言失败,这表明我们选择修复的特性在每个随机特征子样本中使用,并且每个特征子样本的大小是所需的
max_features
大小。对保留数据的高精度表明分类器工作正常。在相关问题 更多 >
编程相关推荐