1. 交叉验证概述
进行模型验证的一个重要目的是要选出一个最合适的模型, 对于监督学习而言, 我们希望模型对于未知数据的泛化能力强, 所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果.
最先我们用训练准确度 (用全部数据进行训练和测试) 来衡量模型的表现, 这种方法会导致模型过拟合; 为了解决这一问题, 我们将所有数据分成训练集和测试集两部分, 我们用训练集进行模型训练, 得到的模型再用测试集来衡量模型的预测表现能力, 这种度量方式叫测试准确度, 这种方式可以有效避免过拟合.
测试准确度的一个缺点是其样本准确度是一个高方差估计(high varianceestimate), 所以该样本准确度会依赖不同的测试集, 其表现效果不尽相同.
2. K 折交叉验证
将数据集平均分割成 K 个等份
使用 1 份数据作为测试数据, 其余作为训练数据
计算测试准确率
使用不同的测试集, 重复 2,3 步骤
对测试准确率做平均, 作为对未知数据预测准确率的估计
- sklearn.model_selection.Kfold
- classsklearn.model_selection.KFold(n_splits=3,shuffle=False, random_state=None)
参数:
n_splits
: 默认
3
, 最小为
2
;K 折验证的 K 值
shuffle
: 默认
False;shuffle 会对数据产生随机搅动(洗牌)
random_state : 默认 None, 随机种子
get_n_splits([X, y, groups]) Returnsthe number of splitting iterations in the cross-validator
split(X[, y, groups]) Generateindices to split data into training and test set.
3. sklearn.cross_validation 模块
cross validation 大概的意思是: 对于原始数据我们要将其一部分分为 traindata, 一部分分为 test data.train data 用于训练, test data 用于测试准确率. 在 test data 上测试的结果叫做 validation error. 将一个算法作用于一个原始数据, 我们不可能只做出随机的划分一次 train 和 testdata, 然后得到一个 validation error, 就作为衡量这个算法好坏的标准. 因为这样存在偶然性. 我们必须多次的随机的划分 train data 和 test data, 分别在其上面算出各自的 validation error. 这样就有一组 validationerror, 根据这一组 validationerror, 就可以较好的准确的衡量算法的好坏. crossvalidation 是在数据量有限的情况下的非常好的一个 evaluate performance 的方法. 而对原始数据划分出 train data 和 testdata 的方法有很多种, 这也就造成了 cross validation 的方法有很多种.
主要函数:
- # 交叉验证例子
- import numpy as np
- from sklearn.model_selection import KFold
- X= np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
- y= np.array([1, 2, 3, 4])
- kf= KFold(n_splits=2)
- kf.get_n_splits(X)# 给出 K 折的折数, 输出为 2
- print(kf)
- # 输出为: KFold(n_splits=2, random_state=None,shuffle=False)
- for train_index, test_index in kf.split(X):
- print("TRAIN:",train_index, "TEST:", test_index)
- X_train,X_test = X[train_index], X[test_index]
- y_train,y_test = y[train_index], y[test_index]
- # 输出: TRAIN: [2 3] TEST: [0 1]
- #TRAIN: [0 1] TEST: [2 3]
- #
来源: http://www.bubuko.com/infodetail-2668586.html