【Deep Learning with Python】C3 K-fold & smooth plot

K-fold

k交叉验证。适用于小数据集。

简单来说就是防止某一次切分对数据结果影响很大,解决的方式就多切分几次,求均值!

【Deep Learning with Python】C3 K-fold & smooth plot

没有使用随机多次切,而是直接分成k组。

实现如下,直接舍弃了末尾部分,不做验证。

k=4

num_val_samples=len(train_data)//k

num_epochs=100

For I in range(k):

print('processingfold#',i)

val_data=train_data[i*num_val_samples:(i+1)*num_val_samples]

val_targets=train_targets[i*num_val_samples:(i+1)*num_val_samples]

partial_train_data=np.concatenate(

[train_data[:i*num_val_samples],

train_data[(i+1)*num_val_samples:]],

axis=0)

partial_train_targets=np.concatenate(

[train_targets[:i*num_val_samples],

train_targets[(i+1)*num_val_samples:]],

axis=0)

model=build_model()

model.fit(partial_train_data,partial_train_targets,

epochs=num_epochs,batch_size=128,verbose=0)

val_mse,val_mae=model.evaluate(val_data,val_targets,verbose=0)

all_scores.append(val_mae)

 

plot系列

平滑数据,忽略异常点

【Deep Learning with Python】C3 K-fold & smooth plot

这样的数据,看不出重点变化。采取的方法是

  1. 舍弃前面很高的异常点
  2. 平滑数据,使用的是类似momentum算法,用指数代替均值

实现如下:

【Deep Learning with Python】C3 K-fold & smooth plot

kaggle还有一种策略,每次k-fold都随机,最后取平均。