使用 scikit-learn 进行多目标回归

Posted

技术标签:

【中文标题】使用 scikit-learn 进行多目标回归【英文标题】:Multi-target regression using scikit-learn 【发布时间】:2020-01-02 09:38:34 【问题描述】:

我正在使用 python 语言和 scikit-learn 库解决经典的回归问题。很简单:

        ml_model = GradientBoostingRegressor()
        ml_params = 
        ml_model.fit(X_train, y_train)

y_train 是一维数组类对象

现在我想扩展任务的功能,获得的不是单个目标值,而是一组目标值。训练样本集X_train 将保持不变。 该问题的一个直观解决方案是训练多个模型,其中所有模型的 X_train 将相同,但每个模型的 y_train 将是特定的。这绝对是一个有效的解决方案,但在我看来,这是一种低效的解决方案。

在寻找替代方案时,我遇到了多目标回归等概念。据我了解,此类功能未在 scikit-learn 中实现。 如何以有效的方式解决python中的多目标回归问题?谢谢)

【问题讨论】:

【参考方案1】:

这取决于您解决的问题、您拥有的训练数据以及您选择的用于找到解决方案的算法。在不了解所有细节的情况下很难提出任何建议。您可以尝试以random forest 作为起点。这是一个非常强大且健壮的算法,在您没有太多数据的情况下可以抵抗过度拟合,并且它也可以用于多目标回归。这是一个工作示例:

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor


X, y = make_regression(n_targets=2)
print('Feature vector:', X.shape)
print('Target vector:', y.shape)

X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8)

print('Build and fit a regressor model...')

model = RandomForestRegressor()
model.fit(X_train, y_train)
score = model.score(X_test, y_test)

print('Done. Score', score)

输出:

Feature vector: (100, 100)
Target vector: (100, 2)
Build and fit a regressor model...
Done. Score 0.4405974071273537

该算法原生支持多目标回归。对于那些没有的,您可以使用multi-output regressor,它只适合每个目标一个回归器。

【讨论】:

【参考方案2】:

随机森林方法的另一种替代方法是使用支持向量回归的改编版本,它适合多目标回归问题。使用MultiOutputRegressor 拟合 SVR 的优势在于,该方法考虑了多个目标之间的潜在相关性,因此应该表现更好。 可以找到带有论文参考的工作实现here

【讨论】:

以上是关于使用 scikit-learn 进行多目标回归的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中的多输出高斯过程回归

多维目标回归

目标的缩放导致 Scikit-learn SVM 回归崩溃

用于振荡数据的数据驱动回归的 SciKit-learn

如何使用 scikit-learn 进行高斯/多项式回归?

使用 tensorflow 代替 scikit-learn 进行回归有啥优势? [关闭]