为已训练LibSVM分类器准备数据:新数据是否需缩放及重训?
问题解答
核心结论
- 必须对新特征数据执行完全相同的特征缩放(注意要用训练集的
min x和max x,而非新数据的) - 完全不需要重新训练模型
详细解释
为什么必须缩放新数据?
你训练LibSVM时,模型的参数(比如支持向量、分类超平面)是基于缩放后[-1,1]区间的特征学习得到的。如果新数据不做同样的缩放,特征的数值范围和分布会和训练时完全脱节,模型根本无法给出准确的预测结果。举个例子:假设训练时某个特征的范围是[0,100],缩放后变成[-1,1],模型学到的这个特征权重是适配[-1,1]的;如果新数据里这个特征是500,直接喂给模型的话,相当于模型从未见过这么大的数值,预测肯定会出错。缩放时的关键注意点
缩放新数据时,必须使用训练集计算得到的min x和max x,而不是用新数据本身的极值。也就是说,你需要把训练时每个特征的最小值和最大值保存下来,收到新数据后,用同一个公式:
x'=2\frac{x-\min_{train} x}{\max_{train} x - \min_{train} x}-1
来处理每个特征。如果用新数据的极值重新计算,相当于改变了特征的缩放规则,模型同样会失效。
- 为什么不需要重新训练模型?
特征缩放属于数据预处理步骤,和模型的训练过程是分离的。你已经用预处理好的训练数据得到了符合预期的模型,只要新数据也做了完全一致的预处理,直接用这个训练好的模型预测就可以了。重新训练不仅没必要,反而会浪费计算资源,甚至可能因为新数据量少导致模型性能下降。
内容的提问来源于stack exchange,提问作者eNc
相关产品推荐
相关产品推荐

