700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > k折交叉验证(原理+python实现)

k折交叉验证(原理+python实现)

时间:2020-10-27 15:53:31

相关推荐

k折交叉验证(原理+python实现)

交叉验证用于数据集的数据量不充足情况,将数据集分成训练集、验证集、测试集。

k折交叉验证,将数据集先分为训练集与测试集,再把训练集分成k份(大小相等)。其中,k-1份作为训练集训练模型,剩下的1份作为验证集进行模型的评估,把k次评估指标的平均值作为最终的评估指标。

以5折交叉验证,数据集大小6000为例:

1.将数据集分为5000训练,1000测试;

2.5折交叉验证时,把训练集分成等大小的5份,每份大小1000;

如图:

3.k折遍历k次,5折遍历5次。第一次把第1份作为验证集(最前面1000个),剩下4份作为训练集;第二次把第2份作为验证集,第1、3、4、5份作为验证集。以此类推,第5次将第5份做为验证集、第1、2、3、4份作为训练集;

4.5次评估指标的平均值作为最终的评估指标。

以下是代码实现:

#5折交叉验证k = 5mun_validation_samples = len(x_Train_normaliza) // k#np.random.shuffle(x_Train_normaliza) #validation_score = []sum=0import randomfor fold in range(k):validation_data = x_Train_normaliza[mun_validation_samples*fold:mun_validation_samples*(fold+1)]validation_data_label=y_Trainonehot[mun_validation_samples*fold:mun_validation_samples*(fold+1)]a=x_Train_normaliza[:mun_validation_samples * fold]b=x_Train_normaliza[mun_validation_samples * (fold+1):]training_data=np.append(a,b,axis=0)c=y_Trainonehot[:mun_validation_samples*fold]d= y_Trainonehot[mun_validation_samples*(fold+1):]training_label=np.append(c,d,axis=0)#training_label=y_Trainonehot[:mun_validation_samples*fold] + y_Trainonehot[mun_validation_samples*(fold+1):]#打散数据index = [i for i in range(len(training_data))] random.shuffle(index)data = training_data[index]label = training_label[index]#开始训练train_history=model.fit(x=data, #使用model.fit进行训练,训练过程存储在train_history变量里y=label,epochs=2,batch_size=200,#每次处理200张verbose=2)#显示训练过程#model.train(training_data)validation_score = model.evaluate(validation_data,validation_data_label)validation_score_accuracy=validation_score[1]sum=sum+validation_score_accuracyprint('validation_score=',validation_score_accuracy)validation_score_average=sum/kprint('validation_score_average',validation_score_average)

若想10折或其他折,将k=5改为k=10或其他想要的折

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。