具有多维目标的回归



我正在使用 scikit-learn 进行回归,而我的问题是以下内容。我需要对几个参数(向量)进行回归。这可以通过一些回归方法(例如ensemble.ExtraTreesRegressorensemble.RandomForestRegressor)进行效果。实际上,可以给出向量向量作为拟合模型(fit(X,y)方法)的目标。

但是,当我尝试使用ensemble.GradientBoostingRegressorensemble.AdaBoostRegressorlinear_model.SGDRegressor时,分类器无法符合模型,因为它期望1维值作为目标(y的fit(X,y)方法的Y参数)。这意味着,使用这些回归方法,我一次只能估计一个参数。这不适合我的问题,因为可能需要一些时间,而我需要估算约20个参数。另一方面,我真的想测试这些方法。

所以,我的问题是:有人知道是否有一个解决方案可以适合该模型并估算ensemble.GradientBoostingRegressorensemble.AdaBoostRegressorlinear_model.SGDRegressor的几个参数?

我希望我已经足够清楚了...

我解释了您所拥有的是多个多元回归的问题。

Scikit-Learn中的每种回归方法都可以处理此类问题,您应该查阅每个文档以找到它。特别是,sgdregressor,渐变boostingRegressor和adaboostregressor目前都不支持这一点: fit(X, y)指定x:类似阵列,shape = [n_samples,n_features]和y:y-array like,shape = [n_samples = [n_samples]。

但是,您可以在Scikit-Learn中使用其他方法。例如,线性模型:

from sklearn import linear_model
# multivariate input
X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]]
# univariate output
Y = [0., 1., 2., 3.]
# multivariate output
Z = [[0., 1.], [1., 2.], [2., 3.], [3., 4.]]
# ordinary least squares
clf = linear_model.LinearRegression()
# univariate
clf.fit(X, Y)
clf.predict ([[1, 0.]])
# multivariate
clf.fit(X, Z)
clf.predict ([[1, 0.]])
# Ridge
clf = linear_model.BayesianRidge()
# univariate
clf.fit(X, Y)
clf.predict ([[1, 0.]])
# multivariate
clf.fit(X, Z)
clf.predict ([[1, 0.]])
# Lasso
clf = linear_model.Lasso()
# univariate
clf.fit(X, Y)
clf.predict ([[1, 0.]])
# multivariate
clf.fit(X, Z)
clf.predict ([[1, 0.]])

如前所述,只有一些模型支持多元输出。如果您想使用其他一个,则可以使用新类并并行多变量输出:Multiooutputregressor。

您可以这样使用:

from sklearn.datasets import load_linnerud
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.multioutput import MultiOutputRegressor
linnerud = load_linnerud()
X = linnerud.data
Y = linnerud.target
# to set number of jobs to the number of cores, use n_jobs=-1
MultiOutputRegressor(GradientBoostingRegressor(), n_jobs=-1).fit(X, Y)

相关内容

  • 没有找到相关文章

最新更新