k折交叉验证法_K折交叉检验法及其Python代码实现

3078e8f8cbd0ee4e0f1ebb14ae67cf3f.png

在机器学习的建模工作中,首先会将数据集分为训练集和测试集,在训练集上对模型进行训练以及参数的调优,在测试集上对模型进行评估,但是测试集的选择会对模型的效果产生影响,在随机切分训练集/测试集的情况下,可能刚好选择了比较容易预测的数据点作为测试集,所以采用交叉验证(cross validation)的方式,通过获取模型在多个测试集上的平均效果来总体评估模型的效果。

而交叉验证中常用的方法K折交叉检验法(k-fold cross validation)用于模型调优,可以缓解过拟合现象的产生,具体实现方法:

将样本数据集分为k组大小相似的互斥子集,每次抽取出k份中的一份作为测试集,剩下来的k-1份作为训练集,尽量保证每个子集数据分布的一致性。依次得到测试结果S1,S2,...,Sk,然后求其平均值得到模型在多个测试集上的平均效果,用求得的平均值评估模型的总体效果。

12f567824bd32416ee66789e9381a81c.png

(图中红色的部分为每次从样本数据集中抽取出来作为测试集的部分。)

import 

f66bd4942f4ae93238b0f3f4709fb889.png

第一步是导入模块和加载数据。

# 测试集和训练集的拆分
# 将输入模型的特征x和目标属性Y切分出来
X = df1.iloc[:,2:4] 
Y = df1.iloc[:,5]


#数据分为 训练集 和 测试集
kf = KFold(n_splits = 10)
for train,valid in kf.split(X):
    print("train:%s,valid:%s"%(train,valid))

f5250ad3b40c305bdff80c0cba725643.png

这里K = 10,由此获取到了10组训练集+测试集,大大缓解了过拟合现象的产生。

### 使用交叉验证评估 PaddleOCR 模型性能 #### 背景介绍 PaddleOCR 是基于飞桨 (PaddlePaddle) 的开源 OCR 工具包,支持多种文字检测和识别任务。为了更全面地评估其模型的泛化能力,可以采用交叉验证技术来替代传统的单一训练/测试分割方式[^1]。 #### 实现步骤概述 以下是实现交叉验证的具体方案: 1. **数据准备** 将用于训练的数据集划分为 k 个子集(通常称为数),这些子集应尽可能保持类别分布的一致性以减少偏差。例如,在处理中文字符图像时,需注意不同字体或风格的比例平衡。 2. **定义实验流程** 对于每一轮迭代 i (i=1, ..., k): - 把第 i 个子集作为当前轮次中的验证集; - 剩余的 k-1 子集组合成新的训练集合; 3. **执行多次训练与评测** 利用上述划分好的数据分别完成多个版本的模型构建过程,并记录每次运行后的表现指标如准确率、召回率等数值。 4. **汇总分析结果** 计算所有回合所得度量平均值得到最终评价分数,从而获得关于目标算稳健性的更多信息。 #### 示例代码展示 下面给出一段 Python 示例脚本说明如何操作: ```python import paddleocr as ocr_tool from sklearn.model_selection import KFold def cross_validate_paddle_ocr(data, labels, folds=5): kf = KFold(n_splits=folds) accuracies = [] recalls = [] for train_index, val_index in kf.split(data): X_train, X_val = data[train_index], data[val_index] y_train, y_val = labels[train_index], labels[val_index] model = ocr_tool.PPOCRv3() # 初始化PaddleOCR模型实例 # 进行训练... predictions = model.predict(X_val) accuracy = calculate_accuracy(y_val, predictions) recall = calculate_recall(y_val, predictions) accuracies.append(accuracy) recalls.append(recall) avg_accuracy = sum(accuracies)/len(accuracies) avg_recall = sum(recalls)/len(recalls) return {"average_accuracy":avg_accuracy,"average_recall":avg_recall} # 假设已加载好data和labels变量 results = cross_validate_paddle_ocr(data, labels) print(f"Avg Accuracy:{results['average_accuracy']}, Avg Recall:{results['average_recall']}") ``` 此段伪代码展示了通过 `KFold` 方来进行标准k倍交叉验证的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值