回归与多维目标

use*_*168 15 python scikit-learn

我正在使用scikit-learn做回归,我的问题如下.我需要对几个参数(向量)进行回归.这适用于一些回归方法,如ensemble.ExtraTreesRegressorensemble.RandomForestRegressor.实际上,可以给出矢量矢量作为目标以适合fit(X,y)两种前述回归方法的模型(方法).

然而,当我尝试ensemble.GradientBoostingRegressor,ensemble.AdaBoostRegressor并且linear_model.SGDRegressor,分类不适合模型,因为它预计,1维值作为目标(的参数y fit(X,y)方法).这意味着,使用那些回归方法,我一次只能估计一个参数.这不适合我的问题,因为我需要花一些时间来估计大约20个参数.另一方面,我真的想测试这些方法.

所以,我的问题是:有没有人知道是否有一个解决方案适合模型一次并估计几个参数ensemble.GradientBoostingRegressor,ensemble.AdaBoostRegressorlinear_model.SGDRegressor

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

emi*_*ara 22

我解释你所拥有的是多元多元回归的问题.

并非每个scikit-learn中的回归方法都可以处理这类问题,您应该查阅每个问题的文档以找出它.特别是,SGDRegressor,GradientBoostingRegressorAdaBoostRegressor目前都不支持这一点:fit(X, y)指定X:类似数组,shape = [n_samples,n_features]和y:array-like,shape = [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.]])
Run Code Online (Sandbox Code Playgroud)


小智 16

如前所述,只有一些模型支持多变量输出.如果要使用其他一个,可以使用新类来并行化多变量输出的回归量:MultiOutputRegressor.

你可以像这样使用它:

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)
Run Code Online (Sandbox Code Playgroud)