Numpy实现机器学习交叉验证的数据划分
2021/5/2 10:55:35
本文主要是介绍Numpy实现机器学习交叉验证的数据划分,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Numpy实现K折交叉验证的数据划分
本实例使用Numpy的数组切片语法,实现了K折交叉验证的数据划分
背景:K折交叉验证
为什么需要这个?
在机器学习中,因为如下原因,使用K折交叉验证能更好评估模型效果:
- 样本量不充足,划分了训练集和测试集后,训练数据更少;
- 训练集和测试集的不同划分,可能会导致不同的模型性能结果;
K折验证是什么
K折验证(K-fold validtion)将数据划分为大小相同的K个分区。
对每个分区i,在剩余的K-1个分区上训练模型,然后在分区i上评估模型。
最终分数等于K个分数的平均值,使用平均值来消除训练集和测试集的划分影响;
1. 模拟构造样本集合
用样本的角度解释下data数组:
- 这是一个二维矩阵,行代表每个样本,列代表每个特征
- 这里有9个样本,每个样本有4个特征
这是scikit-learn模型训练输入的标准格式
2. 使用Numpy实现K次划分
for fold in range(k): validation_begin = k_samples_count*fold validation_end = k_samples_count*(fold+1) validation_data = data[validation_begin:validation_end] # np.vstack,沿着垂直的方向堆叠数组 train_data = np.vstack([ data[:validation_begin], data[validation_end:] ]) print() print(f"#####第{fold}折#####") print("验证集:\n", validation_data) print("训练集:\n", train_data)
结果: #####第0折##### 验证集: [[0 1 2 3] [4 5 6 7]] 训练集: [[ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31] [32 33 34 35]] #####第1折##### 验证集: [[ 8 9 10 11] [12 13 14 15]] 训练集: [[ 0 1 2 3] [ 4 5 6 7] [16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31] [32 33 34 35]] #####第2折##### 验证集: [[16 17 18 19] [20 21 22 23]] 训练集: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [24 25 26 27] [28 29 30 31] [32 33 34 35]] #####第3折##### 验证集: [[24 25 26 27] [28 29 30 31]] 训练集: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] [16 17 18 19] [20 21 22 23] [32 33 34 35]]
如果使用scikit-learn,已经有封装好的实现:
from sklearn.model_selection import cross_val_score
这篇关于Numpy实现机器学习交叉验证的数据划分的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-24手把手教你使用MDK仿真调试
- 2024-01-10基于“小数据”的机器学习
- 2024-01-08扩展卡尔曼滤波:提高机器学习性能的利器
- 2023-12-26各种二端口滤波器网络仿真遇到的问题
- 2023-12-14机器学习-搜索技术:从技术发展到应用实战的全面指南
- 2023-12-12机器学习 - 决策树:技术全解与案例实战
- 2023-12-05机器学习-学习率:从理论到实战,探索学习率的调整策略
- 2023-12-04解锁机器学习-梯度下降:从技术到实战的全面指南
- 2023-11-30回归算法全解析!一文读懂机器学习中的回归模型
- 2023-11-30机器学习 - 似然函数:概念、应用与代码实例