用sklearn运行分类模型,选择AUC最高的模型保存模型权重并绘制AUCROC曲线(以逻辑回归、随机森林、梯度提升、MLP为例)

诸神缄默不语-个人CSDN博文目录

文章目录

  • [1. 导入包](#1. 导入包)
  • [2. 初始化分类模型](#2. 初始化分类模型)
  • [3. 训练、测试模型,绘图,保存指标](#3. 训练、测试模型,绘图,保存指标)

1. 导入包

python 复制代码
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import roc_auc_score,accuracy_score,roc_curve,auc
import joblib
import matplotlib.pyplot as plt

2. 初始化分类模型

python 复制代码
classifiers = {
    "Logistic Regression": LogisticRegression(),
    "Random Forest": RandomForestClassifier(),
    "GBDT": GradientBoostingClassifier(),
    "MLP": MLPClassifier(max_iter=1000)
}

3. 训练、测试模型,绘图,保存指标

在这里省略了数据处理部分,总之X/Y都是np.ndarray对象。f反正你创建一个可写的文件流就行,如果连这个都不会的话参考我写的这篇博文:Python3对象序列化,即处理JSON、XML和文件(持续更新ing...)。
f.close()没写,根据你的需要如果想加就加。

这个逻辑是每次得到AUC最高的模型就画图,其实感觉把模型权重储存下来然后再joblib.load()再画图会更合适......

如果想对每个模型画ROC曲线叠在一张图上的话,在最前面新建画布(plt.figure()),每个模型运行完后都运行一次plt.plot(),不close()就行。

python 复制代码
max_auc = 0
max_acc = 0
best_classifier = ""
# 训练模型
for lr_name, lr in classifiers.items():
    lr.fit(X_train, y_train)

    # 预测
    y_pred = lr.predict(X_test)
    y_pred_proba = lr.predict_proba(X_test)[:, 1]

    # 评估
    auc_score = roc_auc_score(y_test, y_pred_proba)
    acc = accuracy_score(y_test, y_pred)

    if auc_score > max_auc:
        max_auc = auc_score
        max_acc = acc
        best_classifier = lr_name
        joblib.dump(lr, f"model.pkl")

        fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
        roc_auc = auc(fpr, tpr)
        plt.figure()
        plt.plot(
            fpr,
            tpr,
            color="darkorange",
            lw=2,
            label=f"ROC curve (AUC = {roc_auc:.2f})",
        )
        plt.plot(
            [0, 1], [0, 1], color="navy", lw=2, linestyle="--"
        )  # 随机猜测基线
        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")
        plt.legend(loc="lower right")
        plt.grid()
        plt.savefig("roc.png")
        plt.close()

    f.write(
        f"{lr_name} AUC: {auc_score:.4f}, ACC: {acc:.4f}"
        + "\n"
    )
    f.flush()

f.write(
    f"best_classifier: {best_classifier} AUC: {max_auc:.4f}, ACC: {max_acc:.4f}"
    + "\n"
)
f.flush()
相关推荐
yunhuibin16 小时前
AI分类任务种类
人工智能·自然语言处理·分类
电科_银尘2 天前
【深度学习项目实战·15】小样本图像分类:迁移学习识别蚂蚁与蜜蜂
深度学习·分类·迁移学习
敢敢のwings3 天前
机器人如何通过触觉认识物体:从材质分类到接触状态判断
分类·机器人·材质
aifannihao3 天前
AI 学习第 5 课:手推逻辑回归与交叉熵,L2 把可分数据的权重按住
人工智能·机器学习·逻辑回归·numpy·学习路线
ATMQuant3 天前
量化指标解码21:逻辑回归支撑阻力 - 让逻辑回归给关键价位打分
python·机器学习·逻辑回归·量化交易·技术指标
Blockbuater_drug3 天前
《经典机器学习实战》第 4 课:逻辑回归:预测类别(南瓜)
分类·逻辑回归·混淆矩阵·roc曲线·auc·召回率·精确率
AI源码4 天前
基于深度学习的日常服饰分类与推荐系统设计
人工智能·深度学习·分类
电科_银尘5 天前
【深度学习项目实战·13】服装图像分类:在相同条件下比较MLP与CNN
深度学习·分类·cnn
ManageEngineITSM7 天前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
听风吹等浪起7 天前
第30章:MobileNetV3全家桶实现MRI脑肿瘤四分类(含Streamlit网页推理+Mermaid结构图)
人工智能·分类·数据挖掘