如何使用Keras神经网络分类器在KFold交叉验证中绘制每个折叠的ROC_AUC曲线

法里亚·扎林·苏巴1504027

我真的需要使用Keras ANN在5折交叉验证中找到每个折的ROC图。我已经尝试了以下链接中的代码[https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc_crossval.html#sphx-glr-auto-examples-model-selection-plot-roc-crossval-py] [1]当我使用svm分类器时,它工作得很好,如下所示。但是,当我想使用包装器使用Keras ANN模型时,它会显示错误。我已经坚持了几个月。有人可以帮我吗?这是我的代码:

# Load libraries
import numpy as np
from keras import models
from keras import layers
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import StratifiedKFold

X, y = load_breast_cancer(return_X_y=True)
# Create function returning a compiled network
def create_network():
    
    # Start neural network
    network = models.Sequential()

    # Add fully connected layer with a ReLU activation function
    network.add(layers.Dense(units=16, activation='relu', input_shape=(30,)))

    # Add fully connected layer with a ReLU activation function
    network.add(layers.Dense(units=16, activation='relu'))

    # Add fully connected layer with a sigmoid activation function
    network.add(layers.Dense(units=1, activation='sigmoid'))

    # Compile neural network
    network.compile(loss='binary_crossentropy', # Cross-entropy
                    optimizer='rmsprop', # Root Mean Square Propagation
                    metrics=['accuracy']) # Accuracy performance metric
    
    # Return compiled network
    return network

cv = StratifiedKFold(n_splits=5)
# Wrap Keras model so it can be used by scikit-learn
classifier = KerasClassifier(build_fn=create_network, 
                                 epochs=10, 
                                 batch_size=100, 
                                 verbose=2)
#Plotting the ROC curve
tprs = []
aucs = []
mean_fpr = np.linspace(0, 1, 100)

fig, ax = plt.subplots()
for i, (train, test) in enumerate(cv.split(X, y)):
    classifier.fit(X[train], y[train])
    viz = plot_roc_curve(classifier, X[test], y[test],
                         name='ROC fold {}'.format(i),
                         alpha=0.3, lw=1, ax=ax)
    interp_tpr = np.interp(mean_fpr, viz.fpr, viz.tpr)
    interp_tpr[0] = 0.0
    tprs.append(interp_tpr)
    aucs.append(viz.roc_auc)

ax.plot([0, 1], [0, 1], linestyle='--', lw=2, color='r',
        label='Chance', alpha=.8)

mean_tpr = np.mean(tprs, axis=0)
mean_tpr[-1] = 1.0
mean_auc = auc(mean_fpr, mean_tpr)
std_auc = np.std(aucs)
ax.plot(mean_fpr, mean_tpr, color='b',
        label=r'Mean ROC (AUC = %0.2f $\pm$ %0.2f)' % (mean_auc, std_auc),
        lw=2, alpha=.8)

std_tpr = np.std(tprs, axis=0)
tprs_upper = np.minimum(mean_tpr + std_tpr, 1)
tprs_lower = np.maximum(mean_tpr - std_tpr, 0)
ax.fill_between(mean_fpr, tprs_lower, tprs_upper, color='grey', alpha=.2,
                label=r'$\pm$ 1 std. dev.')

ax.set(xlim=[-0.05, 1.05], ylim=[-0.05, 1.05],
       title="Receiver operating characteristic example")
ax.legend(loc="lower right")
plt.show()

它显示以下错误:

Epoch 1/10
5/5 - 0s - loss: 24.0817 - accuracy: 0.3714
Epoch 2/10
5/5 - 0s - loss: 2.7967 - accuracy: 0.5648
Epoch 3/10
5/5 - 0s - loss: 2.0594 - accuracy: 0.5363
Epoch 4/10
5/5 - 0s - loss: 2.4763 - accuracy: 0.5604
Epoch 5/10
5/5 - 0s - loss: 2.5489 - accuracy: 0.5121
Epoch 6/10
5/5 - 0s - loss: 2.0528 - accuracy: 0.6132
Epoch 7/10
5/5 - 0s - loss: 1.5593 - accuracy: 0.6088
Epoch 8/10
5/5 - 0s - loss: 2.0422 - accuracy: 0.5626
Epoch 9/10
5/5 - 0s - loss: 1.9191 - accuracy: 0.6242
Epoch 10/10
5/5 - 0s - loss: 1.9914 - accuracy: 0.5582
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-104-2d127e528fbe> in <module>()
      8     viz = plot_roc_curve(classifier, X[test], y[test],
      9                          name='ROC fold {}'.format(i),
---> 10                          alpha=0.3, lw=1, ax=ax)
     11     interp_tpr = np.interp(mean_fpr, viz.fpr, viz.tpr)
     12     interp_tpr[0] = 0.0

/usr/local/lib/python3.6/dist-packages/sklearn/metrics/_plot/roc_curve.py in plot_roc_curve(estimator, X, y, sample_weight, drop_intermediate, response_method, name, ax, **kwargs)
    170     )
    171     if not is_classifier(estimator):
--> 172         raise ValueError(classification_error)
    173 
    174     prediction_method = _check_classifer_response_method(estimator,

ValueError: KerasClassifier should be a binary classifier
马图斯·杜布拉瓦(Matus Dubrava)

这是(可能)在包装器库中缺少的实现细节。

Sklearn只是简单地检查estimator上是否存在被称为的属性_estimator_type,并将其设置为字符串值classifier通过在github上查看sklearn的源代码可以看到这一点

def is_classifier(estimator):
    """Return True if the given estimator is (probably) a classifier.
    Parameters
    ----------
    estimator : object
        Estimator object to test.
    Returns
    -------
    out : bool
        True if estimator is a classifier and False otherwise.
    """
    return getattr(estimator, "_estimator_type", None) == "classifier"

您需要做的就是手动将此属性添加到分类器对象。

classifier = KerasClassifier(build_fn=create_network, 
                                 epochs=10, 
                                 batch_size=100, 
                                 verbose=2)

classifier._estimator_type = "classifier"

我已经对其进行了测试,并且可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Keras /神经网络分类数据

来自分类Dev

如何使用 AUC 绘制 ROC 曲线?

来自分类Dev

这是加速深度神经网络训练的 kFold 交叉验证的有效方法吗?

来自分类Dev

根据R中的交叉验证(训练)数据绘制ROC曲线

来自分类Dev

您是否需要神经网络(keras)才能使用分类器(sklearn)

来自分类Dev

如何在神经网络中使用k折交叉验证

来自分类Dev

使用Keras的神经网络

来自分类Dev

我们如何使用神经网络计算多分类器的准确性

来自分类Dev

预训练如何改善神经网络中的分类?

来自分类Dev

如何使用Keras训练和调整人工多层感知器神经网络?

来自分类Dev

Encog-使用交叉验证方法训练神经网络并验证训练

来自分类Dev

Encog-使用交叉验证方法训练神经网络并验证训练

来自分类Dev

如何保存和使用在 PyTorch/TensorFlow/Keras 中开发的训练好的神经网络?

来自分类Dev

如何使用 Keras 创建一个从表格数据中训练的神经网络?

来自分类Dev

具有交叉验证的神经网络模型的多个指标

来自分类Dev

在R中单个隐藏层的大小不同的情况下交叉验证多个神经网络

来自分类Dev

keras中使用神经网络的文本分类-模型较弱

来自分类Dev

如何使用r中的ROCR软件包绘制ROC曲线*仅带有分类列联表*

来自分类Dev

如何获得绘制遗传算法分类器的ROC曲线的分数?

来自分类Dev

TensorFlow / Sklearn深层神经网络分类器类型错误

来自分类Dev

使用卷积神经网络作为二进制分类器

来自分类Dev

Matlab:在神经网络中使用交叉熵

来自分类Dev

如何为图像分类问题选择卷积神经网络中密集层的单位数?

来自分类Dev

您如何确定卷积神经网络的图像分类参数?

来自分类Dev

如何用分类神经网络训练不良奖励?

来自分类Dev

使用神经网络从加速度计数据中对人类活动进行分类

来自分类Dev

神经网络序列分类中的高损失

来自分类Dev

如何使用matplotlib / python绘制ROC曲线

来自分类Dev

如何使用matplotlib / python绘制ROC曲线

Related 相关文章

  1. 1

    使用Keras /神经网络分类数据

  2. 2

    如何使用 AUC 绘制 ROC 曲线?

  3. 3

    这是加速深度神经网络训练的 kFold 交叉验证的有效方法吗?

  4. 4

    根据R中的交叉验证(训练)数据绘制ROC曲线

  5. 5

    您是否需要神经网络(keras)才能使用分类器(sklearn)

  6. 6

    如何在神经网络中使用k折交叉验证

  7. 7

    使用Keras的神经网络

  8. 8

    我们如何使用神经网络计算多分类器的准确性

  9. 9

    预训练如何改善神经网络中的分类?

  10. 10

    如何使用Keras训练和调整人工多层感知器神经网络?

  11. 11

    Encog-使用交叉验证方法训练神经网络并验证训练

  12. 12

    Encog-使用交叉验证方法训练神经网络并验证训练

  13. 13

    如何保存和使用在 PyTorch/TensorFlow/Keras 中开发的训练好的神经网络?

  14. 14

    如何使用 Keras 创建一个从表格数据中训练的神经网络?

  15. 15

    具有交叉验证的神经网络模型的多个指标

  16. 16

    在R中单个隐藏层的大小不同的情况下交叉验证多个神经网络

  17. 17

    keras中使用神经网络的文本分类-模型较弱

  18. 18

    如何使用r中的ROCR软件包绘制ROC曲线*仅带有分类列联表*

  19. 19

    如何获得绘制遗传算法分类器的ROC曲线的分数?

  20. 20

    TensorFlow / Sklearn深层神经网络分类器类型错误

  21. 21

    使用卷积神经网络作为二进制分类器

  22. 22

    Matlab:在神经网络中使用交叉熵

  23. 23

    如何为图像分类问题选择卷积神经网络中密集层的单位数?

  24. 24

    您如何确定卷积神经网络的图像分类参数?

  25. 25

    如何用分类神经网络训练不良奖励?

  26. 26

    使用神经网络从加速度计数据中对人类活动进行分类

  27. 27

    神经网络序列分类中的高损失

  28. 28

    如何使用matplotlib / python绘制ROC曲线

  29. 29

    如何使用matplotlib / python绘制ROC曲线

热门标签

归档