scikit-learnを使用して回帰を行っていますが、問題は次のとおりです。いくつかのパラメーター(ベクトル)で回帰を行う必要があります。これは、_ensemble.ExtraTreesRegressor
_や_ensemble.RandomForestRegressor
_などのいくつかの回帰アプローチで正常に機能します。実際、2つの前述の回帰法のモデル(fit(X,y)
法)に適合するターゲットとしてベクトルのベクトルを与えることができます。
ただし、_ensemble.GradientBoostingRegressor
_、_ensemble.AdaBoostRegressor
_、および_linear_model.SGDRegressor
_を試してみると、1次元の値をターゲットとして想定しているため、分類子はモデルに適合しません(fit(X,y)
のy引数)。方法)。つまり、これらの回帰法では、一度に1つのパラメーターしか推定できません。これは私の問題には適していません。約20個のパラメーターを推定する必要があるときに時間がかかる場合があるためです。一方で、私は本当にそれらのアプローチをテストしたいと思います。
だから、私の質問は:モデルを一度適合させて_ensemble.GradientBoostingRegressor
_、_ensemble.AdaBoostRegressor
_および_linear_model.SGDRegressor
_のいくつかのパラメーターを推定する解決策があるかどうか誰かが知っていますか?
私は十分に明確になっていると思います...
私はあなたが持っているのは 多変量回帰 の問題であると解釈します。
Scikit-learnのすべての回帰メソッドがこの種の問題を処理できるわけではないため、それぞれのドキュメントを参照して見つける必要があります。特に、 SGDRegressor 、 GradientBoostingRegressor も AdaBoostRegressor も現時点ではこれをサポートしていません:fit(X, y)
はXを指定します:配列のような、 shape = [n_samples、n_features]およびy:配列のような、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.]])
すでに述べたように、一部のモデルのみが多変量出力をサポートしています。他のいずれかを使用する場合は、多変量出力のリグレッサの並列化に新しいクラスを使用できます: 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)