给我一个二分类cnn网络的代码,并绘制其roc曲线和混淆矩阵
时间: 2024-11-22 18:38:45 浏览: 27
在Python中,我们可以使用深度学习库如Keras构建一个简单的卷积神经网络(CNN)用于二分类任务。这里是一个基本的例子,它包含了训练模型、评估并生成ROC曲线和混淆矩阵的过程:
```python
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from sklearn.metrics import roc_curve, confusion_matrix, classification_report
import matplotlib.pyplot as plt
# 假设我们有数据集X_train, y_train, X_test, y_test (图片数据和标签)
# 数据预处理步骤省略...
# 创建一个简单的CNN模型
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(img_width, img_height, 3)),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dense(64, activation='relu'),
Dropout(0.5),
Dense(1, activation='sigmoid') # 二分类任务用sigmoid作为激活函数
])
# 编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 训练模型
history = model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
# 预测
y_pred = model.predict(X_test)
# 将预测概率转换为类别标签
y_pred_classes = np.round(y_pred)
# 计算混淆矩阵
conf_mat = confusion_matrix(y_test, y_pred_classes)
# ROC曲线
fpr, tpr, _ = roc_curve(y_test, y_pred)
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc_score(y_test, y_pred))
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC)')
plt.legend(loc="lower right")
plt.show()
# 混淆矩阵可视化
plt.imshow(conf_mat, cmap='Blues', interpolation='nearest')
plt.colorbar()
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()
```
在这个例子中,你需要替换`img_width`, `img_height`, `X_train`, `y_train`, `X_test`, `y_test`为实际的数据。训练完成后,你可以看到模型的性能以及ROC曲线和混淆矩阵。
阅读全文