使用交叉验证的原因:
(1)样本数量比较少,当划分了训练集和测试集后,用于模型训练的样本就更少了
(2)训练集和测试集的不同划分,会导致不同的模型性能结果
K折验证
K折交叉验证就是将样本数据集划分为大小相同的K个分区,对每个分区i再剩余的k-1个分区上训练模型,然后在分区i上评估模型,最终分数等于K个分数的平均值,使用平均值来消除训练集和测试集的划分影响。
使用Numpy模拟机器学习的交叉验证算法
模拟一个样本数据集
import numpy as np
sample=np.arange(36).reshape(9,4)#创建了9个样本,每个样本4个特征
#使用numpy实现k层划分 假设进行4层划分
k=4
k_sample_count=sample.shape[0]//k
#遍历每层划分的训练集和测试集
for fold in range(k):
validation_start=k_sample_count*fold
validation_end=k_sample_count*(fold+1)
validation_data=sample[validation_start:validation_end]
#将除算选的验证样本集外,其他的样本重新堆叠成一个数据为训练集
train_data=np.vstack([sample[:validation_start],sample[validation_end:]])
print("####第",fold,"折划分结果######")
print("验证集",validation_data)
print("训练集",train_data)
结果显