5x2cv配对t检验(5x2cv paired t test)

5x2cv配对t检验程序,用于比较两个模型的性能

from mlxtend.evaluate import paired_ttest_5x2cv

概述

5x2cv配对t检验(5x2cv paired t test)是一种比较两个模型(分类器或回归器)性能的程序,Dieterich[1]提出了这两个模型,以解决其他方法的缺点,如 重抽样配对t检验(参见配对t检验: paired_ttest_resampled)和 k倍交叉验证配对t检验(参见配对t检验: paired_ttest_kfold_cv)。

为了解释这种方法是如何工作的,让我们考虑估计量(例如,分类器)A和B。此外,我们有一个标记数据集D。在公共保持方法中,我们通常将数据集分成2个部分:训练和测试集。在5x2cv配对t检验(5x2cv paired t test)中,我们重复切分(50%训练和50%测试数据)5次。

在5个迭代中的每一个迭代中,我们将A和B拟合到训练分割中,并在测试分割中评估它们的性能( pAp_ApA​ 和 pBp_BpB​)。然后,我们旋转训练集和测试集(训练集成为测试集,反之亦然)再次计算性能,这导致两个性能差异度量:
p(1)=pA(1)−pB(1)p^{(1)} = p^{(1)}_A - p^{(1)}_B p(1)=pA(1)​−pB(1)​

p(2)=pA(2)−pB(2).p^{(2)} = p^{(2)}_A - p^{(2)}_B. p(2)=pA(2)​−pB(2)​.
然后,我们估计差异的估计均值和方差:
p‾=p(1)+p(2)2\overline{p} = \frac{p^{(1)} + p^{(2)}}{2} p​=2p(1)+p(2)​

s2=(p(1)−p‾)2+(p(2)−p‾)2.s^2 = (p^{(1)} - \overline{p})^2 + (p^{(2)} - \overline{p})^2. s2=(p(1)−p​)2+(p(2)−p​)2.
计算5次迭代的差异方差,然后用于计算 t统计量(t statistic),如下所示:
t=p1(1)(1/5)∑i=15si2,t = \frac{p_1^{(1)}}{\sqrt{(1/5) \sum_{i=1}^{5}s_i^2}}, t=(1/5)∑i=15​si2​​p1(1)​​,
其中 p1(1)p_1^{(1)}p1(1)​ 是第一次迭代的 p1p_1p1​。t 统计量(t statistic) 为在 模型A 和 模型B 具有相同性能的零假设下,假设它近似遵循5个自由度的t分布(t distribution)。使用t统计量,可以计算 ppp 值,并与之前选择的显著性水平进行比较,例如,α=0.05α=0.05α=0.05。如果 ppp 值小于 ααα,我们拒绝零假设,并接受两个模型存在显著差异。

References

  • [1] Dietterich TG (1998) Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithms. Neural Comput 10:1895–1923.

例1-5x2cv配对t检验(5x2cv paired t test)

假设我们想要比较两种分类算法,逻辑回归和决策树算法:

from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from mlxtend.data import iris_data
from sklearn.model_selection import train_test_splitX, y = iris_data()
clf1 = LogisticRegression(random_state=1)
clf2 = DecisionTreeClassifier(random_state=1)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=123)score1 = clf1.fit(X_train, y_train).score(X_test, y_test)
score2 = clf2.fit(X_train, y_train).score(X_test, y_test)print('Logistic regression accuracy: %.2f%%' % (score1*100))
print('Decision tree accuracy: %.2f%%' % (score2*100))
Logistic regression accuracy: 97.37%
Decision tree accuracy: 94.74%

请注意,由于在重采样过程中产生了新的测试/训练分离,这些精度值不用于配对t测试程序,上述值仅用于直觉。

现在,我们假设显著性阈值 α=0.05α=0.05α=0.05,以拒绝两种算法在数据集上表现相同的无效假设,并进行5x2cv t检验(5x2cv t test):

from mlxtend.evaluate import paired_ttest_5x2cvt, p = paired_ttest_5x2cv(estimator1=clf1,estimator2=clf2,X=X, y=y,random_seed=1)print('t statistic: %.3f' % t)
print('p value: %.3f' % p)
t statistic: -1.539
p value: 0.184

由于 p>αp > \alphap>α,我们不能拒绝零假设,并且可以得出结论,两种算法的性能没有显著差异。

虽然通常不建议在不纠正多个假设测试的情况下多次应用统计测试,但让我们来看一个示例,其中决策树算法仅限于生成一个非常简单的决策边界,这将导致相对较差的性能:

clf2 = DecisionTreeClassifier(random_state=1, max_depth=1)score2 = clf2.fit(X_train, y_train).score(X_test, y_test)
print('Decision tree accuracy: %.2f%%' % (score2*100))t, p = paired_ttest_5x2cv(estimator1=clf1,estimator2=clf2,X=X, y=y,random_seed=1)print('t statistic: %.3f' % t)
print('p value: %.3f' % p)
Decision tree accuracy: 63.16%
t statistic: 5.386
p value: 0.003

假设我们在显著性水平 α=0.05α=0.05α=0.05 的情况下进行了该测试,我们可以拒绝两个模型在该数据集上表现相同的无效假设,因为 ppp 值(p<0.001p<0.001p<0.001)小于 ααα。

API

paired_ttest_5x2cv(estimator1, estimator2, X, y, scoring=None, random_seed=None)

实施Dieterrich(1998)提出的5x2cv配对t检验,以比较两个模型的性能。

Parameters

  • estimator1 : scikit-learn classifier or regressor

  • estimator2 : scikit-learn classifier or regressor

  • X : {array-like, sparse matrix}, shape = [n_samples, n_features]

    Training vectors, where n_samples is the number of samples and n_features is the number of features.

  • y : array-like, shape = [n_samples]

    Target values.

  • scoring : str, callable, or None (default: None)

    If None (default), uses ‘accuracy’ for sklearn classifiers and ‘r2’ for sklearn regressors. If str, uses a sklearn scoring metric string identifier, for example {accuracy, f1, precision, recall, roc_auc} for classifiers, {‘mean_absolute_error’, ‘mean_squared_error’/‘neg_mean_squared_error’, ‘median_absolute_error’, ‘r2’} for regressors. If a callable object or function is provided, it has to be conform with sklearn’s signature scorer(estimator, X, y); see http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html for more information.

    如果没有(默认),则对sklearn分类器使用“准确性”,对sklearn回归器使用“r2”。如果str使用sklearn评分度量字符串标识符,例如{accurity,f1,precision,recall,roc_auc}作为分类器,{‘mean_absolute_error’,‘mean_squared_error’/‘neg_mean_squared_error’,‘median_absolute_error’,‘r2’}作为回归器。如果提供了一个可调用的对象或函数,它必须符合sklearn的签名“scorer(estimator,X,y)”;看见http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html了解更多信息。

  • random_seed : int or None (default: None)

    Random seed for creating the test/train splits.

    用于创建测试/训练切分的随机种子。

Returns

  • t : float

    The t-statistic

  • pvalue : float

    Two-tailed p-value. If the chosen significance level is larger than the p-value, we reject the null hypothesis and accept that there are significant differences in the two compared models.

    双尾p值。如果选择的显著性水平大于 ppp 值,我们拒绝零假设,并接受两个比较模型存在显著差异。

Examples

For usage examples, please see http://rasbt.github.io/mlxtend/user_guide/evaluate/paired_ttest_5x2cv/

reference

@online{Raschka2021Sep,
author = {Raschka, S.},
title = {{5x2cv paired t test - mlxtend}},
year = {2021},
month = {9},
date = {2021-09-03},
urldate = {2022-03-10},
language = {english},
hyphenation = {english},
note = {[Online; accessed 10. Mar. 2022]},
url = {http://rasbt.github.io/mlxtend/user_guide/evaluate/paired_ttest_5x2cv},
abstract = {{A library consisting of useful tools and extensions for the day-to-day data science tasks.}}
}

5x2cv配对t检验(5x2cv paired t test)相关推荐

  1. python构建配对t检验(Paired Student’s t-test)

    python构建配对t检验(Paired Student's t-test) 配对样本t检验是单样本t检验的特例.配对t检验有多种情况:配对的两个受试对象分别接受两种不同的处理:同一受试对象接受两种不 ...

  2. R语言使用t.test函数进行t检验、使用配对的t检验(paired)检验组间不独立数据的差异是否有统计学意义

    R语言使用t.test函数进行t检验.使用配对的t检验(paired)检验组间不独立数据的差异是否有统计学意义 目录 R语言使用t.test函数进行t检验.使用配对的t检验(paired)检验组间不独 ...

  3. R配对样本t检验(PAIRED T-TEST​​​​​​​)

    R配对样本t检验(PAIRED T-TEST) 目录 R配对样本t检验(PAIRED T-TEST) 假设检验 假设检验的应用 配对样本t检验

  4. R语言 配对t检验,对子变量到底填在哪?t.test paired=TRUE???

    使用本地数据 鸢尾花(yuān wěi huā)做配对t检验 t.test示例 提取两个物种的处理介绍看之前提到的空因子处理 #加载数据和包 data(iris) library(tidyverse) ...

  5. 配对t检验的应用条件是什么_配对t检验的适用条件,独立样本T检验、配对T检...

    提起配对t检验的适用条件,大家都知道,有人问配对样本T检验的假设前提是什么,另外,还有人想问t检验的应用条件是什么,你知道这是怎么回事?其实两独立样本T检验的适用范围是什么,下面就一起来看看独立样本T ...

  6. 配对t检验中指标分析

    一.配对t检验 配对t 检验,用于配对定量数据之间的差异对比关系.例如在两种背景情况下(有广告和无广告);样本的购买意愿是否有着明显的差异性;配对t 检验通常用于实验研究中.此案例研究判断体育疗法对降 ...

  7. python配对t检验_用python进行配对样本差异分析

    应用场景非常简单,成对的数据需要检验组间是否存在差异 分成两步: 1.检验正态性 from scipy import stats ##检验是否正态 def norm_test(data): t,p = ...

  8. python配对t检验_置信度计算——t检验(配对样本t检验,AB实验置信度),T

    为什么计算置信度? 在推荐场景下,我们会研发一些策略,来提升业务指标,在做AB实验的时候,实验组跟base组的指标对标,并非稳定的胜利或者稳定的失败,观察7天或者14天的指标数据,会有正有负,那么怎么 ...

  9. (论文加源码)基于DEAP和MABHOB数据集的二分类脑电情绪识别(pytorch深度神经网络(DNN)和卷积神经网络(CNN))

    该论文发表于2021年的顶级期刊.(pytorch框架) 代码解析部分在个人主页: https://blog.csdn.net/qq_45874683/article/details/13000797 ...

最新文章

  1. Chapter 7 Windows下pycaffe的使用之draw_net.py
  2. ibus无法出现选择框如何解决
  3. 如何搭建SVN的服务器
  4. Oracle 数据定义语言,oracle 数据定义语言(DDL)语法
  5. dubbo kryo序列化_为什么如此高效?解密kryo各个数据类型的序列化编码机制,强...
  6. Python3.4下使用sqlalchemy
  7. log4net配置mysql_使用独立的log4net.config文件配置log4net,将日志记录到Mysql数据库【原创】...
  8. 2022年五一数学建模竞赛C题
  9. 自动脚本 android,原神自动脚本全功能版
  10. 简单两个矩阵如何用计算机运算,矩阵运算-如何用卡西欧fx-82es计算器计算矩阵和 – 手机爱问...
  11. kube-proxy 部署
  12. 商标不仅仅是个标记,更是企业的无形资产和价值财富!
  13. pandas系列学习(七):数据透视表
  14. codeblock的c语言编译,CodeBlocks无法编译的原因和解决办法
  15. Python计算机二级大题
  16. 想要定制个性化语音?来试试这几个配音软件
  17. 时钟周期是干什么的?底层原理是什么?
  18. 新监管新纪元 大浪淘沙始见金——“9·4”政策回顾·行业前瞻
  19. oppo怎么打开科学计算机,OPPOr11的计算器怎么打开
  20. 计算机资源管理器不显示桌面图标,我的电脑开机不显示桌面图标  并且任务管理器也打不开怎么办啊  急急急!!!...

热门文章

  1. 理解path.join() 和 path.resolve()
  2. oobar, foo, bar, baz和qux搅屎棍的含义
  3. 未能打开这台计算机上的组策略对象,您可能没有合适的权限
  4. wps的计算机在哪里设置密码,wps_WPS Office如何设置密码?_office设置密码
  5. mysql判断当前日期是否为节假日_java 判断日期是否是节假日
  6. python语言判断中国节假日(pip install chinesecalendar)
  7. 短线王的盯盘宝怎么样_股票盯盘系统app怎么样
  8. Python中MNE库的事件相关特定频段分析(MEG数据)
  9. [WDS]Disconnected!
  10. [低级错误]an attribute defined in * line * hides this method pylint (method-hidden)