修复 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()
我需要修复 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()