最近在学习分类算法及Python的相关实现,比较有趣,在此将所了解的内容归纳,分享一下,整体内容主要包含以下几点:
考虑到文章篇幅过长,计划使用四个章节完成介绍,本文为第二章节,主要介绍通过train_test_split、StratifiedKFold实现不同的训练集、测试集的构建。
数据集背景
首先先简单介绍下数据集,如下:
数据描述
数据样例
iris.data文件数据样例,如下:
5.1,3.5,1.4,0.2,Iris-setosa4.9,3.0,1.4,0.2,Iris-setosa4.7,3.2,1.3,0.2,Iris-setosa4.6,3.1,1.5,0.2,Iris-setosa5.0,3.6,1.4,0.2,Iris-setosa
使用 sklearn.model_selection.train_test_split按比例随机划分训练集和测试集
train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集、测试集特征(5.1,3.5,1.4,0.2)和训练集、测试集类型标注(Iris-setosa)。
方法说明:
X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.3, random_state=0)
主要参数解释:
随机数种子:
其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到随机数组是一样的。但填0或不填,每次都不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。
实现方式
随机划分出训练集和测试集后,使用
preprocessing.MinMaxScaler()对训练集、测试集每类特征值进行了归一化处理(按列归一化)。
为了方便查看,我们选取了样本集中的15个样本进行了随机划分,test_size =0.8 ,即80%为训练集、20%为测试集,划分结果如下:
使用 sklearn.model_selection.StratifiedKFold分层采样,确保训练集,测试集中各类别样本的比例与原始数据集中相同。
对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果。
最先我们用训练准确度(用全部数据进行训练和测试)来衡量模型的表现,这种方法会导致模型过拟合;为了解决这一问题,我们将所有数据分成训练集和测试集两部分,我们用训练集进行模型训练,得到的模型再用测试集来衡量模型的预测表现能力,这种度量方式叫测试准确度,这种方式可以有效避免过拟合。
但测试准确度的一个缺点是其样本准确度是一个高方差估计(high varianceestimate),所以该样本准确度会依赖不同的测试集,其表现效果不尽相同。
StratifiedKFold用法类似Kfold,但是他采用分层采样,能够确保训练集,测试集中各类别样本的比例与原始数据集中相同。将全部训练集S分成n_splits=k个不相交的子集,假设S中的训练样例个数为m,那么每一个自己有m/k个训练样例,相应的子集为{s1,s2,…,sk}。每次从分好的子集里面,拿出一个作为测试集,其他k-1个作为训练集,在k-1个训练集上训练出学习器模型,把这个模型放到测试集上,得到分类率的平均值,作为该模型或者假设函数的真实分类率。
参数说明
实现
为了方便查看,我们选取了样本集中的15个样本进行分层采样交叉切分,划分了5个不相交子集,也就是5组训练/测试集,其中部分结果如下:
若对你有所帮助,欢迎大家评论、留言、关注,感谢支持!
关联阅读
Python sklearn各分类算法及调参调优(一)
Python sklearn各分类算法及调参调优(二)
Python sklearn各分类算法及调参调优(三)
Python sklearn各分类算法及调参调优(四)
来源:软件测试开发技术栈
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!