将数据集切分成“训练-测试数据集”和交叉验证

如何将数据集划分为测试数据集和训练数据集?

把数据集分为两部分:分别用于训练和测试

sklearn提供一个将数据集切分成训练集和测试集的函数。

from sklearn.cross_validation import train_test_split
Xd_train,Xd_test,y_train,y_test=train_test_split(X_d,y,random_state=14)


得到两个数据集,训练集Xd_train 和测试集Xd_test。y_train和y_test分别是以上两个数据集的类别信息。

train_test_split功能:

从样本中随机的按比例选取train data和test data。调用形式为:
X_train, X_test, y_train, y_test = cross_validation.train_test_split(train_data, train_target, test_size=0.4, random_state=0)
test_size是样本占比。如果是整数的话就是样本的数量。默认把数据集的25%作为测试集
random_state是随机数的种子。不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。

sklearn包中cross validation的介绍:http://scikit-learn.org/stable/modules/cross_validation.html


或者

def SplitDatat(data,M,k,seed):
	test=[]
	train=[]
	random.seed(seed)
	for user,iter in data:
		if random.randint(0,M)==k:
			test.append([user,item])
		else:
			train.append([user,item])
	return trian,test
此方法,每次选取不同的k(0

如何解决一次性测试带来的问题?——交叉验证

既然只切一次有问题,那就多切几次,多进行几次实验。每次切分时,都要保证这次得到的训练集和测试集与上次不一样。

sklearn提供几种交叉验证方法。

from sklearn.cross_validation import cross_val_score
scores=cross_val_score(estimator,X,y,scoring='accuracy')
cross_validation默认是使用K Fold方法切分数据集。它大体上保证切分后得到的子数据集中类别分布相同,以避免某些子数据集出现类别分布失衡的情况。






你可能感兴趣的:(Python,数据集)