【Python机器学习系列】自助法计算机器学习评价指标的置信区间(案例+源码)

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

一、引言

Bootstrap方法是非常有用的一种统计学上的估计方法,是一类非参数Monte Carlo方法,其实质是对观测信息进行再抽样,进而对总体的分布特性进行统计推断。

自助法计算分类模型的AUC、准确率、特异度和灵敏度的95%置信区间,你可以按照以下步骤进行:

  1. 加载数据集并进行必要的数据预处理。

  2. 划分数据集为训练集和测试集。

  3. 使用模型进行训练。

  4. 在测试集上进行预测并计算AUC、准确率、特异度和灵敏度。

  5. 使用自助法(bootstrap)方法计算这些指标的95%置信区间。

本文以逻辑回归分类模型为例解读采用自助法计算机器学习评价指标的置信区间的实现过程。

二、实现过程

2.1 代码

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

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

# 假设数据集中X是特征,y是标签
X = data.drop('target', axis=1)
y = data['target']

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)[:, 1]

# 计算AUC
auc = roc_auc_score(y_test, y_pred_proba)

# 计算准确率、特异度和灵敏度
accuracy = accuracy_score(y_test, y_pred)
tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
specificity = tn / (tn + fp)
sensitivity = tp / (tp + fn)

# 自助法计算95%置信区间
n_bootstraps = 1000
auc_bootstrap = []
accuracy_bootstrap = []
specificity_bootstrap = []
sensitivity_bootstrap = []

for _ in range(n_bootstraps):
    indices = np.random.choice(len(y_test), len(y_test), replace=True)
    y_test_bootstrap = y_test.iloc[indices]
    y_pred_proba_bootstrap = y_pred_proba[indices]
    y_pred_bootstrap = (y_pred_proba_bootstrap > 0.5).astype(int)

    auc_bootstrap.append(roc_auc_score(y_test_bootstrap, y_pred_proba_bootstrap))
    accuracy_bootstrap.append(accuracy_score(y_test_bootstrap, y_pred_bootstrap))
    tn, fp, fn, tp = confusion_matrix(y_test_bootstrap, y_pred_bootstrap).ravel()
    specificity_bootstrap.append(tn / (tn + fp))
    sensitivity_bootstrap.append(tp / (tp + fn))

# 计算95%置信区间
confidence_level = 0.95
alpha = 1 - confidence_level
lower_percentile = alpha / 2 * 100
upper_percentile = (1 - alpha / 2) * 100

auc_ci = np.percentile(auc_bootstrap, [lower_percentile, upper_percentile])
accuracy_ci = np.percentile(accuracy_bootstrap, [lower_percentile, upper_percentile])
specificity_ci = np.percentile(specificity_bootstrap, [lower_percentile, upper_percentile])
sensitivity_ci = np.percentile(sensitivity_bootstrap, [lower_percentile, upper_percentile])

print("AUC 95% Confidence Interval:", auc_ci)
print("Accuracy 95% Confidence Interval:", accuracy_ci)
print("Specificity 95% Confidence Interval:", specificity_ci)
print("Sensitivity 95% Confidence Interval:", sensitivity_ci)

2.2 结果

图片

作者简介:

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

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数据杂坛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值