文章目录

  • 1. KFold
  • 2. StratifiedKFold
  • 3. generator
  • 4. 建模中的应用
  • 1. KFold

    首先要搞清楚,KFold是用于生成交叉验证的数据集的,而StratifiedKFold则是在KFold的基础上,加入了分层抽样的思想,使得测试集和训练集有相同的数据分布,因此表现在算法上,StratifiedKFold需要同时输入数据和标签,便于统一训练集和测试集的分布

  • 概念
  • 将数据K等分,依次选择其中一份作为测试集,其余k-1份作为训练集
  • X=np.array([
        [1,2,3,4],
        [11,12,13,14],
        [21,22,23,24],
        [31,32,33,34],
        [41,42,43,44],
        [51,52,53,54],
        [61,62,63,64],
        [71,72,73,74]
    ])
     
    y=np.array([1,1,0,0,1,1,0,0])
    
    from sklearn.model_selection import StratifiedKFold,KFold
    kf=Kfold(n_splits=4)
    kf.split(X) !注意这个地方
    

    2. StratifiedKFold

    基本代码和KFold相似。

    (1) 首先创建一个对象

    (2) 然后带入数据进行数据分割

    (3) 读取分割后的数据,读取后每个变量形式表现为数组,整个分隔的函数.split得出的则是一个生成器

    我主要卡在了不清楚

    (1) 分隔时skf.split(X,y)的输出到底是个什么东西,
    (2) 为什么可以用for循环去读取。

    于是查了些资料发现是自己对生成器的了解不够

    sfolder = StratifiedKFold(n_splits=4,random_state=0)
    for train, test in sfolder.split(X,y):
        print('Train: %s | test: %s' % (train, test))
    

    3. generator

    感谢python中的生成器(generator)总结

  • 首要印象
    python中的generator保存的是算法,不会输出结果,是一种惰性计算,即只有真正需要计算出值的时候才会往下计算

  • 生成generator
    (1) 将生成列表的[]改成()

    (2) 在函数中使用yield关键字。
    函数里有了yield之后,每次执行到yield就会停止,下一次直接从停止的地方继续计算。因此即使生成器是无限循环也没有关系,因为生成器本身并不计算结果,只是保存算法。

  • #(1)将生成列表的[]改成()
    t=(x for x in range(10))
    t
    输出:<generator object <genexpr> at 0x000001D6C12602E0>
    
    #(2) 在函数中使用yield关键字
    def fib():
        a=[1,2]
        b=[3,4]
        while a[1]<100:
            yield a,b
            a=[i+7 for i in a]
            b=[i+1 for i in b]
     
    f = fib()
    for i,j in f:
        print(i,j)
    
  • generator中的for循环
    对于generator可以采用next()方法进行逐条读取,但一般for循环更为常见

    通常采用for循环遍历一个generator,其实for循环的内部实现就是不停调用next()

  • 优点

  • (1) 生成器可以避免不必要的计算,带来性能上的提升
  • (2) 而且会节约空间,可以实现无限循环(无穷大的)的数据结构。
  • 4. 建模中的应用

    生成交叉验证数据集,其中skf.split(X,y)返回的是训练集和测试集的索引值

    skf=StratifiedKFold(n_splits=3,random_state=1) 
    
    for train_index,test_index in skf.split(X,y):
        X_train,X_test=X[train_index],X[test_index]
        y_train,y_test=y[train_index],y[test_index]                                                                                           
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » python中的StratifiedKFold

    发表评论