把数据集分为两部分:分别用于训练和测试
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)
从样本中随机的按比例选取train data和test data。调用形式为:
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<k<=M-1)和相同的随机种子seed,进行M次试验就可以得到M个不同的训练集和测试集了,然后分别进行试验,用M次实验的平均值作为最后的评测指标。来防止某次实验结果是过拟合的结果。
既然只切一次有问题,那就多切几次,多进行几次实验。每次切分时,都要保证这次得到的训练集和测试集与上次不一样。
sklearn提供几种交叉验证方法。
from sklearn.cross_validation import cross_val_score
scores=cross_val_score(estimator,X,y,scoring='accuracy')cross_validation默认是使用K Fold方法切分数据集。它大体上保证切分后得到的子数据集中类别分布相同,以避免某些子数据集出现类别分布失衡的情况。