使用CalibledClassifierCV返回错误:TypeError:predict_proba()缺少1个必需的位置参数:“x”

2024-10-05 17:36:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Keras的顺序模型训练模型,然后使用scikit learn的CalibredClassifiedRCV进行校准。为此,我使用KerasClassifier包装器。以下是我使用的代码:

reduce_lr = keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1,
                                  patience=5, min_lr=0.000001)

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=10)

def create_model():

    model_1 = Sequential()

    n_cols = X_train_1.shape[1]

    model_1.add(Dense(10, activation="selu", kernel_initializer="lecun_normal",input_shape=(n_cols,)))
    model_1.add(Dense(10, activation="selu", kernel_initializer="lecun_normal"))
    model_1.add(Dense(10, activation="selu", kernel_initializer="lecun_normal"))
    model_1.add(Dense(10, activation="selu", kernel_initializer="lecun_normal"))
    model_1.add(Dense(1, activation='sigmoid'))

    opt = keras.optimizers.Nadam(lr=0.0001)

    loss = tf.keras.losses.BinaryCrossentropy(reduction='sum')

    model_1.compile(optimizer=opt, loss=loss)
    
    return model_1

X_train_1, X_test_1, y_train_1, y_test_1, w_train_1, w_test_1 = train_test_split(scaled_X_1, y_1, w_1, test_size=0.35, random_state=42)

model_1 = KerasClassifier(build_fn=create_model, epochs=5, batch_size=5000, verbose=1)

history_1 = model_1.fit(X_train_1, y_train_1, callbacks=[reduce_lr, es], epochs=5, validation_split=0.35, batch_size=5000, sample_weight=w_train_1, verbose=1)

plt.plot(history_1.history['loss'])
plt.plot(history_1.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()
    

calibrator_1 = CalibratedClassifierCV(model_1, cv='prefit')
    
calibrator_1.fit(X_test_1, y_test_1, sample_weight = w_test_1)

如您所见,我清楚地将CalibredClassifierCV的实例调用为calibrator_1,然后使用fit()。尽管如此,我还是得到了这个错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-1cab7be4f6d6> in <module>
     46 calibrator_1 = CalibratedClassifierCV(model_1, cv='prefit')
     47 
---> 48 calibrator_1.fit(X_test_1, y_test_1, sample_weight = w_test_1)

~/.local/lib/python3.6/site-packages/sklearn/calibration.py in fit(self, X, y, sample_weight)
    263             pred_method = _get_prediction_method(base_estimator)
    264             n_classes = len(self.classes_)
--> 265             predictions = _compute_predictions(pred_method, X, n_classes)
    266 
    267             calibrated_classifier = _fit_calibrator(

~/.local/lib/python3.6/site-packages/sklearn/calibration.py in _compute_predictions(pred_method, X, n_classes)
    499         (X.shape[0], 1).
    500     """
--> 501     predictions = pred_method(X=X)
    502     if hasattr(pred_method, '__name__'):
    503         method_name = pred_method.__name__

TypeError: predict_proba() missing 1 required positional argument: 'x'

有人在这里发现错误吗


Tags: testaddmodeltrainpltactivationhistorymethod