精华内容
下载资源
问答
  • 交叉验证的作用
    千次阅读
    2020-01-06 15:18:40

    交叉验证的目的

    只是评估给定算法在特定数据集上训练后的泛化性能好坏

    交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。
    还可以从有限的数据中获取尽可能多的有效信息。

    https://www.jianshu.com/p/d08843423099

    更多相关内容
  • 随机泊松分布矩阵 x 向量 y 用泊松广义线性模型 [1] 拟合,估计拟合优度有两种情况: 1 没有交叉验证会导致高伪 R2 (pR2) 值2 交叉验证可提供正确的低 pR2 值 误导性的高 pR2 值没有交叉验证的良好拟合是由于...
  • 理解K折交叉验证

    千次阅读 2020-02-25 22:21:56
    k 折交叉验证 第一步,不重复抽样将原始数据随机分为 k 份。 第二步,每一次挑选其中 1 份作为测试集,剩余 k-1 份作为训练集用于模型训练。 第三步,重复第二步 k 次,这样每个子集都有一次机会作为测试集,其余...

    k 折交叉验证

    第一步,不重复抽样将原始数据随机分为 k 份。
    第二步,每一次挑选其中 1 份作为测试集,剩余 k-1 份作为训练集用于模型训练。
    第三步,重复第二步 k 次,这样每个子集都有一次机会作为测试集,其余机会作为训练集。
    在每个训练集上训练后得到一个模型,
    用这个模型在相应的测试集上测试,计算并保存模型的评估指标,
    第四步,计算 k 组测试结果的平均值作为模型精度的估计,并作为当前 k 折交叉验证下模型的性能指标。

    K折交叉验证的优点:
    1.如果单纯的将数据集划分为一个训练集和一个测试集,则会导致测试集无法参与到模型的训练
    2.k 折交叉验证通过对 k 个不同分组训练的结果进行平均来减少方差,因此模型的性能对数据的划分就不那么敏感。

    展开全文
  • K折交叉验证

    2021-10-23 15:51:42
    用鸢尾花数据来展示k折验证效果 # 导入鸢尾花数据集 from sklearn.datasets import load_iris from sklearn.model_selection import cross_val_score # 导入用于分类的svc分类器 from sklearn.svm import SVC iris ...

    首先要讲的就是k折交叉验证的目的(即为什么要用k折交叉验证?)
    根本原因:数据有限,单一的把数据都用来做训练模型,容易导致过拟合。(反过来,如果数据足够多,完全可以不使用交叉验证。)较小的k值会导致可用于建模的数据量太小,所以小数据集的交叉验证结果需要格外注意,建议选择较大的k值。k一般取2-10,在样本数量不是很多的情况下,想要检验拟合一个完美的模型,最常见的方法就是K折交叉检验。

    附代码

    用鸢尾花数据来展示k折验证效果

    # 导入鸢尾花数据集
    from sklearn.datasets import load_iris
    from sklearn.model_selection import cross_val_score
    # 导入用于分类的svc分类器
    from sklearn.svm import SVC
    
    iris = load_iris()
    x, y = iris.data, iris.target
    
    svc = SVC(kernel='linear')
    # cv 为迭代次数, 这里设置为5
    scores = cross_val_score(svc, x, y, cv=5)
    # 5次,每次的结果
    print("交叉验证得分: %.4f %.4f %.4f %.4f %.4f" % (scores[0], scores[1], scores[2], scores[3], scores[4]))
    # 用得分均值作为最终得分
    print("res: %.4f" % (scores.mean()))
    
    • 1.K-Fold 交叉验证概念
      在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。
      验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。

    • 2.举例说明
      下面举一个具体的例子来说明K-Fold的过程,比如如下的数据
      [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
      分为K=3组后
      Fold1: [0.5, 0.2]
      Fold2: [0.1, 0.3]
      Fold3: [0.4, 0.6]
      交叉验证的时会使用如下三个模型,分别进行训练和测试,每个测试集误差MSE加和平均就得到了交叉验证的总评分
      Model1: Trained on Fold1 + Fold2, Tested on Fold3
      Model2: Trained on Fold2 + Fold3, Tested on Fold1
      Model3: Trained on Fold1 + Fold3, Tested on Fold2

    • 3.应用讲解
      – 1、 将全部训练集S分成k个不相交的子集,假设S中的训练样例个数为m,那么每一个子集有m/k个训练样例,相应的子集称作{clip_image024}。
      – 2、 每次从模型集合M中拿出来一个clip_image010[3],然后在训练子集中选择出k-1个

    • {clip_image026}(也就是每次只留下一个clip_image028),使用这k-1个子集训练clip_image010[4]后,得到假设函数clip_image030。最后使用剩下的一份clip_image028[1]作测试,得到经验错误clip_image032。
      – 3、 由于我们每次留下一个clip_image028[2](j从1到k),因此会得到k个经验错误,那么对于一个clip_image010[5],它的经验错误是这k个经验错误的平均。
      – 4、 选出平均经验错误率最小的clip_image010[6],然后使用全部的S再做一次训练,得到最后的clip_image012[4]。

    • 核心内容:

    通过上述1,2,3步进行模型性能的测试,取平均值作为某个模型的性能指标

    根据性能指标来挑选出最优模型,再进行上述第4步重新进行训练,获得最终模型

    • 疑问解答:

    1.为什么不直接拆分训练集与数据集,来验证模型性能,反而采用多次划分的形式,岂不是太麻烦了?

    我们为了防止在训练过程中,出现过拟合的问题,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。这样的直接划分会导致一个问题就是测试集不会参与训练,这样在小的数据集上会浪费掉这部分数据,无法使模型达到最优(数据决定了程性能上限,模型与算法会逼近这个上限)。但是我们又不能划分测试集,因为需要验证网络泛化性能。采用K-Fold 多次划分的形式就可以利用全部数据集。最后采用平均的方法合理表示模型性能。

    2.为什么还要进行所有数据集重新训练,是否太浪费时间?

    我们通过K-Fold 多次划分的形式进行训练是为了获取某个模型的性能指标,单一K-Fold训练的模型无法表示总体性能,但是我们可以通过K-Fold训练的训练记录下来较为优异的超参数,然后再以最优模型最优参数进行重新训练,将会取得更优结果。

    3.何时使用K-Fold

    我认为,数据总量较小时,其他方法无法继续提升性能,可以尝试K-Fold。其他情况就不太建议了,例如数据量很大,就没必要更多训练数据,同时训练成本也要扩大K倍(主要指的训练时间)。

    展开全文
  • Keras入门(八)K折交叉验证

    千次阅读 2021-01-24 20:43:19
      在文章Keras入门(一)搭建深度神经网络(DNN)解决多分类问题中,笔者介绍了如何搭建DNN模型来解决IRIS数据集的多分类问题。   本文将在此基础上介绍...  用交叉验证目的是为了得到可靠稳定的模型。K折交

      在文章Keras入门(一)搭建深度神经网络(DNN)解决多分类问题中,笔者介绍了如何搭建DNN模型来解决IRIS数据集的多分类问题。
      本文将在此基础上介绍如何在Keras中实现K折交叉验证。

    什么是K折交叉验证?

      K折交叉验证是机器学习中的一个专业术语,它指的是将原始数据随机分成K份,每次选择K-1份作为训练集,剩余的1份作为测试集。交叉验证重复K次,取K次准确率的平均值作为最终模型的评价指标。一般取K=10,即10折交叉验证,如下图所示:
    10折交叉验证
      用交叉验证的目的是为了得到可靠稳定的模型。K折交叉验证能够有效提高模型的学习能力,类似于增加了训练样本数量,使得学习的模型更加稳健,鲁棒性更强。选择合适的K值能够有效避免过拟合。

    Keras实现K折交叉验证

      我们仍采用文章Keras入门(一)搭建深度神经网络(DNN)解决多分类问题中的模型,如下:
    DNN模型结构图
    同时,我们对IRIS数据集采用10折交叉验证,完整的实现代码如下:

    # -*- coding: utf-8 -*-
    # model_train.py
    # Python 3.6.8, TensorFlow 2.3.0, Keras 2.4.3
    # 导入模块
    import keras as K
    import pandas as pd
    from sklearn.model_selection import KFold
    
    
    # 读取CSV数据集
    # 该函数的传入参数为csv_file_path: csv文件路径
    def load_data(sv_file_path):
        iris = pd.read_csv(sv_file_path)
        target_var = 'class'  # 目标变量
        # 数据集的特征
        features = list(iris.columns)
        features.remove(target_var)
        # 目标变量的类别
        Class = iris[target_var].unique()
        # 目标变量的类别字典
        Class_dict = dict(zip(Class, range(len(Class))))
        # 增加一列target, 将目标变量转化为类别变量
        iris['target'] = iris[target_var].apply(lambda x: Class_dict[x])
    
        return features, 'target', iris
    
    
    # 创建模型
    def create_model():
        init = K.initializers.glorot_uniform(seed=1)
        simple_adam = K.optimizers.Adam()
        model = K.models.Sequential()
        model.add(K.layers.Dense(units=5, input_dim=4, kernel_initializer=init, activation='relu'))
        model.add(K.layers.Dense(units=6, kernel_initializer=init, activation='relu'))
        model.add(K.layers.Dense(units=3, kernel_initializer=init, activation='softmax'))
        model.compile(loss='sparse_categorical_crossentropy', optimizer=simple_adam, metrics=['accuracy'])
        return model
    
    
    def main():
        # 1. 读取CSV数据集
        print("Loading Iris data into memory")
        n_split = 10
        features, target, data = load_data("./iris_data.csv")
        x = data[features]
        y = data[target]
        avg_accuracy = 0
        avg_loss = 0
        for train_index, test_index in KFold(n_split).split(x):
            print("test index: ", test_index)
            x_train, x_test = x.iloc[train_index], x.iloc[test_index]
            y_train, y_test = y.iloc[train_index], y.iloc[test_index]
    
            print("create model and train model")
            model = create_model()
            model.fit(x_train, y_train, batch_size=1, epochs=80, verbose=0)
    
            print('Model evaluation: ', model.evaluate(x_test, y_test))
            avg_accuracy += model.evaluate(x_test, y_test)[1]
            avg_loss += model.evaluate(x_test, y_test)[0]
    
        print("K fold average accuracy: {}".format(avg_accuracy / n_split))
        print("K fold average accuracy: {}".format(avg_loss / n_split))
    
    
    main()
    

    模型的输出结果如下:

    Iterationlossaccuracy
    10.000561.0
    20.000211.0
    30.000221.0
    40.006081.0
    50.219250.8667
    60.523900.8667
    70.009981.0
    80.044311.0
    90.145901.0
    100.212860.8667
    avg0.116330.9600

    10折交叉验证的平均loss为0.11633,平均准确率为96.00%。

    总结

      本文代码已存放至Github,网址为:https://github.com/percent4/Keras-K-fold-test 。
      感谢大家的阅读~
      2020.1.24于上海浦东

    展开全文
  • 疑问:对于交叉验证法,如5折交叉验证,那么将会生成5个模型,到底应该选择哪个模型作为最终的模型呢? 解答:通过阅读博文,发现交叉验证法是用来评估模型性能的,并不参与最后预测模型的生成。 知识点总结: 一...
  • 1.交叉验证的分类 保留交叉验证:也称简单交叉验证。随机将样本集分为训练集验证集,比例通常是8:2,或者7:3,在训练集上训练得到模型,在验证集上对模型进行评估。上面步骤可以重复多次,最后选出一个误差最小的...
  • 为什么要用交叉验证

    万次阅读 多人点赞 2017-06-21 12:09:31
    什么是交叉验证法? 为什么用交叉验证法? 主要有哪些方法?优缺点? 各方法应用举例? 什么是交叉验证法?它的基本思想就是将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价...
  • 来源:机器学习社区、数据派THU 本文约3400字,建议阅读10分钟 本文与你分享7种最常用的交叉验证技术及其优缺点,提供了每种技术的代码片段。在任何有监督机器学习项目的模型构建阶段,我们...
  • k-折交叉验证

    千次阅读 2019-06-18 20:52:58
    一、k折交叉验证目的(为什么要用k折交叉验证?) 1.根本原因:数据有限,单一的把数据都用来做训练模型,容易导致过拟合。(反过来,如果数据足够多,完全可以不使用交叉验证。)较小的k值会导致可用于建模的数据...
  • 介绍这个非常重要的概念,希望在训练算法时能...交叉验证的基本思想:把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对模型...
  • 机器学习 交叉验证的作用

    千次阅读 2019-05-07 19:39:42
    交叉验证(Cross validation),交叉验证用于防止模型过于复杂而引起的过拟合.有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此...
  • 交叉验证

    千次阅读 2018-11-21 20:58:37
    交叉验证目的:防范过拟合 我们把数据集分成训练集、验证集测试集; 训练集用来估算模型参数,验证集用来选择超参数,测试集用来评估模型效果。  交叉验证是在机器学习建立模型验证模型参数时常用的办法。...
  • 基于python的鸢尾花SVM练习,包含超参数的批量筛选,重复交叉验证
  • 模型评估—交叉验证

    千次阅读 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...
  • 10折交叉验证深入理解

    万次阅读 多人点赞 2018-12-25 15:22:08
    交叉验证(Cross Validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。 在给定的建模样本中,拿出大部分样本进行...
  • 交叉验证:将拿到的训练数据,分为训练验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。...
  • k折交叉验证的kerassklearn版本通吃

    千次阅读 2019-12-02 10:40:08
    1. 什么是交叉验证 交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,...
  • Number of feature vs cross-validations score — output of above code :Image by author 功能数量与交叉验证得分的比较—以上代码的输出:作者提供的图像 Key Takeaways and Conclusion 重要要点结论 ...
  • 交叉验证主要可以用来评估模型的性能,比如说有一个模型,有一个数据集,如果不使用交叉验证,那就是直接将数据放到网络当中去训练,训练结束后,用新的数据来进行测试,来看看这个模型是否好,但是这个模型对这个新...
  • k折交叉验证

    千次阅读 2014-12-18 13:03:35
    k折交叉验证
  • 在任何有监督机器学习项目的模型构建阶段,我们训练模型的目的是从标记的示例中学习所有权重偏差的最佳值。 如果我们使用相同的标记示例来测试我们的模型,那么这将是一个方法论错误,因为一个只会重复刚刚看到的...
  • 交叉验证其实就是为了检查模型的泛化行稳定性,让模型的输出更加可靠。 因为当我们只将训练数据划分一次时,有可能划分的不好,所以模型的结果会有偏差,不可靠。所以,我们可以使用交叉验证。经常使用的是k-...
  • 返回主目录 返回决策树目录 上一章:机器篇——决策树(五) 下一章:机器篇——集成学习(一) ... 交叉验证(cross validation, cv) 主要用于模型训练或建模应用中,如分类预测、PCR、PLS 回归建模等。在给定的...
  • ​ 下采样就是减少数据极多的样本数据,以达到平衡数据的效果(减少y=0的样本数,使y=0的数量y=1的数量平衡起来) ​ 使用python实现下采样的代码 #下采样 def down(data): #分离特值X结果y X...
  • 交叉验证(CrossValidation)方法思想简介

    万次阅读 2018-01-22 11:41:07
    以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,151
精华内容 6,860
关键字:

交叉验证的意义和目的

友情链接: Research-LDPC-coding.zip