これは非常に小さな sklearn スニペットです。
logistic = linear_model.LogisticRegression()
pipe = Pipeline(steps=[
('scaler_2', MinMaxScaler()),
('pca', decomposition.NMF(6)),
('logistic', logistic),
])
from sklearn.cross_validation import train_test_split
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.2)
pipe.fit(Xtrain, ytrain)
ypred = pipe.predict(Xtest)
次のエラーが表示されます。
raise ValueError("Negative values in data passed to %s" % whom)
ValueError: Negative values in data passed to NMF (input X)
この質問によると: MinMaxScaler を使用してテスト データを 0 と 1 にスケーリングする
私はこれが原因であることを知っています
これは、私のテスト データの最低値が訓練データよりも低く、その中で最小最大スケーラーが適合したためです。
しかし、私は疑問に思っています、これはバグですか?MinMaxScaler (すべてのスケーラー) は、予測を行う前に適用する必要があるようですが、以前に適合したトレーニング データに依存するべきではありません。
または、パイプラインで前処理スケーラーを正しく使用するにはどうすればよいですか?
ありがとう。