特征缩放与交叉验证

805 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

一、特征缩放

如果某个特征的取值范围比其他特征大很多,那么数值计算(比如说计算欧式距离)就受该特征的主要支配。但实际上并不一定是这个特征最重要,通常需要把每个特征看成同等重要。归一化/标准化数据可以使不同维度的特征放在一起进行比较,可以大大提高模型的准确性。而且,在使用梯度下降法求解最优化问题时, 归一化/标准化数据后可以加快梯度下降的求解速度。

(一)数据归一化

数据归一化就是把数据的取值范围处理为0-1或者-1-1之间。

任意数据转化为0-1之间

newValue = (oldValue-min)/(max-min)

任意数据转化为-1-1之间

newValue = ((oldValue-min)/(max-min)-0.5)*2

(二)均值标准化

均值标准化就是将数值范围缩放到 [-1, 1] 区间里,且数据的均值变为0。

设x为特征数据,u为数据的平均值,s为数据的方差

newValue = (oldValue-u)/s

(三)特征缩放的注意事项

需要先把数据拆分成训练集与验证集,在训练集上计算出需要的数值(如均值和标准值),对训练集数据做标准化/归一化处理(不要在整个数据集上做标准化/归一化处理,因为这样会将验证集的信息带入到训练集中),然后再用之前计算出的数据(如均值和标准值)对验证集数据做相同的标准化/归一化处理。

二、交叉验证(Cross-Validation

在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果。一种最简单的方法就是:把整个数据集分为两部分,一部分用于训练作为训练集(training set),一部分用于验证作为测试集(test set)。但这种方法存在两个弊端:

1、最终模型与参数的选取将极大程度依赖于你对训练集和测试集的划分方法。也就是说,如果我们的训练集和测试集的划分方法不够好,很有可能无法选择到最好的模型与参数。

2、该方法只用了部分数据进行模型的训练。我们知道,当用于模型训练的数据量越大时,训练出来的模型通常效果会越好。所以训练集和测试集的划分意味着我们无法充分利用我们手头已有的数据,所以得到的模型效果也会受到一定的影响。

基于这些背景,就提出了交叉验证的方法。 交叉验证的基本思想就是重复使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。

交叉验证用在数据不是很充足的时候。如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。