处理过拟合问题
通过在原本的数据集当中,添加全零维度,我们可以创建新的数据集
我们也能够使得原本的数据集被添加一些白噪声,这会使得原有的数据多了一些杂乱的信息
在添加全零内容至数据集中时,这些内容不但不会影响原有数据所包含的信息,并且能够由此来减轻一些模型训练时的过拟合情况
添加了噪声通道的数据集其中的噪声特征不可避免地会导致过拟合,因此当我们不确定特征究竟是有用的还是无关紧要的时候可以先在训练前进行特征选择操作,由此筛选那些有用的特征。
例如:在文本文件中选取出现频率最高的10000个单词
降低过拟合时,如果无法获取更多数据,次优解决办法就是调节模型允许存储的信息量,或对模型曲线平滑度添加约束。这种降低过拟合的方法叫作正则化
几种验证模型精确度的方法
1 简单的留出验证
留出一部分数据作为测试集,在其余数据(训练集和验证集)上训练模型
np.random.shuffle(data)
利用以上代码,我们在每次分割数据集之前都先将数据打乱(一般情况时)
但如果在数据集中数据过少的时候利用该方法,可能会导致我们多次训练最终得到的模型性能差异过大,由此我们需要寻求新的验证方法
2 K折交叉验证
K折交叉验证,将数据划分为K个大小相等的分区。对于每一个分区i,我们会在剩余的K-1个分区上训练模型,然后我们在分区i上评估模型。
最终我们得到的分数是这K个分数的平均值。对于不同的训练集-测试集划分,如果模型的性能变化很大,这种方法会很有效果
k = 3
num_validation_samples = len(data) // k
np.random.shuffle(data)
validation_scores = []
for fold in range(k):
validation_data = data[num_validation_samples * fold:
num_validation_samples * (fold + 1)]
training_data = np.concatenate(
data[:num_validation_samples * fold],
data[num_validation_samples * (fold + 1) :])
model = get_model()
model.fit(training_data, ...)
validation_score = model.evaluate(validation_data, ...)
validation_scores.append(validation_score)
validation_score = np.average(validation_scores)
model = get_model()
model.fit(data, ...)
test_score = model.evaluate(test_data, ...)