训练集、验证集、测试集、交叉验证
2018-03-09 16:07
357 查看
一、 训练集、验证集和测试集
训练集:训练模型
验证集:模型参数的选择
测试集:最终对模型方法的评估
模型选择:在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。由于验证集有足够多的数据,用它对模型选择是有效的。
下面将训练集和测试集按照7:3进行划分,并用SVM算法预测Iris的分类效果import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn import datasets
iris=datasets.load_iris() #iris中分为data和target两个数组
iris.data.shape,iris.target.shape #(150, 4), (150,))
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)
X_train.shape, X_test.shape #((105, 4), (45, 4)) 训练集和测试集的feature
y_train.shape, y_test.shape #((105,), (45,)) 训练集和测试集的label
clf=svm.SVC(kernel='linear',C=1).fit(X_train,y_train)
clf.score(X_test,y_test) #0.97...
二、 交叉验证
2.1 什么是交叉验证?
交叉验证的基本思想就是重复的使用数据;把数据进行切分,将数据分为训练集和测试集,在此基础上反复地进行训练、测试以及模型选择。
2.2 交叉验证的作用是什么?
1、交叉验证可以评估模型在新数据上的表现,如果训练集和测试集预测效果比较大,则模型存在一定过拟合的可能。
2、当数据集不充足的时候,可以选择这种训练方式,获取数据中更多的有用信息。
3.3 交叉验证的主要方法?
(1)简单交叉验证方法
随机地将原始数据分为训练集和测试集(一般为7:3),然后用训练集在不同的条件下(算法参数的取值不同)训练模型,从而得到多种不同的模型;在测试集上评价这些模型的测试误差,选出测试误差最小的模型。
(2) K折交叉验证
K折交叉验证通过对K个不同的测试集预测结果进行平均来减少方差。
(1) 随机地将原始数据切分为K个互不相交且大小相同的子集。
(2) 每次挑选其中的一份作为测试集,剩下的K-1份作为训练集
(3)重复步骤(2)K次,这样每一个子集都有机会作为训练集,得到K个模型
(4) 用每次的测试集对相应模型进行预测,得到K组评价指标
(5) 计算K组预测结果的平均值作为模型整体的评价指标。
10折交叉验证Iris数据from sklearn.model_selection import cross_val_score
clf= svm.SVC(kernel='linear',C=1)
scores = cross_val_score(clf,iris.data, iris.target, cv=10)
scores #预测准确率:array([ 1 ,0.93333333 ,1 ,1 , 0.86666667 ,1,0.93333333 ,1 ,1 ,1])
print("Accurary:%0.2f"%scores.mean()) #平均预测准确率:Accurary:0.97(3)留一法交叉验证
留一法交叉验证是K折交叉验证的特殊情况。假设样本的容量为N,当K=N的时候,就是留一法交叉验证;也就是说,将原始样本分为N组,每次选择一个样本作为测试集,剩余样本作为训练集。这样留一法交叉验证实验共进行了N次。
留一法交叉验证适用于小样本的情况。
训练集:训练模型
验证集:模型参数的选择
测试集:最终对模型方法的评估
模型选择:在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。由于验证集有足够多的数据,用它对模型选择是有效的。
下面将训练集和测试集按照7:3进行划分,并用SVM算法预测Iris的分类效果import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn import datasets
iris=datasets.load_iris() #iris中分为data和target两个数组
iris.data.shape,iris.target.shape #(150, 4), (150,))
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0)
X_train.shape, X_test.shape #((105, 4), (45, 4)) 训练集和测试集的feature
y_train.shape, y_test.shape #((105,), (45,)) 训练集和测试集的label
clf=svm.SVC(kernel='linear',C=1).fit(X_train,y_train)
clf.score(X_test,y_test) #0.97...
二、 交叉验证
2.1 什么是交叉验证?
交叉验证的基本思想就是重复的使用数据;把数据进行切分,将数据分为训练集和测试集,在此基础上反复地进行训练、测试以及模型选择。
2.2 交叉验证的作用是什么?
1、交叉验证可以评估模型在新数据上的表现,如果训练集和测试集预测效果比较大,则模型存在一定过拟合的可能。
2、当数据集不充足的时候,可以选择这种训练方式,获取数据中更多的有用信息。
3.3 交叉验证的主要方法?
(1)简单交叉验证方法
随机地将原始数据分为训练集和测试集(一般为7:3),然后用训练集在不同的条件下(算法参数的取值不同)训练模型,从而得到多种不同的模型;在测试集上评价这些模型的测试误差,选出测试误差最小的模型。
(2) K折交叉验证
K折交叉验证通过对K个不同的测试集预测结果进行平均来减少方差。
(1) 随机地将原始数据切分为K个互不相交且大小相同的子集。
(2) 每次挑选其中的一份作为测试集,剩下的K-1份作为训练集
(3)重复步骤(2)K次,这样每一个子集都有机会作为训练集,得到K个模型
(4) 用每次的测试集对相应模型进行预测,得到K组评价指标
(5) 计算K组预测结果的平均值作为模型整体的评价指标。
10折交叉验证Iris数据from sklearn.model_selection import cross_val_score
clf= svm.SVC(kernel='linear',C=1)
scores = cross_val_score(clf,iris.data, iris.target, cv=10)
scores #预测准确率:array([ 1 ,0.93333333 ,1 ,1 , 0.86666667 ,1,0.93333333 ,1 ,1 ,1])
print("Accurary:%0.2f"%scores.mean()) #平均预测准确率:Accurary:0.97(3)留一法交叉验证
留一法交叉验证是K折交叉验证的特殊情况。假设样本的容量为N,当K=N的时候,就是留一法交叉验证;也就是说,将原始样本分为N组,每次选择一个样本作为测试集,剩余样本作为训练集。这样留一法交叉验证实验共进行了N次。
留一法交叉验证适用于小样本的情况。
相关文章推荐
- 交叉验证与训练集、验证集、测试集
- xgboost调用sklearn的交叉验证,并且使用自定义的训练集、验证集进行模型的调参
- 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集
- 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集
- 机器学习中训练集、验证集和测试集的关系
- [机器学习] 训练集(train set) 验证集(validation set) 测试集(test set)
- 机器学习中训练集、验证集和测试集的作用
- 如果使用交叉验证,是否还需要单独分出测试集?
- 训练集(train set) 验证集(validation set) 测试集(test set)
- 训练集(train set) 验证集(validation set) 测试集(test set)
- 训练集(train set) 验证集(validation set) 测试集(test set)
- 机器学习: 训练集、验证集、测试集关系
- 机器学习中训练集、验证集(开发集)、测试集如何划分
- 训练集(train set) 验证集(validation set) 测试集(test set)
- 训练集,验证集和测试集
- 训练集(train set) 验证集(validation set) 测试集(test set)
- tensorflow:训练集、测试集、验证集
- 训练集,验证集,测试集区分
- Google---机器学习速成课程(五)-测试集/训练集/验证集Training Test and Validation Sets
- 模式识别之训练集、验证集和测试集