文章开始先讲下交叉验证,这个概念同样适用于这个划分函数
1.交叉验证(cross-validation)
交叉验证是指在给定的建模样本中,拿出其中的大部分样本进行模型训练,生成模型,留小部分样本用刚建立的模型进行预测,并求这小部分样本的预测误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预测了一次而且仅被预测一次,比较每组的预测误差,选取误差最小的那一组作为训练模型。
下图所示
2.stratifiedshufflesplit函数的使用
用法:
1
2
|
from sklearn.model_selection import stratifiedshufflesplit
stratifiedshufflesplit(n_splits = 10 ,test_size = none,train_size = none, random_state = none)
|
2.1 参数说明
参数 n_splits是将训练数据分成train/test对的组数,可根据需要进行设置,默认为10
参数test_size和train_size是用来设置train/test对中train和test所占的比例。例如:
1.提供10个数据num进行训练和测试集划分
2.设置train_size=0.8 test_size=0.2
3.train_num=num*train_size=8 test_num=num*test_size=2
4.即10个数据,进行划分以后8个是训练数据,2个是测试数据
注*:train_num≥2,test_num≥2 ;test_size+train_size可以小于1*
参数 random_state控制是将样本随机打乱
2.2 函数作用描述
1.其产生指定数量的独立的train/test数据集划分数据集划分成n组。
2.首先将样本随机打乱,然后根据设置参数划分出train/test对。
3.其创建的每一组划分将保证每组类比比例相同。即第一组训练数据类别比例为2:1,则后面每组类别都满足这个比例
2.3 具体实现
1
2
3
4
5
6
7
8
9
10
11
12
|
from sklearn.model_selection import stratifiedshufflesplit
import numpy as np
x = np.array([[ 1 , 2 ], [ 3 , 4 ], [ 1 , 2 ], [ 3 , 4 ],
[ 1 , 2 ],[ 3 , 4 ], [ 1 , 2 ], [ 3 , 4 ]]) #训练数据集8*2
y = np.array([ 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 ]) #类别数据集8*1
ss = stratifiedshufflesplit(n_splits = 5 ,test_size = 0.25 ,train_size = 0.75 ,random_state = 0 ) #分成5组,测试比例为0.25,训练比例是0.75
for train_index, test_index in ss.split(x, y):
print ( "train:" , train_index, "test:" , test_index) #获得索引值
x_train, x_test = x[train_index], x[test_index] #训练集对应的值
y_train, y_test = y[train_index], y[test_index] #类别集对应的值
|
运行结果:
从结果看出,1.训练集是6个,测试集是2,与设置的所对应;2.五组中每组对应的类别比例相同
以上这篇对python中数据集划分函数stratifiedshufflesplit的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/m0_38061927/article/details/76180541