交叉验证(Cross Validation)方法思想
Cross Validation一下简称CV。CV是用来验证分类器性能的一种统计方法。
思想:将原始数据(dataset)进行分组,一部分作为训练集(train set),另一部分作为验证集(validation set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来作为评价分类器的性能指标。
常用CV方法:
Hold-Out Method
将原始数据随机分为两组,一组作为训练集,一组作为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为Hold-OutMethod下分类器的性能指标。
由于是随机的将原始数据分组,所以最后验证分类准确率的高低与原始数据的分组有很大关系,这种方法 得到的结果不具有说服性。
K-fold Cross Validation(记为K-CV)
将原始数据分为K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型的验证集的分类准确率的平均数作为K-CV分类器的性能指标。
Leave-One-Out Cross Validation(记为LOO-CV)
留一验证(LOOCV)意指只使用原本样本中的一项来当做验证集, 而剩余的则留下来当做训练集。 这个步骤一直持续到每个样本都被当做一次验证集。
LOO-CV有两个明显的优点:
- 每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。
- 实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
LOO-CV的缺点:
计算成本高,因为需要建立的模型数量与原始数据样本数量相同。
主要函数:
函数:
sklearn.cross_validation.cross_val_score
调用形式:
sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None, cv=None,n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')
返回值就是对于每次不同的划分raw data(未加工的数据)时,在test data上得到的分类的准确率。
参数解释:
estimator:不同的分类器,可以是任何分类器。比如支持向量机分类器:estimator = svm.SVC(kernel = 'linear', C = 1)
(kernel:核心 linear:直线)
cv:代表不同的cross validation的方法。如果cv是一个int值,并且提供rawtarget参数,那么就代表使用StratifiedKFold分类方式;如果cv是一个int值,并且没有提供rawtarget参数,那么就代表使用KFold分类方式;也可以给它一个cv迭代策略生成器,指定不同的cv方法。
scoring:默认None,准确率的算法,可以通过score_func参数指定;如果不指定的话,是用estimator默认自带的准确率方法。