请帮我写出基于keras搭建的CNN实现二分类并且输出准确率、精确率、召回率、F1值和AUC
时间: 2024-01-27 20:03:07 浏览: 108
利用人工智能预测心脏病死亡率 python machine learning deep learning.zip
当然可以帮您编写基于Keras的CNN模型实现二分类,并输出准确率、精确率、召回率、F1值和AUC。以下是一个示例代码:
```python
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
# 读取数据集并划分训练集和测试集
data = pd.read_csv('your_dataset.csv') # 替换为您的数据集文件路径
X = data.drop('label', axis=1).values # 特征数据
y = data['label'].values # 标签数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据预处理(根据需要自行添加)
# ...
# 将特征数据reshape成适合CNN输入的形状
input_shape = (28, 28, 1) # 假设输入图像大小为28x28,通道数为1(灰度图像)
X_train = X_train.reshape(-1, *input_shape)
X_test = X_test.reshape(-1, *input_shape)
# 构建CNN模型
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid')) # 二分类输出层,使用sigmoid激活函数
# 编译模型
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, batch_size=128, epochs=10, verbose=1)
# 在测试集上进行预测
y_pred = model.predict(X_test)
y_pred = np.round(y_pred).flatten() # 将连续的预测结果转换为分类标签
# 输出评估指标
accuracy = model.evaluate(X_test, y_test, verbose=0)[1]
precision, recall, f1_score, _ = classification_report(y_test, y_pred, zero_division=0).split()[-4:]
auc = roc_auc_score(y_test, y_pred)
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1_score)
print("AUC:", auc)
```
请注意,上述代码中的数据集路径、数据预处理等部分需要根据您的实际情况进行修改和补充。另外,您也可以根据需求调整模型的结构和参数设置。希望对您有帮助!
阅读全文