【Python机器学习系列】交叉验证法计算机器学习模型评价指标的置信区间(案例+源码)

这是我的第236篇原创文章。

一、引言

        机器学习中的交叉验证是一种评估模型性能和泛化能力的常用技术。通过将数据集分成多个子集,在每个子集上轮流训练模型并在剩余的子集上进行验证,可以更准确地评估模型的性能。常见的交叉验证方法包括K折交叉验证和留一交叉验证。要计算机器学习分类模型AUC、准确率、特异度、灵敏度的95%的置信区间,可以使用交叉验证或 bootstrap 方法来估计这些指标的置信区间。了前文我介绍 bootstrap 方法来估计,本文通过使用交叉验证的方法实现计算。

二、实现过程

2.1 实现代码

import pandas as pd
from sklearn.model_selection import cross_val_score, KFold
from sklearn.linear_model import LogisticRegression
import numpy as np
from sklearn.metrics import roc_auc_score, accuracy_score, confusion_matrix

# 加载数据集
data = pd.read_csv(r'Dataset.csv')

# 假设数据集中的最后一列是目标变量,其余列是特征
X = data.iloc[:, :-1]
y = data.iloc[:, -1]

# 建立逻辑回归模型
model = LogisticRegression()

# 交叉验证计算指标
kf = KFold(n_splits=5, shuffle=True, random_state=0)
# auc_scores = cross_val_score(model, X, y, cv=kf, scoring='roc_auc')
# accuracy_scores = cross_val_score(model, X, y, cv=kf, scoring='accuracy')
# specificity_scores = cross_val_score(model, X_train, y_train, cv=5, scoring='specificity')
# sensitivity_scores = cross_val_score(model, X_train, y_train, cv=5, scoring='sensitivity')

# 计算特异度和灵敏度
specificity_scores = []
sensitivity_scores = []
accuracy_scores = []
auc_scores = []


for train_index, test_index in kf.split(y):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]

    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    y_pred_proba = model.predict_proba(X_test)[:, 1]
    tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
    specificity = tn / (tn + fp)
    sensitivity = tp / (tp + fn)

    specificity_scores.append(specificity)
    sensitivity_scores.append(sensitivity)

    auc_scores.append(roc_auc_score(y_test, y_pred_proba))
    accuracy_scores.append(accuracy_score(y_test, y_pred))


# 计算95%置信区间
def calculate_confidence_interval(scores):
    mean = np.mean(scores)
    std = np.std(scores)
    n = len(scores)
    z = 1.96  # 95% 置信水平的Z值
    lower_bound = mean - (z * std / np.sqrt(n))
    upper_bound = mean + (z * std / np.sqrt(n))
    return lower_bound, upper_bound

auc_ci = calculate_confidence_interval(auc_scores)
accuracy_ci = calculate_confidence_interval(accuracy_scores)
specificity_ci = calculate_confidence_interval(specificity_scores)
sensitivity_ci = calculate_confidence_interval(sensitivity_scores)

print("AUC 95% 置信区间:", auc_ci)
print("准确率 95% 置信区间:", accuracy_ci)
print("特异度 95% 置信区间:", specificity_ci)
print("灵敏度 95% 置信区间:", sensitivity_ci)

2.2 实现效果

图片

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时私信沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip 基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip 基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip 基于机器学习贝叶斯调优的车辆模型预测控制python源码+数据+模型.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据杂坛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值