目录
交叉验证原理
交叉验证分类
1.标准交叉验证(s折交叉验证)
代码实现
2.分层交叉验证
代码实现
StratifiedKFold参数
3.留一法交叉验证
代码实现
代码说明
交叉验证原理
交叉验证就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。
交叉验证分类
1.标准交叉验证(s折交叉验证)
s折交叉验证就是将数据集分为大小相等的s份,每次随机选取s-1份作为训练集,剩下的一份为测试集。当一轮完成后,再随机选取s-1份作为训练集,若干轮(小于S)之后,选择损失函数评估最优的模型和参数。
优点:
1.整个数据集可用于训练和验证
缺点:
1.不适合不平衡的数据集(出现图一的情况)
图一:标准交叉验证;
图二:分折交叉验证;
代码实现
from sklearn.model_selection import cross_val_score
score = cross_val_score(model,X, y, cv=5) #进行5轮交叉验证
2.分层交叉验证
根据原始类别比例分割数据集,训练集和测试集中各类别的比例与数据集中各类别的比例相同。
见图二的原理
代码实现#分折交叉验证,会按照原始类别比例分割数据集 from sklearn.model_selection import StratifiedKFold strKFold = StratifiedKFold(n_splits=5,shuffle=True,random_state=0) score = cross_val_score(knn_clf,X, y,cv=strKFold)
StratifiedKFold参数
n_splits:折叠次数,默认为3,至少为2。
shuffle:是否在每次分割之前打乱顺序。
random_state:随机种子,在shuffle==True时使用,默认使用np.random。
StratifiedKFold用法类似Kfold,但是他是分层采样,确保训练集,测试集中各类别样本的比例与原始数据集中相同。
3.留一法交叉验证
对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。(往往在数据量非常少的时候使用)
优点:
1.每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠;
2.实验没有随机因素,整个过程是可重复的;
缺点:
1.计算成本高;
代码实现#留一法交叉验证 from sklearn.model_selection import LeaveoneOut loout = LeaveoneOut() score = cross_val_score(knn_clf,X, y,cv=loout)
LeaveoneOut()进行留一交叉验证。
代码说明
from sklearn.model_selection import cross_val_score
cross_val_score(estimator,
X,
y=None,
groups=None,
scoring=None,
cv=None,
verbose=0,
fit_params=None,
pre_dispatch='2*n_jobs')
estimator:选用的学习器的实例对象,包含“fit”方法;
X :特征数组
y : 标签数组
groups:如果数据需要分组采样的话
scoring :评价函数
cv:交叉验证的k值,当输入为整数或者是None,估计器是分类器,y是二分类或者多分类,采用StratifiedKFold 进行数据划分
fit_params:字典,将估计器中fit方法的参数通过字典传递
转载自:
https://blog.csdn.net/weixin_42399856/article/details/81082971



