网站首页 > 技术文章 正文
在Python机器学习实践中,数据集划分是构建有效模型的重要步骤之一。通常会将原始数据集划分为训练集、验证集和测试集:
1. 训练集 (Training Set):这是模型学习的基础。模型通过在训练集上迭代优化其参数来学习数据的内在规律。
# 使用sklearn库中的train_test_split函数划分训练集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 在这里,X是特征数据,y是对应的标签,test_size指定了测试集的比例(如20%),random_state确保结果可复现。
2. 验证集 (Validation Set):用于调整模型参数(如正则化强度、学习率等)和选择模型(例如,在交叉验证中比较不同模型的表现)。为了自动化这一过程并避免过拟合,可以使用交叉验证方法(如KFold)。
# 使用KFold进行交叉验证
from sklearn.model_selection import KFold
kfold = KFold(n_splits=5, shuffle=True, random_state=42)
for train_index, val_index in kfold.split(X_train):
X_train_cv, X_val = X_train[train_index], X_train[val_index]
y_train_cv, y_val = y_train[train_index], y_train[val_index]
3. 测试集 (Test Set):在所有超参数调优完成后,使用未参与训练和验证过程的数据评估模型的泛化能力。
如果没有单独划分验证集,而是采用交叉验证的方式,那么剩余的X_test和y_test就构成了最终的测试集。
对于大型项目或深度学习应用,有时还会进一步细分,比如:
? 保留一部分数据作为最后的测试集(Holdout Test Set),在整个模型开发结束后一次性评估最终模型性能,以保证评估结果不受模型选择和调优的影响。
? 在Keras、PyTorch等框架中,常常会在训练过程中直接划分一个比例较小的验证集(validation set),这可以通过设置验证数据占总数据的比例或者特定数量的批次来实现。
以下是一个简单的例子,演示如何使用train_test_split同时创建训练集和测试集,并且手动从训练集中再次划分出验证集:
# 假设我们有一个完整的大数据集df
from sklearn.model_selection import train_test_split
# 划分出80%作为训练+验证,20%作为测试
X_full, X_test, y_full, y_test = train_test_split(df.drop('target', axis=1), df['target'], test_size=0.2, random_state=42)
# 再从训练部分划分出验证集
X_train, X_val, y_train, y_val = train_test_split(X_full, y_full, test_size=0.2 / 0.8, random_state=42)
在实际操作中,根据项目的特性和需求,数据划分的具体策略可能会有所不同。
留言区欢迎大家讨论[比心][比心]
猜你喜欢
- 2024-10-14 程序员用PyTorch实现第一个神经网络前做好这9个准备,事半功倍
- 2024-10-14 PyTorch 分布式训练简明教程 pytorch分批训练
- 2024-10-14 PyTorch入门与实战——必备基础知识(下)01
- 2024-10-14 深度学习pytorch深度学习入门与简明实战教程2022年
- 2024-10-14 深度学习框架PyTorch-trick 集锦 深度学习框架pytorch:入门与实践 第2版
- 2024-10-14 AI | 图神经网络-Pytorch Biggraph简介及官方文档解读
- 2024-10-14 PyTorch入门与实战——数据处理与数据加载02
- 2024-10-14 改动一行代码,PyTorch训练三倍提速,这些「高级技术」是关键
- 2024-10-14 利用pytorch CNN手写字母识别神经网络模型识别手写字母
- 2024-10-14 加快Python算法的四个方法(一)PyTorch
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)