【【Python学习】学习】 – sklearn学习学习 – 数据集分割方法数据集分割方法 – 随机划分与随机划分与K折交叉划折交叉划
分与分与StratifiedKFold与与StratifiedShuffleSplit
一、随机划分一、随机划分
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 1)归一化前,将原始数据分割
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.2,
stratify=y, # 按照标签来分层采样
shuffle=True, # 是否先打乱数据的顺序再划分
random_state=1) # 控制将样本随机打乱
函数声明:train_test_split(test_size, train_size, random_state=None, shuffle=True, stratify=None)
参数说明:参数说明:
test_size:可以接收float,int或者None。如果是float,则需要传入0.0-1.0之间的数,代表测试集占总样本数的比例。如果传入的是int,则代表测试集样本
数,如果是None,即未声明test_size参数,则默认为train_size的补数。如果train_size也是None(即两者都是None),则默认是0.25。
train_size:和前者同理。
random_state:可以接收int,随机种子实例,或者None。random_state是随机数生成器使用的种子,如果是None则默认通过 ' np.random ' 来生成随机种
子。
stratify:接收一个类数组对象 或 None。如果不为None,则数据将以分层的方式进行分割,使用这个作为分类标签。(找了半天关于分层的方式进行分割
的具体说明,总算找到个像样的,见下文)
shuffle: 默认是True,是否在分割之前重新洗牌数据。如果shuffle = False那么stratify必须是None。
关于关于stratify参数的详细说明:参数的详细说明:
stratify是为了保持split前类的分布。比如有100个数据,80个属于A类,20个属于B类。如果train_test_split(… test_size=0.25, stratify = y_all), 那么split之
后数据如下:
training: 75个数据,其中60个属于A类,15个属于B类。
testing: 25个数据,其中20个属于A类,5个属于B类。
用了stratify参数,training集和testing集的类的比例是 A:B= 4:1,等同于split前的比例(80:20)。通常在这种类分布不平衡的情况下会用到stratify。
将stratify=X_data(数据)就是按照X中的比例分配
将stratify=Y_data(标签)就是按照y中的比例分配
一般来说都是 stratify = y 的
二、二、K折交叉划分折交叉划分
传送门
定义与原理:将原始数据D随机分成K份,每次选择(K-1)份作为训练集,剩余的1份(红色部分)作为测试集。交叉验证重复K次,取K次准确率的平均
值作为最终模型的评价指标。过程如下图所示,它可以有效避免过拟合和欠拟合状态的发生,K值的选择根据实际情况调节。
评论0