您需要应用于数据的最重要的转换之一是特性缩放。除了少数例外, 输入的数值属性有非常不同的尺度时,机器学习算法的表现都不太好。住房数据的情况就是这样的:房间(rooms)的总数从6个到39,320个不等,而收入中值仅为0到15这个区间。注意,通常不需要缩放目标值(即label).
有两种常见的方法可以使所有属性具有相同的规模:min-max缩放和标准化[standardization]。
Min-max缩放(许多人称之为规范化[normalization])非常简单:值被移动并被重新缩放,量化后的特征将分布在 [0,1] 区间。实现的公司如下:
Scikit-Learn提供了一个名为MinMaxScaler的转换器。它有一个feature_range超参数,如果你不想是0-1的话,你可以改变它的范围。
标准化[standardization]则是完全不同的:首先它减去平均值(因此标准化的平均值总是0),然后除以方差,从而得到结果分布的单位方差。与min-max缩放不同的是,标准化并没有将值绑定到特定的范围,对于某些算法来说,这可能是个问题(例如,神经网络通常期望输入值从0到1),但是,标准化受异常值的影响却要小得多。例如,假设一个地区的收入中值等于100(错误地)。Min-max缩放将会将所有0-15的其他值(收入的区间就是0~15)压到0-0.15,而标准化不会受到太大的影响。Scikit-Learn提供了一个称为StandardScaler的转换器,用于标准化[standardization]缩放。
与所有的转换一样,秩序需要满足对于训练数据的缩放,而不是对于完整的数据集(即包括测试集)的缩放。只有这样,您才能使用它们来转换训练集和测试集(以及新数据)。