You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TransformedTargetRegressor中引用参数?结合GridSearchCV用Sklearn新特性

如何在TransformedTargetRegressor内部引用参数?

嘿,刚好熟悉这个Sklearn的新特性!sklearn.compose.TransformedTargetRegressor的核心是包装了一个回归器和一个目标转换器,要访问它内部的参数,得遵循Sklearn统一的嵌套参数命名规则——用双下划线__来逐层穿透嵌套对象的层级。

核心命名规则

  • 访问内部回归器的参数:以regressor__作为前缀,后面接回归器自身的参数名(如果回归器是Pipeline,还要继续用__深入Pipeline的步骤参数)
  • 访问目标转换器的参数:以transformer__作为前缀,后面接转换器的参数名

基础示例:包装单一回归器

假设你用TransformedTargetRegressor直接包装了决策树回归器和标准化转换器,参数引用方式如下:

from sklearn.compose import TransformedTargetRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV

# 初始化TransformedTargetRegressor
ttr = TransformedTargetRegressor(
    regressor=DecisionTreeRegressor(random_state=42),
    transformer=StandardScaler()
)

# 构建网格搜索参数网格
param_grid = {
    # 访问内部决策树的max_depth参数
    'regressor__max_depth': [5, 15, 45, 135],
    # 固定决策树的random_state
    'regressor__random_state': [42],
    # 访问目标转换器的with_mean参数
    'transformer__with_mean': [True, False]
}

# 结合GridSearchCV调优
grid_search = GridSearchCV(ttr, param_grid, cv=5)
grid_search.fit(X, y)

进阶示例:结合Pipeline作为内部回归器

如果你的回归逻辑是包含预处理、特征编码的完整Pipeline(就像你给出的片段那样),只需在参数名前多套一层regressor__前缀,再按Pipeline的步骤逐层深入:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import FunctionTransformer

# 定义你的预处理+回归Pipeline
my_pipeline = Pipeline([
    ('preprocessing', FunctionTransformer(my_preprocessing_function)),
    ('feature_encoder', YourFeatureEncoder()), # 替换为你实际的特征编码器
    ('DecisionTreeRegr', DecisionTreeRegressor(random_state=42))
])

# 用TransformedTargetRegressor包装这个Pipeline
ttr = TransformedTargetRegressor(
    regressor=my_pipeline,
    transformer=StandardScaler() # 可选的目标转换器
)

# 对应的参数网格写法
param_grid = {
    # 访问Pipeline中feature_encoder的handle_unknown参数
    'regressor__feature_encoder__handle_unknown': ['ignore'],
    # 访问Pipeline中DecisionTreeRegr的max_depth参数
    'regressor__DecisionTreeRegr__max_depth': [5, 15, 45, 135],
    # 固定决策树的random_state
    'regressor__DecisionTreeRegr__random_state': [42],
    # 访问预处理步骤的validate参数
    'regressor__preprocessing__validate': [False]
}

# 执行网格搜索
grid_search = GridSearchCV(ttr, param_grid, cv=5)
grid_search.fit(X, y)

关键提醒

这个双下划线的命名规则是Sklearn通用的,不管是嵌套Pipeline、还是TransformedTargetRegressor这类包装器,都可以用外层对象名__内层对象名__参数名的方式逐层访问内部参数。只要理清了对象的嵌套结构,参数命名就不会出错~

内容的提问来源于stack exchange,提问作者user267817

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:17:44