您的位置:首页 > 其它

训练集、验证集、测试集、交叉验证

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次。
       留一法交叉验证适用于小样本的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: