计算机系统应用教程网站

网站首页 > 技术文章 正文

Python机器学习之数据划分(持续更新)

btikc 2024-10-14 08:48:41 技术文章 3 ℃ 0 评论

在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)

在实际操作中,根据项目的特性和需求,数据划分的具体策略可能会有所不同。

留言区欢迎大家讨论[比心][比心]

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表