我正在使用 scikit-learn 进行回归,我的问题如下。我需要对几个参数(向量)进行回归。这适用于某些回归方法,例如ensemble.ExtraTreesRegressor
和ensemble.RandomForestRegressor
。实际上,人们可以给出一个向量矢量作为目标,以适应上述两种回归方法的模型(fit(X,y)
方法)。
但是,当我尝试使用ensemble.GradientBoostingRegressor
,ensemble.AdaBoostRegressor
和linear_model.SGDRegressor
时,分类器无法适应模型,因为它希望将1维值作为目标({{1的y参数) }} 方法)。这意味着,使用那些回归方法,我一次只能估计一个参数。这不适合我的问题,因为我需要花一些时间来估计大约20个参数。另一方面,我真的想测试这些方法。
所以,我的问题是:有没有人知道是否有适合模型的解决方案并估算fit(X,y)
,ensemble.GradientBoostingRegressor
和ensemble.AdaBoostRegressor
的几个参数?
我希望我已经足够清楚......
答案 0 :(得分:22)
我认为你所拥有的是multiple multivariate regression的问题。
并非每个scikit-learn中的回归方法都可以处理这类问题,您应该查阅每个问题的文档以找出它。特别是,目前SGDRegressor,GradientBoostingRegressor和AdaBoostRegressor都不支持这一点:fit(X, y)
指定X:类似数组,shape = [n_samples,n_features]和y:数组-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.]])
答案 1 :(得分:13)
如前所述,只有部分型号支持多变量输出。如果要使用其他一个,可以使用新类来并行化多变量输出的回归量: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)