改变随机森林中每棵树的权重

3

我目前正在使用scikit-learn实现随机森林。

是否有可能改变生成的随机森林中每个估算器的权重?


2
你好,NWgs,欢迎来到StackOverflow!为了帮助SO社区的其他人回答你的问题,最好提供一个最小可重现示例。这样,其他人就可以指出你代码中的问题。另外,参见此问题以了解如何提出更好的问题。祝好 :) - Christian
你好NWgs,你想这样做的原因是什么?根据你的问题,从统计学社区寻求帮助可能更好:https://stats.stackexchange.com - Nathan
1个回答

0
你是在询问如何单独更改每个估计器的权重,还是在进行predict()时如何更改投票系统中每棵树的答案权重?
当你有一个已拟合的随机森林时,参数estimators_返回一个决策树数组,所有树都可以单独编辑,例如:
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=2)

df = pd.DataFrame([[1, True], [2, False]])

model.fit(df[0].to_numpy().reshape(-1,1), df[1])

print(model.estimators_)

输出:

[DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',
                    max_depth=None, max_features='auto', max_leaf_nodes=None,
                    min_impurity_decrease=0.0, min_impurity_split=None,
                    min_samples_leaf=1, min_samples_split=2,
                    min_weight_fraction_leaf=0.0, presort='deprecated',
                    random_state=1942352063, splitter='best'),
 DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',
                        max_depth=None, max_features='auto', max_leaf_nodes=None,
                        min_impurity_decrease=0.0, min_impurity_split=None,
                        min_samples_leaf=1, min_samples_split=2,
                        min_weight_fraction_leaf=0.0, presort='deprecated',
                        random_state=1414900336, splitter='best')]

因此,您可以使用model.estimators_[0]来选择第一个。

然后,如果您阅读决策树文档,您可以更改feature_importances_

如果您的问题是如何更改随机森林投票系统,那么我建议您查看代码,但是让我告诉您,修改此功能不是一个好决定。

正如您在这里所看到的,随机森林对于每个输出都采用最大概率(所有树中的概率),因此您可以单独使用每个决策树的预测概率来进行操作。


谢谢您详细的回复。是的,我目前正在测试随机森林生成的权重,以查看它是否优于内置生成器的权重。那么,我会按照您的建议进入代码。 - NWgs
我正在寻找一个与Python/Scikit Learn相关或类似于MATLAB中的函数:TreeBagger。您可以在此类上自定义树的创建。BaggingClassifier是否类似于此? - NWgs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接