精华内容
下载资源
问答
  • 对模型验证最主要的方法是
    千次阅读
    2019-11-05 11:50:38

    Holdout检验

    Holdout检验是最简单也是最直接的验证方法,它将原始的样本随机划分成训练机和验证集两部分,通常情况下我们把样本按照70%-30%的比例分成两部分,70%用于模型的训练,30%用于模型的验证,包括绘制ROC曲线,计算精确率和召回率等指标来评估模型性能。

    同时Holdout的缺点也很明显,即在验证集上计算出来的最后评估指标与原始的分组有很大关系,为了消除这种验证的随机性“交叉验证”出现了。

    交叉验证

    交叉验证是很常用的一种检验方法,常见的种类有k-fold交叉验证(K折交叉验证)和留一验证。

    • K-fold交叉验证

    首先将全部的样本划分成K个大小相等的子集;依次遍历这K个样本,每次将遍历到的样本当作验证集,其余的样本作为训练集来进行模型的训练和评估,最后把他们的平均值作为最终的评估指标,通常情况下我们会将K的取值定为10。

    • 留一验证

    每次留下一个样本作为验证集,其余所有样本作为测试集,样本的总数为n依次对n个样本进行遍历,进行n次验证,再将评估指标求得平均值得到最终的评估指标。

    自助法

    对于样本数量比较小的数据集,上述的方法(即便是留一法)会让训练集的数目减少,从而导致训练后的模型出现很大的误差影响了模型的结果。自助法能够比较好的解决这个问题。

    自助法是基于自助采样法的一个检验方法,对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集,在我们进行n次采样的过程中,有些样本会被重复采样,有些样本还没有被抽取过,我们将没有抽取的样本作为测试集进行模型的验证,这就是自助法的主要思想。

    更多相关内容
  • 它是一种重采样过程,用于评估机器学习模型并访问该模型对独立测试数据集的性能。 在本文中,您可以阅读以下大约8种不同的交叉验证技术,各有其优缺点: Leave p out cross-validation Leave one out cross-...

    目录

    1 Holdout检验 

    2 交叉检验

    2.1 Leave p-out cross-validation

    2.2 Leave-one-out cross-validation

    2.3 Holdout cross-validation

    2.4 k-fold cross-validation

    2.5 Repeated random subsampling validation

    2.6 Stratified k-fold cross-validation

    2.7 Time Series cross-validation

    2.8 Nested cross-validation

    3 自助法​​​​​​​


    1 Holdout检验 

            Holdout 检验是最简单也是最直接的验证方法,它将原始的样本集合随机划分训练集和验证集两部分。比方说,对于一个点击率预测模型,我们把样本按照70%~30% 的比例分成两部分,70% 的样本用于模型训练;30% 的样本用于模型验证,包括绘制ROC曲线、计算精确率和召回率等指标来评估模型性能。 

            Holdout 检验的缺点很明显,即在验证集上计算出来的最后评估指标与原始分组有很大关系。为了消除随机性,研究者们引入了“交叉检验”的思想。 

    2 交叉检验

    交叉验证(也称为“过采样”技术)是数据科学项目的基本要素。 它是一种重采样过程,用于评估机器学习模型并访问该模型对独立测试数据集的性能。

    在本文中,您可以阅读以下大约8种不同的交叉验证技术,各有其优缺点:

    1. Leave p out cross-validation
    2. Leave one out cross-validation
    3. Holdout cross-validation
    4. Repeated random subsampling validation
    5. k-fold cross-validation
    6. Stratified k-fold cross-validation
    7. Time Series cross-validation
    8. Nested cross-validation

    在介绍交叉验证技术之前,让我们知道为什么在数据科学项目中应使用交叉验证。

    为什么交叉验证很重要?

            我们经常将数据集随机分为训练数据测试数据,以开发机器学习模型。 训练数据用于训练ML模型,同一模型在独立的测试数据上进行测试以评估模型的性能。

            随着分裂随机状态的变化,模型的准确性也会发生变化,因此我们无法为模型获得固定的准确性。 测试数据应与训练数据无关,以免发生数据泄漏。 在使用训练数据开发ML模型的过程中,需要评估模型的性能。 这就是交叉验证数据的重要性。

           数据需要分为:

    • 训练数据:用于模型开发
    • 验证数据:用于验证相同模型的性能

            简单来说,交叉验证使我们可以更好地利用我们的数据。

    2.1 Leave p-out cross-validation

            LpOCV是一种详尽的交叉验证技术,涉及使用p个观测作为验证数据,而其余数据则用于训练模型。 以所有方式重复此步骤,以在p个观察值的验证集和一个训练集上切割原始样本。

            推荐使用p = 2LpOCV变体(称为休假配对交叉验证)作为估计二进制分类器ROC曲线下面积的几乎无偏的方法。

            事实上, 留一验证是留p验证的特例。留p验证是每次留下p个样本作为验证集,而从n个元 

    素中选择p个元素有 种可能,因此它的时间开销更是远远高于留一验证,故而很少在实际工程中被应用。  

    2.2 Leave-one-out cross-validation

            留一法交叉验证(LOOCV)是一种详尽的穷尽验证技术。 在p = 1的情况下,它是LpOCV的类别。

             

            对于具有n行的数据集,选择第1行进行验证,其余(n-1)行用于训练模型。对于下一个迭代,选择第2行进行验证,然后重置来训练模型。类似地,这个过程重复进行,直到n步或达到所需的操作次数。

            以上两种交叉验证技术都是详尽交叉验证的类型。穷尽性交叉验证方法是交叉验证方法,以所有可能的方式学习和测试。他们有相同的优点和缺点讨论如下:

    优点: 简单,易于理解和实施

    缺点: 该模型可能会导致较低的偏差、所需的计算时间长

    2.3 Holdout cross-validation

            保留技术是一种详尽的交叉验证方法,该方法根据数据分析将数据集随机分为训练数据测试数据

                 

            在保留交叉验证的情况下,数据集被随机分为训练验证数据。 通常,训练数据的分割不仅仅是测试数据。 训练数据用于推导模型,而验证数据用于评估模型的性能。

            用于训练模型的数据越多,模型越好。 对于保留交叉验证方法,需要从训练中隔离大量数据。

            下图阐述了 holdout cross-validation 的工作流程,其中我们重复地使用 validation set 来评估参数调整时(已经历训练的过程)模型的性能。一旦我们对参数值满意,我们就将在测试集(新的数据集)上评估模型的泛化误差。

             

    优点:和以前一样,简单,易于理解和实施

    缺点: 不适合不平衡数据集、许多数据与训练模型隔离;性能的评估对training set 和 validation set分割的比例较为敏感

    2.4 k-fold cross-validation

           在k折交叉验证中,原始数据集被平均分为k个子部分或折叠。 从k折或组中,对于每次迭代,选择一组作为验证数据,其余(k-1)个组选择为训练数据。

            

           该过程重复k次,直到将每个组视为验证并保留为训练数据为止。

            

            模型的最终精度是通过获取k模型验证数据的平均精度来计算的。

              

           LOOCV是k折交叉验证的变体,其中k = n。

    优点:

    • 该模型偏差低
    • 时间复杂度低
    • 整个数据集可用于训练和验证

    缺点:不适合不平衡数据集。

    2.5 Repeated random subsampling validation

            重复的随机子采样验证(也称为蒙特卡洛交叉验证)将数据集随机分为训练验证。 数据集的k倍交叉验证不太可能分成几类,而不是成组或成对,而是在这种情况下随机地成组。

            迭代次数不是固定的,而是由分析决定的。 然后将结果平均化。

              

                  

    优点: 训练和验证拆分的比例不取决于迭代或分区的数量

    缺点: 某些样本可能无法选择用于训练或验证、不适合不平衡数据集

    2.6 Stratified k-fold cross-validation

            对于上面讨论的所有交叉验证技术,它们可能不适用于不平衡的数据集分层k折交叉验证解决了数据集不平衡的问题。

            在分层k倍交叉验证中,数据集被划分为k个组或折叠,以使验证数据具有相等数量的目标类标签实例。 这样可以确保在验证或训练数据中不会出现一个特定的类,尤其是在数据集不平衡时。

               

             分层k折交叉验证,每折具有相等的目标类实例。

             最终分数是通过取各折分数的平均值来计算的。

    优点: 对于不平衡的数据集,效果很好。

    缺点: 现在适合时间序列数据集。

    2.7 Time Series cross-validation

            数据的顺序对于与时间序列相关的问题非常重要。 对于与时间相关的数据集,将数据随机拆分或k折拆分为训练和验证可能不会产生良好的结果。

            对于时间序列数据集,根据时间将数据分为训练验证,也称为前向链接方法滚动交叉验证。 对于特定的迭代,可以将训练数据的下一个实例视为验证数据。

                

          如上图所述,对于第一个迭代,第一个3行被视为训练数据,下一个实例T4是验证数据。 选择训练和验证数据的机会将被进一步迭代。

    2.8 Nested cross-validation

            在进行k折分层k折交叉验证的情况下,我们对训练和测试数据中的错误估计差。 超参数调整是在较早的方法中单独完成的。 当交叉验证同时用于调整超参数泛化误差估计时,需要嵌套交叉验证

            嵌套交叉验证可同时应用于k折和分层k折变体。

    结论:

            交叉验证用于比较和评估ML模型的性能。 在本文中,我们介绍了8种交叉验证技术及其优缺点。 k折和分层k折交叉验证是最常用的技术。 时间序列交叉验证最适合与时间序列相关的问题。

            这些交叉验证的实现可以在sklearn包中找到。 有兴趣的读者可以阅读sklearn文档以获取更多详细信息。3.1. Cross-validation: evaluating estimator performance — scikit-learn 1.0.2 documentation

    3 自助法

            不管是Holdout检验还是交叉检验,都是基于划分训练集和测试集的方法进行模型评估的。然而,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。有没有能维持训练集样本规模的验证方法呢?自助法可以比较好地解决这个问题。 

            自助法是基于自助采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽出过,将这些没有被抽出的样本作为验证集,进行模型验证,这就是自助法的验证过程。 

            问题 在自助法的采样过程中,对n个样本进行n次自助抽样,当n趋于无穷大时, 最终有多少数据从未被选择过?

    答:

            

            因此,当样本数很大时,大约有36.8%的样本从未被选择过,可作为验证集。

    展开全文
  • k fold交叉验证:将数据集随机划分成k个大小相同的子集,依次偏离这k个子集,每次把当前子集作为验证集,其余作为训练集,最后将k次指标进行平均作为最终结果 留1验证:每次留下一个样本作为验证集,其余用于训练,...
    1. hold out 检验

      • 将原始的样本集合按比例划分成训练集和验证集,例如7:3, 8:2等,
      • 缺点:验证集上的评估指标与数据划分有很大的关系,因此为了消除随机性,常采用下面的交叉检验
    2. 交叉检验

      • k fold交叉验证:将数据集随机划分成k个大小相同的子集,依次偏离这k个子集,每次把当前子集作为验证集,其余作为训练集,最后将k次指标进行平均作为最终结果
      • 留1验证:每次留下一个样本作为验证集,其余用于训练,遍历n次,将n次评估结果的均值作为最终评估指标。当样本总数太大的话,需要遍历次数很多,时间开销大。
    3. 自助法

      • 上面两种方法都是基于划分训练集和测试集进行模型训练和评估的。但是当样本集较小时,将样本集进行划分会进一步导致训练集进一步减小,影响模型的效果,
      • 自助法是基于自主采样的方法。对于总数为n的样本集,进行n次有放回的随机采样,从而得到大小为n的训练集。n次采样过程中有的样本会重复进行采样,有的样本未被采样,将这些未被采样过的样本作为测试集用于模型验证。

    🤔 自助法中,对n个样本进行n次采样,当n趋于无穷大时,最终有多少数据未被选择过?

    一个样本在一次抽样中被采样到的概率为 1 n \frac{1}{n} n1,未被采样到的概率为 1 − 1 n 1-\frac{1}{n} 1n1,n次抽样均未被抽到的概率为 ( 1 − 1 n ) n (1-\frac{1}{n})^n (1n1)n,当n趋于无穷大时,概率为 lim ⁡ n → ∞ ( 1 − 1 n ) n \lim\limits_{n\rightarrow\infty} (1-\frac{1}{n})^n nlim(1n1)n

    我们知道 lim ⁡ n → ∞ ( 1 + 1 n ) n = e \lim\limits_{n\rightarrow\infty} (1+\frac{1}{n})^n = e nlim(1+n1)n=e

    lim ⁡ n → ∞ ( 1 − 1 n ) n = lim ⁡ n → ∞ 1 ( 1 + 1 n − 1 ) n = lim ⁡ n → ∞ 1 ( 1 + 1 n − 1 ) n − 1 ⋅ lim ⁡ n → ∞ 1 ( 1 + 1 n − 1 ) = 1 e \lim\limits_{n\rightarrow\infty} (1-\frac{1}{n})^n = \lim\limits_{n\rightarrow\infty} \frac{1}{(1+\frac{1}{n-1})^n} = \lim\limits_{n\rightarrow\infty} \frac{1}{(1+\frac{1}{n-1})^{n-1}} · \lim\limits_{n\rightarrow\infty} \frac{1}{(1+\frac{1}{n-1})} = \frac{1}{e} nlim(1n1)n=nlim(1+n11)n1=nlim(1+n11)n11nlim(1+n11)1=e1

    当n很大时,大约有1/e的样本未被采样过,也就是36.8%的样本可以作为验证集。

    欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

    算法工程师面试那些事儿

    展开全文
  • 使用适当的验证技术可以帮助您理解您的模型,但重要的是,评估一个无偏的泛化性能。

    Validating your Machine Learning Model

    前言

    • 使用适当的验证技术可以帮助您理解您的模型,且评估无偏的泛化性能。
    • 不存在适用于所有项目的通用验证方法,因此,了解数据类型很重要。
    • 除了常见的k-Fold cross-validation,本文还会涉及到Nested CV, LOOCV,以及一些模型选择的技术。

    包括如下几种:

    • Train/test split
    • k-Fold Cross-Validation
    • Leave-one-out Cross-Validation
    • Leave-one-group-out Cross-Validation
    • Nested Cross-Validation
    • Time-series Cross-Validation
    • Wilcoxon signed-rank test
    • McNemar’s test
    • 5x2CV paired t-test
    • 5x2CV combined F test

    1.合理划分数据集

    所有验证技术的基础是在训练模型时分割数据。

    Train/test split

    最基础的方式就是the train/test split,这非常简单,70%的训练集和30%的测试集。

    import numpy as np # linear algebra
    import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
    from sklearn.model_selection import train_test_split
    
    X, y = np.arange(10).reshape((5, 2)), range(5)
    
    X_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)
    

    该方法的优点是:我们可以看到模型如何对以前不可见的数据做出反应。
    然而,如果我们数据的一个子集只有一定年龄或收入水平的人,会怎么样?
    这通常称为采样偏差(sampling bias):

    Sampling bias is systematic error due to a non-random sample of a population, causing some members of the population to be less likely to be included than others, resulting in a biased sample.

    Holdout set

    优化模型的超参数时,如果要使用训练/测试拆分进行优化,则可能会发生过拟合。
    解决该问题可以通过创建其他保留集(Holdout set)。 HS是处理/验证步骤中都未使用过的数据的10%。
    在这里插入图片描述
    在训练/测试集上优化模型后,可以通过验证保留集来检查是否过拟合。
    **Tip:**如果仅使用训练/测试组,则建议比较训练和测试集的分布。 如果它们相差很大,那么您可能会遇到泛化问题。 可以使用facets比较其分布。

    2. 使用k-Fold Cross-Validation (k-Fold CV)

    为了最小化抽样偏差,我们可以考虑稍微不同的方法对模型进行验证。
    如果我们不是进行一次拆分,而是进行多次拆分,并验证所有这些拆分的组合会怎么样呢?

    这就是k折交叉验证的用处。它将数据拆分为k折,然后在k-1折上训练数据,并在遗漏的1折上进行测试。 它将对所有组合执行此操作,并平均每个实例的结果。
    5-Fold Cross-Validation
    优点: 所有observations都用于训练和验证,每个observations都用于一次验证。通常选择i = 5或k = 10,因为他们在计算复杂度和验证精度之间找到了很好的平衡。

    import numpy as np # linear algebra
    import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
    from sklearn.model_selection import KFold
    
    X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
    y = np.array([1, 2, 3, 4])
    
    kf = KFold(n_splits=4)
    
    for train_index,test_index in kf.split(X):
        X_train,X_test = X[train_index],X[test_index]
        y_train,y_test = y[train_index],y[test_index]
    print("X_train:")
    print(X_train)
    print("X_test:")
    print(X_test)
    
    X_train:
    [[1 2]
     [3 4]
     [1 2]]
    X_test:
    [[3 4]]
    

    cross_val_score交叉验证及其用于参数选择、模型选择、特征选择

    3. Leave-one-out Cross-Validation (LOOCV) 留一交叉验证

    理论:LOOCV - Leave-One-Out-Cross-Validation 留一交叉验证
    在这里插入图片描述

    import numpy as np # linear algebra
    import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
    from sklearn.model_selection import LeaveOneOut
    
    X = np.array([[1, 2], [3, 4]])
    y = np.array([1, 2])
    
    loo = LeaveOneOut()
    
    for train_index, test_index in loo.split(X):
      X_train, X_test = X[train_index], X[test_index]
      y_train, y_test = y[train_index], y[test_index]
    print("X_train:")
    print(X_train)
    print("X_test:")
    print(X_test)
    
    X_train:
    [[1 2]]
    X_test:
    [[3 4]]
    

    NOTE: 由于模型需要进行n次训练,因此LOOCV的计算量很大。 仅当数据较小或您可以处理那么多计算时才这样做。

    3. Leave-one-out Cross-Validation (LOOCV) 留一交叉验证

    在这里插入图片描述

    import numpy as np # linear algebra
    import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
    from sklearn.model_selection import LeaveOneGroupOut
    
    X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
    y = np.array([1, 2, 1, 2])
    groups = np.array([1, 1, 2, 2])
    
    logo = LeaveOneGroupOut()
    
    for train_index, test_index in logo.split(X, y, groups):
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]
    print("X_train:")
    print(X_train)
    print("X_test:")
    print(X_test)
    
    X_train:
    [[1 2]
     [3 4]]
    X_test:
    [[5 6]
     [7 8]]
    

    4. Nested Cross-Validation

    在优化模型的超参数时,如果使用相同的k折CV策略来调整模型并评估性能,则存在过拟合的风险。
    使用Nested Cross-Validation,该方法允许将超参数调整步骤与误差估计步骤分开。 为此,我们nest两个k折交叉验证循环:

    • 内部循环用于超参数调优
    • 外部循环用于估计精度
      在这里插入图片描述

    DEMO

    from sklearn.datasets import load_iris
    from sklearn.svm import SVC
    from sklearn.model_selection import GridSearchCV,cross_val_score,KFold
    
    
    
    X = load_iris().data
    y = load_iris().target
    
    p_grid = {"C": [1, 10, 100],
              "gamma": [.01, .1]}
    
    
    svr = SVC(kernel='rbf')
    
    inner_cv = KFold(n_splits=2,shuffle=True,random_state=42)
    outer_cv = KFold(n_splits=5,shuffle=True,random_state=42)
    
    clf = GridSearchCV(estimator=svr,param_grid=p_grid,cv=inner_cv)
    nested_score = cross_val_score(clf,X=X,y=y,cv=outer_cv).mean()
    print(nested_score)
    
    0.9800000000000001
    

    您可以自由选择在内部和外部循环中使用的交叉验证方法。
    例如,如果您希望按特定的组进行分割,则可以对内部循环和外部循环使用Leave-one-group-out。

    5.Time Series CV

    现在,如果你在时间序列数据上使用k-Fold CV会发生什么?过度拟合是一个主要问题,因为您的训练数据可能包含来自未来的信息。因此,所有的训练数据都要在测试数据之前完成。
    验证时间序列数据的一种方法是使用k-fold CV,并确保每个fold中的训练数在发生在测试数据之前。
    在这里插入图片描述

    import numpy as np
    from sklearn.model_selection import TimeSeriesSplit
    
    X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])
    y = np.array([1, 2, 3, 4, 5, 6])
    tscv = TimeSeriesSplit(n_splits=5)
    
    for train_index, test_index in tscv.split(X):
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]
    
    print("X_train:")
    print(X_train)
    print("X_test:")
    print(X_test)
    
    X_train:
    [[1 2]
     [3 4]
     [1 2]
     [3 4]
     [1 2]]
    X_test:
    [[3 4]]
    

    注意:确保训练前时间序列是按顺序排列的。因为没有为TimeSeriesSplit不提供时间索引,仅根据记录出现的顺序创建拆分。

    6.Comparing Models(很重要了)

    你什么时候认为一种模式比另一种更好?如果一个模型的精度比另一个模型的精度高不了多少,这是否足以成为选择最佳模型的充分理由。存在许多将统计信息应用于机器学习模型选择的方法。

    Wilcoxon signed-rank test

    使用场景:当样本量较小且数据不服从正态分布时

    我们可以用这个 significance test来比较两个机器学习模型。
    使用k-fold交叉验证,我们可以为每个模型创建k个准确性评分。这将产生两个样本,每个模型一个。

    然后,我们可以使用Wilcoxon signed-rank检验来检验两个样本之间是否存在显著性差异。如果他们这样做,那么其中一个比另一个更准确。
    在这里插入图片描述

    from scipy.stats import wilcoxon
    from sklearn.datasets import load_iris
    from sklearn.ensemble import ExtraTreesClassifier,RandomForestClassifier
    from  sklearn.model_selection import cross_val_score,KFold
    
    X = load_iris().data
    y = load_iris().target
    
    model1 = ExtraTreesClassifier()
    model2 = RandomForestClassifier()
    kf = KFold(n_splits=20, random_state=42)
    
    results_model1 = cross_val_score(model1,X,y,cv=kf)
    results_model12 = cross_val_score(model2,X,y,cv=kf)
    
    stat,p = wilcoxon(results_model1,results_model12,zero_method='zsplit')
    print(p)
    
    0.25065329208296216
    

    结果就是p值。
    如果该值小于0.05,我们可以拒绝零假设,即模型之间没有显着差异。

    **注意:**在模型之间保持相同的折叠数是很重要的,以确保样本是从相同的总体中得出的。
    这可以通过在交叉验证过程中简单地设置相同的random_state来实现。

    7.McNemar’s Test

    McNemar 检验用于检查一个模型和另一个模型之间的预测匹配的程度。
    这被称为列联表的同质性。
    从该表里,我们可以计算x^2,它可以用来计算p值。
    在这里插入图片描述
    同样,如果p值低于0.05,我们可以拒绝零假设,并看到一个模型明显优于另一个模型。
    我们可以使用mlxtend库来创建表并计算相应的p值

    DEMO

    import numpy as np
    from mlxtend.evaluate import mcnemar_table, mcnemar
    
    
    y_target = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                         1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])#测试值
    
    
    y_model1 = np.array([0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
                         0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1])#模型1预测结果1
    
    
    y_model2 = np.array([0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0,
                         1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0])#模型2预测结果2
    
    
    tb = mcnemar_table(y_target=y_target, 
                       y_model1=y_model1, 
                       y_model2=y_model2)
    chi2, p = mcnemar(ary=tb, exact=True)
    
    print('chi-squared:', chi2)
    print('p-value:', p)
    
    chi-squared: 3
    p-value: 0.5078125
    

    8.5x2CV paired t-test

    该方法的工作原理如下。 假设我们有两个分类器A和B。我们将数据随机分为50%训练和50%测试。 然后,我们在训练数据上训练每个模型,并从称为DiffA的测试集中计算模型之间的准确性差异。 然后,将训练和测试拆分取反,并在DiffB中再次计算差异。
    重复五次,然后计算差的平均方差(S²)。 然后,将其用于计算t统计量:
    在这里插入图片描述
    其中,DiffA为第一次迭代的平均方差。
    在这里插入图片描述

    from mlxtend.evaluate import paired_ttest_5x2cv
    from sklearn.tree import DecisionTreeClassifier,ExtraTreeClassifier
    from sklearn.datasets import load_iris
    
    X = load_iris().data
    y = load_iris().target
    
    clf1 = ExtraTreeClassifier()
    clf2 = DecisionTreeClassifier()
    
    t,p = paired_ttest_5x2cv(estimator1=clf1,
                             estimator2=clf2,
                             X=X,y=y,
                             random_seed=42)
    print(p)
    

    你也可以使用:

    from mlxtend.evluate import combined_ftest_5x2cv.
    

    you can use the combined 5x2CV F-test instead which was shown to be slightly more robust (Alpaydin, 1999).
    5x2cv combined F test

    from mlxtend.evaluate import combined_ftest_5x2cv
    from sklearn.tree import DecisionTreeClassifier,ExtraTreeClassifier
    from sklearn.datasets import load_iris
    
    X = load_iris().data
    y = load_iris().target
    
    clf1 = ExtraTreeClassifier()
    clf2 = DecisionTreeClassifier()
    
    t,p = combined_ftest_5x2cv(estimator1=clf1,
                             estimator2=clf2,
                             X=X,y=y,
                             random_seed=42)
    print(p)
    
    0.5101185529124018
    
    展开全文
  • 模型评估—交叉验证

    千次阅读 2021-02-16 13:06:21
    3. sklearn的交叉验证 3.1. 计算交叉验证的指标 3.1.1. cross_validate 函数和多度量评估 3.1.2. 通过交叉验证获取预测 3.2. 交叉验证迭代器 3.3. 交叉验证迭代器–循环遍历数据 3.3.1. K 折 3.1.3.2. 重复 K...
  • 一文帮你理解模型选择方法:AIC、BIC和交叉验证

    千次阅读 多人点赞 2021-04-14 21:07:45
    一文帮你理解【模型选择方法】:AIC、BIC 和交叉验证! 本文先讲透模型选择的基本思想,再逐一叙述几种比较典型和常用的模型选择方法,希望可以帮助你理解。 一、模型选择的基本思想 ...模型选择标准的方法是
  • 主要有哪些方法?优缺点? 各方法应用举例? 什么是交叉验证法? 它的基本思想就是将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。 为什么用交叉验证法? 交叉...
  • 虽然大体数据就只有这三种分法,但分完之后怎么用还是一个问题,这就是验证策略,常用的有如下方法验证方法(The Validation Set Approach) 简单的方法,把整个数据集固定地分成训练集和测试
  • 模型评估的方法介绍

    千次阅读 2021-07-21 05:17:59
    建模的评估一般可以分为回归、分类和聚类的评估,本文主要介绍回归和分类的模型评估: 一、回归模型的评估 主要有以下方法: 指标 描述 metrics方法 Mean Absolute Error(MAE) 平均绝对误差 from ...
  • 在AI场景下,我们同样需要定量的数值化指标,来指导我们更好地应用模型对数据进行学习和建模。本文讲解模型评估的一般流程,以及分类评估指标、回归评估指标的计算方式和适用场景。
  • 来源:机器学习社区、数据派THU 本文约3400字,建议阅读10分钟 本文与你分享7种常用的交叉验证技术及其优缺点,提供了每种技术的代码片段。在任何有监督机器学习项目的模型构建阶段,我们...
  • 模型检测原理、方法学习

    千次阅读 2020-11-01 16:23:18
    模型检测学习 一、模型检测概论 1.1 模型检测所解决的问题:保证并发系统正确性和可靠性 1.2 特点:自动化程度高、简洁明了 1.3 发展:用于描述并发系统性质的CTL逻辑 符号模型检测技术 1.4 基本思想: 用状态迁移...
  • 如何对模型的表行进行评估和改进呢?scikit learn网站给出了这样一个模型评估和改进的流程图: 首先我们再来看看模型评估的过程,在模型训练时,我们首先可以用scikit learn的model_selection模块train_test_split...
  • 疑问:对于交叉验证法,如5折交叉验证,那么将会生成5个模型,到底应该选择哪个模型作为最终的模型呢? 解答:通过阅读博文,发现交叉验证法是用来评估模型性能的,并不参与最后预测模型的生成。 知识点总结: 一...
  • 一、提升模型性能的方法一般在四个方向:1.Data Augmentation2.Weight Initialization3.Transfer learning + Fine-tune4.Ensemble/Model Fusion数据增强、迁移学习与微调这些之前已经学过了。关于权重的正则化约束。...
  • 特征根判别法呢,最主要的就是写出模型的差分方程,然后求出其特征根,若其特征根在单位圆内,则该模型就是平稳的 解题如下: 二、用随机模拟的方法验证 1) ①在excel中生成100个序列数 ②将这100个序列数导入...
  • AI应用软件层出不穷,人们虽然理解人工智能趋势,但是,企业往往很难接受这样AI应用软件,很很多质疑点,本文将从机器学习模型开发过程、AI应用软件开发过程,分析如何进行机器学习AI模型测试与模型评估方法
  • 建模的评估一般可以分为回归、分类和聚类的评估,本文主要介绍回归和分类的模型评估: 一、回归模型的评估 主要有以下方法: 指标 描述 metrics方法 Mean Absolute Error(MAE) 平均绝对误差 from ...
  • python+sklearn进行交叉验证(使用交叉验证对数据划分,模型评估和参数估计,使用决策树举例)
  • 交叉验证--关于最终选取模型的疑问

    千次阅读 多人点赞 2018-06-21 21:24:28
    很多书上都说了交叉验证方法,还有留出法的评估方法。(西瓜书) 他们也都说了多次抽样然后多次评估取平均的策略,这样是为了充分利用这个样本集的分布。 这里有一个问题,那就是,既然是取平均,那这个分类器...
  • 文章目录1、数据集类型1.1 训练集1.2 验证集1.3 测试集1.4 验证集/测试集区别2、四种交叉验证方法2.1 留出法 (holdout cross validation)2.2 k 折交叉验证(k-fold cross validation)2.3 留一法(Leave one out ...
  • IC验证方法基础

    万次阅读 2019-10-29 11:12:39
    形式验证(Formal Verification)是一种IC设计的验证方法,它的主要思想是通过使用数学证明的方式来验证一个设计的功能是否正确。 形式验证可以分为三大类: 等价性检查(Equivalence Checking)、 形式模型检查...
  • 各种交叉验证评价模型

    千次阅读 2018-05-03 21:03:33
    1.The validation set approach(设置验证集) 就是说,在训练时,留出来一部分作为验证集(不参与训练),随时检测网络训练情况。我的做法是,每个epoch训练完后,都是用验证集进行验证,通过观察验证集来验证网络...
  • 题目 ... 交叉验证是在机器学习建立模型验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测...
  • Holdout检验: ...30%用于模型验证,包括绘制ROC曲线,计算精确率和召回率等指标来评估模型性能。 holdout检验的缺点很明显: 即在验证集上计算出来的最后评估指标和原始分组有很大的...
  • 上一步中开发的信用风险评分卡模型,得到的是不同风险等级客户对应的分数,我们还需要将分数与违约概率和评级符号联系起来,以便差异化管理证券公司各面临信用风险敞口的客户,这就需要证券公司各面临信用风险敞口...
  • 模型选择的一些基本思想和方法

    千次阅读 2020-02-14 19:41:05
    有监督学习是日常使用最多的建模范式,它有许多更具体的名字,比如预测模型、回归模型、分类模型或者分类器。这些名字或来源统计,或来源于机器学习。关于统计学习与机器学习的区别已经有不少讨论,不少人认为机器...
  • 训练一个具有良好表现的模型费时费力,因此模型偷盗会对模型所有者带来巨额损失,造成巨大威胁。 针对这种现象,本期 AI Drive,清华大学李一鸣分享其团队发布在 AAAI 2022 的成果:通过验证嵌入的外源特征防止模型...
  • 常见的软件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型和统一过程六种。 (1)瀑布模型 优点:可强迫开发人员采用规范化的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段...
  • 内部验证

    千次阅读 2019-11-13 21:03:31
    但对于需要确定超参数的情况(比如SVM模型、广义线性模型或树模型需要筛选变量时),必须进一步将训练集划分成一部分验证集,以确定超参数。此时,内部验证是十分重要的环节。另外,当样本量不够大而缺...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 311,055
精华内容 124,422
热门标签
关键字:

对模型验证最主要的方法是