sklearn ShuffleSplit.split()使用说明,内有大坑(结合for循环清零问题)

sklearn.model_selection.ShuffleSplit类用于将样本集合随机“打散”后划分为训练集、测试集(可理解为验证集,下同),类申明如下:

官方文档使用说明

官方文档链接

class sklearn.model_selection.ShuffleSplit(n_splits=10, test_size=None, train_size=None, random_state=None)[source]¶

n_splits :产生的随机抽样组数

test_size :测试集比例或样本数量,该值为[0.0, 1.0]内的浮点数时,表示测试集占总样本的比例;该值为整型值时,表示具体的测试集样本数量;train_size不设定具体数值时,该值取默认值0.1,train_size设定具体数值时,test_size取剩余部分

train_size : 训练集比例或样本数量,该值为[0.0, 1.0]内的浮点数时,表示训练集占总样本的比例;该值为整型值时,表示具体的训练集样本数量;该值为None(默认值)时,训练集取总体样本除去测试集的部分

random_state :随机数种子

着重介绍类的成员函数split()的问题

代码如下:

cv = ShuffleSplit(10, test_size=0.2, random_state=42) #生成十折,测试样本为20%的对象
cv_split = cv.split(epochs_data_train)  #按照cv的结果生成训练数据和测试数据索引
for train_idx, test_idx in cv_split:
    y_train, y_test = labels[train_idx], labels[test_idx]

    X_train = csp.fit_transform(epochs_data_train[train_idx], y_train)

    # fit classifier
    lda.fit(X_train, y_train)

这里使用ShuffleSplit产生了训练样本和测试样本的索引,并用for与split的结合训练了分类器。

神奇的地方出现了

这是for循环之前的cv——split
这是for循环之前的cv_split
这是for循环之后的cv——split
这是for循环之后的cv_split

经过多次试验发现,只要遍历之后,cv_split就会自动清空,像是内存回收机制。这个问题困扰了我好几个小时,没想到是这个对象的特性导致的bug

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值