如何在Python中将数据集划分为训练集、测试集和验证集?

7

我有这样的一个数据集

my_data= [['Manchester', '23', '80', 'CM',
  'Manchester', '22', '79', 'RM',
  'Manchester', '19', '76', 'LB'],
 ['Benfica', '26', '77', 'CF',
  'Benfica', '22', '74', 'CDM',
  'Benfica', '17', '70', 'RB'],
 ['Dortmund', '24', '75', 'CM',
  'Dortmund', '18', '74', 'AM',
  'Dortmund', '16', '69', 'LM']
]

我知道使用sklearn.cross_validation中的train_test_split函数,并已经尝试过以下代码:

from sklearn.model_selection import train_test_split
train, test = train_test_split(my_data, test_size = 0.2)

现有的结果只是将数据分为测试集和训练集,我希望将其分成三个不同的集合,并随机分配数据。

期望结果: 测试集,训练集,验证集


1
train_test_split会将你的数据集分成训练集和验证集。不要被名称所迷惑。测试数据应该是你不知道输出变量的地方。 - Sociopath
2个回答

11

你可以简单地使用train_test_split两次

X_train, X_test, y_train, y_test 
    = train_test_split(X, y, test_size=0.2, random_state=1)

 X_train, X_val, y_train, y_val 
    = train_test_split(X_train, y_train, test_size=0.25, random_state=1)

此外,答案可以在这里找到。


4

可以使用numpy+pandas来实现,见下方脚本将0.6 + 0.2 + 0.2拆分:

train_size = 0.6
validate_size = 0.2
train, validate, test = np.split(my_data.sample(frac=1), [int(train_size * len(my_data)), int((validate_size + train_size) * len(my_data))])

我收到了错误信息:“list”对象没有“sample”属性。 - dede.brahma
my_data 应该是一个 pandas DataFrame。 - Raymond Reddington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接