如何在划分训练测试集时指定特定数据点纳入训练集?
数据集划分实现方案
核心思路
先将数据集拆分为「主数据集(除最后15个数据)」和「强制纳入训练集的15个数据」,从主数据集中抽取总数据量25%的样本作为测试集,最后把主数据集的训练部分和强制纳入的15个数据合并为最终训练集,确保划分比例符合要求。
代码实现(以Python+Scikit-learn为例)
1. 无标签数据集场景
from sklearn.model_selection import train_test_split import numpy as np # 假设标准化后的完整数据集为 scaled_dataset,已提取最后15个到 ABS_FOR_TRAINING main_dataset = scaled_dataset[:-15] # 计算总样本量和测试集大小(总数据的25%) total_samples = len(scaled_dataset) test_size = int(total_samples * 0.25) # 从主数据集中拆分测试集和主训练部分 main_train, test_set = train_test_split(main_dataset, test_size=test_size, random_state=42) # 合并主训练部分与强制纳入的15个数据,得到最终训练集 final_train_set = np.vstack([main_train, ABS_FOR_TRAINING])
2. 带标签的特征-标签场景
如果是特征(X)和标签(y)分离的数据集,逻辑一致:
from sklearn.model_selection import train_test_split import numpy as np # 假设标准化特征为 X_scaled,标签为 y,已提取最后15个特征到 ABS_FOR_TRAINING X_main = X_scaled[:-15] y_main = y[:-15] X_abs = ABS_FOR_TRAINING y_abs = y[-15:] total_samples = len(X_scaled) test_size = int(total_samples * 0.25) # 拆分主数据集的训练/测试部分 X_main_train, X_test, y_main_train, y_test = train_test_split( X_main, y_main, test_size=test_size, random_state=42 ) # 合并得到最终训练集 X_train = np.vstack([X_main_train, X_abs]) y_train = np.hstack([y_main_train, y_abs])
3. Pandas DataFrame场景
如果数据集是DataFrame格式,用pd.concat替代np.vstack:
from sklearn.model_selection import train_test_split import pandas as pd main_dataset = scaled_dataset.iloc[:-15] total_samples = len(scaled_dataset) test_size = int(total_samples * 0.25) main_train, test_set = train_test_split(main_dataset, test_size=test_size, random_state=42) final_train_set = pd.concat([main_train, ABS_FOR_TRAINING], axis=0)
关键说明
- 设置
random_state可以固定随机划分结果,保证实验可复现 - 测试集完全从主数据集中抽取,确保最后15个数据不会进入测试集
- 最终训练集 = 主数据集的训练部分 + 强制纳入的15个数据,训练集占总数据的75%,符合要求
内容的提问来源于stack exchange,提问作者JZ0
相关产品推荐
相关产品推荐

