【Deep Learning with Python】C3 K-fold & smooth plot
K-fold
k交叉验证。适用于小数据集。
简单来说就是防止某一次切分对数据结果影响很大,解决的方式就多切分几次,求均值!
没有使用随机多次切,而是直接分成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系列
平滑数据,忽略异常点
这样的数据,看不出重点变化。采取的方法是
- 舍弃前面很高的异常点
- 平滑数据,使用的是类似momentum算法,用指数代替均值
实现如下:
kaggle还有一种策略,每次k-fold都随机,最后取平均。