ROC曲线和PR曲线模板

import numpy as np  # 导入NumPy库,用于科学计算
from sklearn.metrics import roc_curve, auc, precision_recall_curve  # 从sklearn.metrics库导入roc_curve、auc和precision_recall_curve函数
import matplotlib.pyplot as plt  # 导入matplotlib库中的pyplot模块,用于绘图

roc_data = []  # 存储所有五倍交叉验证的ROC数据
pr_data = []  # 存储所有五倍交叉验证的PR数据

colors = plt.cm.rainbow(np.linspace(0, 1, 31))  # 生成31个不同的颜色,用于绘图

file_name = np.array(['DH_HGTS', 'DH_HGS', 'DH_HIS', 'DH_HKS', 'DH_HTS', 'DH_HD',  # 定义一个包含文件名的NumPy数组
                     'L_HGTS', 'L_HGS', 'L_HIS', 'L_HKS', 'L_HTS', 'L_HD',
                     'DTS_HGTS', 'DTS_HGS', 'DTS_HIS', 'DTS_HKS', 'DTS_HTS', 'DTS_HD',
                     'DISS_HGTS', 'DISS_HGS', 'DISS_HIS', 'DISS_HKS', 'DISS_HTS', 'DISS_HD',
                     'DIS_HGTS', 'DIS_HGS', 'DIS_HIS', 'DIS_HKS', 'DIS_HTS', 'DIS_HD',
                     'DP_HP'])

i = 0  # 初始化计数器i为0
for element in file_name:  # 遍历文件名数组中的每个元素
    i = i + 1  # 计数器加1
    all_predictions = []  # 存储当前五倍交叉验证的预测值
    all_labels = []  # 存储当前五倍交叉验证的标签值
    print(element)  # 打印当前文件名

    for j in range(1, 6):  # 遍历1到5之间的整数
        file_name = f"正样本和负样本{element}_{j}.txt"  # 根据文件名模板生成具体文件名
        print(file_name)  # 打印当前文件名

        data = np.loadtxt(file_name, dtype=float, delimiter=',')  # 从文件中加载数据到NumPy数组

        positive_predictions = data[:852, 0]  # 提取正样本的预测值
        positive_labels = data[:852, 1]  # 提取正样本的标签值

        negative_predictions = data[852:, 0]  # 提取负样本的预测值
        negative_labels = data[852:, 1]  # 提取负样本的标签值

        all_predictions.extend([positive_predictions, negative_predictions])  # 将正样本和负样本的预测值合并到总的数组中
        all_labels.extend([positive_labels, negative_labels])  # 将正样本和负样本的标签值合并到总的数组中

    all_predictions = np.concatenate(all_predictions)  # 将预测值数组转换为NumPy数组
    all_labels = np.concatenate(all_labels)  # 将标签值数组转换为NumPy数组

    fpr, tpr, thresholds_roc = roc_curve(all_labels, all_predictions)  # 计算ROC曲线的FPR和TPR
    roc_auc = auc(fpr, tpr)  # 计算ROC曲线的AUC值

    precision, recall, thresholds_pr = precision_recall_curve(all_labels, all_predictions)  # 计算PR曲线的precision和recall
    pr_auc = auc(recall, precision)  # 计算PR曲线的AUC值

    roc_data.append((fpr, tpr, roc_auc, colors[i - 1], element))  # 将当前五倍交叉验证的ROC数据存储到列表中,包括FPR、TPR、AUC、颜色和文件名
    pr_data.append((recall, precision, pr_auc, colors[i - 1], element))  # 将当前五倍交叉验证的PR数据存储到列表中,包括precision、recall、AUC、颜色和文件名

```python
plt.figure()  # 创建一个新的图形

for fpr, tpr, roc_auc, color, element in roc_data:  # 遍历ROC数据列表中的每个元素
    plt.plot(fpr, tpr, label=f'{element}_AUROC = {roc_auc:.4f}', color=color)  # 绘制ROC曲线,设置标签和颜色

plt.plot([0, 1], [0, 1], 'k--')  # 添加对角线

plt.xlabel('False Positive Rate')  # 设置x轴标签
plt.ylabel('True Positive Rate')  # 设置y轴标签
plt.title('Receiver Operating Characteristic')  # 设置图形标题
plt.legend(loc='lower right', prop={'size': 5})  # 添加图例,设置位置和字体大小

plt.savefig('roc31_curve.png', dpi=300)  # 保存ROC图形,设置分辨率

plt.figure()  # 创建一个新的图形

for recall, precision, pr_auc, color, element in pr_data:  # 遍历PR数据列表中的每个元素
    plt.plot(recall, precision, label=f'{element}_AUPR = {pr_auc:.4f}', color=color)  # 绘制PR曲线,设置标签和颜色

plt.xlabel('Recall')  # 设置x轴标签
plt.ylabel('Precision')  # 设置y轴标签
plt.title('Precision-Recall Curve')  # 设置图形标题
plt.legend(loc='lower right', prop={'size': 5})  # 添加图例,设置位置和字体大小

plt.savefig('pr31_curve.png', dpi=300)  # 保存PR图形,设置分辨率

你可能感兴趣的:(numpy,矩阵,线性代数,python,开发语言)