【问题标题】:Using CalibratedClassifierCV returns error: TypeError: predict_proba() missing 1 required positional argument: 'x'使用 CalibratedClassifierCV 返回错误:TypeError: predict_proba() missing 1 required positional argument: 'x'
【发布时间】:2021-06-13 06:07:19
【问题描述】:

我正在尝试使用 Keras 的 Sequential 模型训练模型,然后使用 scikit-learn 的 CalibratedClassifierCV 对其进行校准。为此,我使用 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)

如您所见,我清楚地将 CalibratedClassifierCV 的实例调用为 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'

有人发现这里有什么错误吗?

【问题讨论】:

    标签: python tensorflow machine-learning keras scikit-learn


    【解决方案1】:

    这似乎是新版本 scikit-learn (0.24) 的问题。我安装了旧的 0.23 版本,它使用相同的确切代码运行良好。

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 2022-01-06
      • 2016-05-09
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多