修复 scikit-learn 估算器中的参数

Fix a parameter in a scikit-learn estimator

我需要修复 scikit-learn 估算器的参数值。我仍然需要能够更改估算器的所有其他参数,并在 scikit-learn 工具(例如 Pipelines 和 GridSearchCV)中使用估算器。

我试图定义一个新的 class 继承自 scikit-learn 估计器。例如,我在这里尝试创建一个新的 class 来修复 RandomForestClassifier 的 n_estimators=5

class FiveTreesClassifier(RandomForestClassifier):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.n_estimators = 5


fivetrees = FiveTreesClassifier()
randomforest = RandomForestClassifier(n_estimators=5)

# This passes.
assert fivetrees.n_estimators == randomforest.n_estimators
# This fails: the params of fivetrees is an empty dict.
assert fivetrees.get_params() == randomforest.get_params()

get_params() 不可靠的事实意味着我无法在 Pipelines 和 GridSearchCV 中使用新的估算器(如 here 所述)。

我正在使用 scikit-learn 0.24.2,但我认为它实际上与新版本相同。

我更喜欢让我在固定超参数值的同时定义新 class 的答案。我也会接受使用其他技术的答案。我也很感谢为什么我应该/不应该这样做的详尽解释!

您可以使用functools.partial

NewEstimator = partial(RandomForestClassifier, n_estimators=5)
new_estimator = NewEstimator()