3

これは非常に小さな 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 (すべてのスケーラー) は、予測を行う前に適用する必要があるようですが、以前に適合したトレーニング データに依存するべきではありません。

または、パイプラインで前処理スケーラーを正しく使用するにはどうすればよいですか?

ありがとう。

4

2 に答える 2