繁体   English   中英

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

[英]Multi-target regression using scikit-learn

我正在使用 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中的多目标回归问题? 谢谢)

这取决于您要解决的问题,培训的数据以及选择的算法来找到解决方案。 不知道所有细节真的很难提出任何建议。 您可以尝试使用随机森林作为起点。 这是一个非常强大且强大的算法,在您没有太多数据的情况下可以抵抗过度拟合,并且还可以用于多目标回归。 这是一个工作示例:

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

该算法本身支持多目标回归。 对于那些没有的,您可以使用多输出回归器 ,该输出器仅适合每个目标一个回归器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM