14

sklearn.pipeline で X (機能セット) を変換する変換メソッドを実装する複数の推定器を連鎖できることを理解しています。ただし、ターゲット ラベルも変換したいユース ケースがあります (ラベルを [0, K-1] ではなく [1...K] に変換するなど)。これをパイプラインのコンポーネントとして行いたいと考えています。 . sklearn.pipeline を使用することはまったく可能ですか?

4

3 に答える 3

20

いいえ、パイプラインは常にy変更されずに通過します。パイプラインの外で変換を行います。

(これは scikit-learn の既知の設計上の欠陥ですが、API を変更または拡張するほど差し迫ったことはありません。)

于 2013-09-03T22:33:42.940 に答える
19

scikit-learn に組み込まれている、これを行うためのより良い方法があります。を使用してcompose.TransformedTargetRegressor

これらのオブジェクトを構築するとき、それらにregressorとを与えますtransformer.fit()彼らは、回帰する前にターゲットを.predict()変換し、予測されたターゲットを変換して元の空間に戻します。

それらにオブジェクトを渡すことができることに注意することが重要pipelineであるため、それらは既存のセットアップと適切にインターフェースする必要があります。たとえば、リッジ回帰をトレーニングして、2 つの特徴が与えられた場合に 1 つのターゲットを予測する次の設定を取り上げます。

# Imports
import numpy as np
from sklearn import compose, linear_model, metrics, pipeline, preprocessing

# Generate some training and test features and targets
X_train = np.random.rand(200).reshape(100,2)
y_train = 1.2*X_train[:, 0]+3.4*X_train[:, 1]+5.6
X_test = np.random.rand(20).reshape(10,2)
y_test = 1.2*X_test[:, 0]+3.4*X_test[:, 1]+5.6

# Define my model and scalers
ridge = linear_model.Ridge(alpha=1e-2)
scaler = preprocessing.StandardScaler()
minmax = preprocessing.MinMaxScaler(feature_range=(-1,1))

# Construct a pipeline using these methods
pipe = pipeline.make_pipeline(scaler, ridge)

# Construct a TransformedTargetRegressor using this pipeline
# ** So far the set-up has been standard **
regr = compose.TransformedTargetRegressor(regressor=pipe, transformer=minmax)

# Fit and train the regr like you would a pipeline
regr.fit(X_train, y_train)
y_pred = regr.predict(X_test)
print("MAE: {}".format(metrics.mean_absolute_error(y_test, y_pred)))

これは、私が望むほどスムーズではありません。たとえば、TransformedTargetRegressorusingに含まれるリグレッサーにアクセスできます.regressor_が、そこに格納されている係数は変換されていません。これは、データを生成した方程式に戻りたい場合に、ジャンプする余分なフープがいくつかあることを意味します。

于 2019-11-08T13:55:56.300 に答える