精华内容
下载资源
问答
  • 常用的方法有两种,k折交叉验证法和自助法。介绍这两种方法的资料有很多。下面是k折交叉验证法的python实现。 ##一个简单的2折交叉验证 from sklearn.model_selection import KFold import numpy as np X=np.array...
  • K折交叉验证法原理及python实现

    万次阅读 多人点赞 2018-01-02 17:12:01
    在训练数据的过程或者参加数据比赛的时候,常常会遇到数据量不够大的情况,在一次比赛过程我学到一个小技巧—K折交叉验证法(k-fold CrossValidation),下面和大家分享一下。1 变形前的K折在遇到K折交叉验证之前,...

    本文为原创文章,转载请注明出处!

    在训练数据的过程或者参加数据比赛的时候,常常会遇到数据量不够大的情况,在一次比赛过程我学到一个小技巧—K折交叉验证法(k-fold CrossValidation),下面和大家分享一下。

    1 变形前的K折


    在遇到K折交叉验证之前,往往使用的是简单交叉验证(hold -out cross validation),也就是从全部的训练数据 D中随机选择 d的样例作为训练集 train,剩余的作为测试集 test(红色方框表示)。相信大家一定都非常熟悉,如果还不是很了解赶紧看看大牛Andrew Ng的课程吧。

    在这里,数据都只被所用了一次,没有被充分利用

    那么,怎样提高数据的利用率呢?

    2 K折就是讲数据集切分成K小块,验证集和测试集相互形成补集,循环交替


    纽约大学博士Seymour Geisser提出K折交叉验证法,具体步骤如下:

    • 将数据集D随机分为k个包(这里假定K=6)。
      这里写图片描述

    • 每次将其中一个包作为测试集test,剩下k-1个包作为训练集train进行训练。

      这里写图片描述

      此时训练集train由D变成了K*D,

    • 最后计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。
      这里写图片描述

    它有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性

    你可能会问K选多少合适呢?

    根据情况和个人喜好调节,常用的K值有3,6,10等。

    3 python实现


    在scikit-learn中有CrossValidation的实现代码,地址:scikit-learn官网crossvalidation文档

    使用方法:

    >>> import numpy as np
    >>> from sklearn.model_selection import KFold
    
    >>> X = ["a", "b", "c", "d"]
    >>> kf = KFold(n_splits=2)
    >>> for train, test in kf.split(X):
    ...     print("%s %s" % (train, test))
    [2 3] [0 1]
    [0 1] [2 3]
    展开全文
  • 1. k折交叉验证法就是将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性 2. 每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,从而获得k组训练/测试集 3. 交叉验证法评估...
    """
    @author: JacksonKim
    @filename: k_fold_cross_validation.py
    @start: 2021/1/29
    @end: 2021/1/29
    """
    
    import numpy as np
    
    '''
    1. k折交叉验证法就是将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性
    2. 每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,从而获得k组训练/测试集
    3. 交叉验证法评估结果的稳定性和保真性很大程度上取决于k的取值
    4. 数据集D划分成k个子集时有多种划分方法,一般进行p次随机不同划分,然后进行p次交叉验证
    '''
    
    # 随机产生我们的数据集
    x = np.random.randint(-10, 10, 100)  # 前两个参数表示范围,第三个参数表示个数
    data_set = []
    
    # 设置k值
    k = 5
    
    # 对数据集进行划分
    for i in range(k):
        tmp = []
        j = i
        while j < len(x):
            tmp.append(x[j])
            j = j + k
        data_set.append(tmp)
    
    # 打印数据集
    print("data set:")
    for i in range(k):
        print(data_set[i])
    
    # 划分k组训练/测试集
    for i in range(k):
        test_set = data_set[i]
        train_set = []
        for j in range(k):
            if i != j:
                train_set.append(data_set[j])
        print()
        print("processing fold #", i+1)
        # 打印训练集
        print("train set: ")
        for j in range(k-1):
            print(train_set[j])
        # 打印测试集
        print("test set: ", test_set)
    
    
    展开全文
  • k_flods,k折交叉验证法

    千次阅读 2018-05-20 17:36:07
    python使用k折交叉验证的代码 K折交叉验证:sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None) 思路:将训练/测试数据集划分n_splits个互斥子集,每次用其中一个子集当作验证集,剩下...

    python使用k折交叉验证的代码
    K折交叉验证:sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)

    思路:将训练/测试数据集划分n_splits个互斥子集,每次用其中一个子集当作验证集,剩下的n_splits-1个作为训练集,进行n_splits次训练和测试,得到n_splits个结果

    注意点:对于不能均等份的数据集,其前n_samples % n_splits子集拥有n_samples // n_splits + 1个样本,其余子集都只有n_samples // n_splits样本

    参数说明:

    n_splits:表示划分几等份

    shuffle:在每次划分时,是否进行洗牌

    ①若为Falses时,其效果等同于random_state等于整数,每次划分的结果相同

    ②若为True时,每次划分的结果都不一样,表示经过洗牌,随机取样的

    random_state:随机种子数

    属性:

    ①get_n_splits(X=None, y=None, groups=None):获取参数n_splits的值

    ②split(X, y=None, groups=None):将数据集划分成训练集和测试集,返回索引生成器

    通过一个不能均等划分的栗子,设置不同参数值,观察其结果

    ①设置shuffle=False,运行两次,发现两次结果相同

    import numpy as np
    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=2)
    k = kf.get_n_splits(x)
    
    print(kf)
    
    for train_index, test_index in kf.split(x):  #几折循环几次,相应得到几次结果,这里参数写Y也一样
        print('TRAIN:', train_index, "TEST:",  kf.split(x))
        x_train, x_test = x[train_index], x[test_index]
        y_train, y_test = y[train_index], y[test_index]

    See also

    1. StratifiedKFold

    Takes group information into account to avoid building folds with imbalanced class distributions (for binary or multiclass classification tasks).

    1. GroupKFold

    K-fold iterator variant with non-overlapping groups.

    1. RepeatedKFold

    Repeats K-Fold n times.

    展开全文
  • 1. 交叉验证:交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、...2. k折交叉验证就是将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。 纽约大学博士Seymour Geiss...

    1. 交叉验证:交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。

    2. k折交叉验证就是将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。

    纽约大学博士Seymour Geisser提出K折交叉验证法,具体步骤如下:

    1)将数据集D随机分为k个包(这里假定K=6);

    2)每次将其中一个包作为测试集test,剩下k-1个包作为训练集train进行训练;

    3)最后计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率;

    3. 10折交叉验证举例

    第1步,将数据等分到10个桶中。
     

    我们会将50名篮球运动员和50名非篮球运动员分到每个桶中。每个桶当中放入了100人的信息。

    第2步,下列步骤重复10次。

    (1)每一次迭代中留存其中一个桶。第一次迭代中留存桶1,第二次留存桶2,其余依此类推。

    (2)用其他9个桶的信息训练分类器(第一次迭代中利用从桶2到桶10的信息训练分类器)。

    (3)利用留存的数据来测试分类器并保存测试结果。在上例中,这些结果可能如下:

    35个篮球运动员被正确分类;

    29个非篮球运动员被正确分类。

    第3步,对上述结果汇总。

    通常情况下我们会将结果放到与下表类似的表格中:

     

    分成篮球运动员

    分成非篮球运动员

    实际为篮球运动员

    372

    128

    实际为非篮球运动员

    220

    280

    在所有500名篮球运动员中,有372人被正确分类。可能需要做的一件事是将右下角的数字也加上去,也就是说1000人当中有652(372+280)人被正确分类。因此得到的精确率为65.2%。与2折或3折交叉验证相比,基于10折交叉验证得到的结果可能更接近于分类器的真实性能。之所以这样,是因为每次采用90%而不是2折交叉验证中仅仅50%的数据来训练分类器。

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • ML之FE:特征工程中常用的五大数据集划分方法(留1法/留p法、随机划分法、K折交叉验证法、自定义分割法、时间序列数据分割法)讲解及其代码实现 目录 特征工程中常用的数据集划分方法 1、留一法、留P法 T1、留...
  • 1、线性回归+留出与lasso+留出 #波士顿房价 from sklearn import datasets from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from
  • 百度就得到了训练的数据集,如果百度将数据集全部用于模型构造,而A公司无法段时间内再次提供新的图像数据,那么百度作出的模型就无法验证其性能,也就是分类准确率。无法知晓性能的模型是不会被任何公司接受的。...
  • k 折交叉验证

    2020-04-24 11:25:10
    #k 折交叉验证(k-fold cross validation) ...「k折交叉验证」是一种动态验证的方式,这种方式可以降低数据划分带来的影响。具体步骤如下: 将数据集分为训练集和测试集,将测试集放在一边 将训练集分为 k 份...
  • 交叉验证(简单交叉验证、k折交叉验证、留一

    万次阅读 多人点赞 2016-05-11 11:57:50
    文章介绍了三种交叉验证的方法,在做分类时很常用。
  • 文章目录1 简单的交叉验证2 k折交叉验证 k-fold cross validation3 留一 leave-one-out cross validation 针对经验风险最小化算法的过拟合的问题,给出交叉验证的方法,这个方法在做分类问题时很常用: 1 简单的...
  • 交叉验证(简单交叉验证、k折交叉验证、留一) - boat_lee的博客 - CSDN博客 https://blog.csdn.net/u010451580/article/details/51373081
  • 之前使用train_test_split函数将数据集随机划分为训练集和测试集,然后使用score方法评估...标准k折交叉检验:回归问题默认使用。根据用户指定的k划分数据,经历k次训练测试,每次一折当测试集其它的是训练集。 分层
  • 网格搜索算法与K折交叉验证

    千次阅读 2017-08-26 15:28:19
    网格搜索算法和K折交叉验证法是机器学习入门的时候遇到的重要的概念。 网格搜索算法是一种通过遍历给定的参数组合来优化模型表现的方法。 以决策树为例,当我们确定了要使用决策树算法的时候,为了能够更好地拟合...
  • 针对经验风险最小化算法的过拟合的问题,给出交叉验证的方法,这个方法在做分类问题时很常用: 一:简单的交叉验证的步骤如下: 1、 从全部的训练数据 S中随机选择 中随机选择 s的样例作为训练集 train,剩余的 ...
  • ML - K折交叉验证

    2021-04-03 09:11:19
    文章目录验证数据的由来随机问题 和 交叉验证的由来K折交叉验证方法留一 LOO-CV代码实现Validation 和 Cross Validation测试train_test_split使用交叉验证回顾网格搜索cross_val_score 参数 验证数据的由来 只是...
  • 交叉验证是什么? 在模型建立中,通常有两个数据集:训练集(train)和测试集(test)。训练集用来训练模型;测试集是完全不参与训练的数据,仅仅用来观测测试效果的数据。 一般情况下,训练的结果对于训练集的拟合...
  • 交叉验证法K折交叉检验)

    千次阅读 2018-09-28 17:48:14
  • K折交叉验证

    2017-10-25 22:08:07
    (K 值小,则会变得像“验证”) K 值太大,所得结果会变化多端。(K 值大,则会变得像“留一”(LOOCV)) 通常建议的值是 k=10 。 如何衡量模型的偏误/变化程度? K交叉检验之后,我们得到 K 个不同的模型...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 256
精华内容 102
关键字:

k折交叉验证法