我有一个大型数据集,想要将数据集随机分成70%的列车,25%的测试和5%的开发。如何使用scikit-learn在Python中执行此操作?
我想知道我们是否使用sklearn.cross_validation.train_test_split(* arrays,** options)函数执行此操作,如以下链接中的示例所示?
http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_test_split.html
答案 0 :(得分:2)
您可以使用:
from numpy.random import multinomial
n_total_samples = 1000 # or whatever it is
indices = np.arange(n_total_samples)
inds_split = multinomial(n=1,
pvals=[0.7, 0.25, 0.05],
size=n_total_samples).argmax(axis=1)
train_inds = indices[inds_split==0]
test_inds = indices[inds_split==1]
dev_inds = indices[inds_split==2]
print len(train_inds) / float(n_total_samples) # => 0.713
print len(test_inds) / float(n_total_samples) # => 0.24
print len(dev_inds) / float(n_total_samples) # => 0.047
它没有内置功能那么漂亮,但我相信它能满足您的需求。
答案 1 :(得分:2)
好问题 - 可以使用sklearn使用两个连续分割来完成:
import numpy as np
from sklearn.cross_validation import train_test_split
X = np.random.random((10000, 10))
y = np.random.random(10000)
test_size = 0.25
holdout_size = 0.05
X_train, X_temp, y_train, y_temp = train_test_split(X, y,
test_size = test_size + holdout_size)
X_test, X_holdout, y_test, y_holdout = train_test_split(X_temp, y_temp,
test_size = holdout_size / (test_size + holdout_size))
print len(X_train) # => 7000
print len(X_test) # => 2499
print len(X_holdout) # => 501
答案 2 :(得分:1)
为什么不只是一个简单的random.shuffle?然后根据您的需要将其切片。
应该是这样的:
import random
random.shuffle(yourTestSet)
顾名思义,将随机重新排列您的样本。
train_set, test_set, dev_set = yourTestSet[:70], yourTestSet[70:95], yourTestSet[95:]
以上代码适用于100个样本,根据需要调整数字或使用len()* x,如果您不知道确切的大小。
编辑:fafnir1990在评论中建议。