由于Kaggle提供了训练集和测试集,我想知道一种从该训练集生成验证集(开发集)的方法。
目标是拥有三套:
-训练集+验证集= Kaggle的训练集
-测试集= Kaggle的测试集
事实是,验证集必须与测试集具有相同的分布。我想知道是否存在一种(简单的)方式来生成尊重该属性的验证集。我正在使用Python 3进行编码,如果这可以帮助您回答我。
非常感谢
答案 0 :(得分:0)
将训练数据分为训练和验证集的最简单方法是使用sklearn中的train_test_split方法。
from sklearn.model_selection import train_test_split
train_set, val_set = train_test_split(train_data, test_size=0.2)
但是,数据拆分将随机发生,并且不能确保类或某些其他功能的均等分布。假设我们要根据目标标签的分布进行拆分(例如-train_data ['y'])。然后我们应该改用StratifiedShuffleSplit。
from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2)
for train_index, val_index in split.split(train_data, train_data['y']):
strat_train_data = train_data.loc[train_index]
strat_val_data = train_data.loc[val_index]
在这种情况下,训练数据将分为训练集和验证集,并且在strat_train_data
和strat_val_data
中'y'的分布将相似。如果我们希望基于特定功能(例如性别,收入组等)进行拆分,请相应地替换split()函数的y参数。