Scikit-Learn多输出回归能否为各输出配置不同基估计器?
多输出回归自定义各输出估计器的解决方案
Scikit-Learn原生支持情况
Scikit-Learn官方(包括未公开特性)没有提供直接支持为每个输出变量指定不同基估计器的多输出回归工具,原生的MultiOutputRegressor仅支持为所有输出复用同一个估计器实例。
实现方案
自定义兼容Scikit-Learn API的回归器
最直接的方式是自行编写一个符合Scikit-Learn接口规范的自定义多输出回归器,核心逻辑为每个输出列匹配对应的估计器,训练时逐个拟合,预测时合并结果。示例代码如下:
from sklearn.base import BaseEstimator, RegressorMixin import numpy as np class CustomMultiOutputRegressor(BaseEstimator, RegressorMixin): def __init__(self, estimators): self.estimators = estimators def fit(self, X, y): # 校验输出列数与估计器数量匹配 if y.shape[1] != len(self.estimators): raise ValueError("输出变量的列数必须与估计器列表长度一致") self.fitted_estimators_ = [] for idx, estimator in enumerate(self.estimators): # 为每个输出列单独训练对应的估计器 estimator.fit(X, y[:, idx]) self.fitted_estimators_.append(estimator) return self def predict(self, X): # 收集每个估计器的预测结果并合并 predictions = [] for estimator in self.fitted_estimators_: pred = estimator.predict(X) predictions.append(pred.reshape(-1, 1)) return np.hstack(predictions)
使用方式完全符合期望的语法:
import xgboost from sklearn.kernel_ridge import KernelRidge # 初始化自定义多输出回归器,每个估计器对应一个输出变量 model = CustomMultiOutputRegressor( estimators = [ xgboost.XGBRegressor(objective="reg:tweedie"), KernelRidge(), KernelRidge() ] ) # 训练与预测 model.fit(train_x, train_y) test_predictions = model.predict(test_x)
Python生态中的替代库
目前Python机器学习生态中,没有专门针对该需求的成熟第三方库,因此自行实现自定义回归器是最可靠的方案。
内容的提问来源于stack exchange,提问作者AmphotericLewisAcid
相关产品推荐
相关产品推荐

