
3.3.1 缩放到特定范围的数值
让我们回到本章前述的心脏病数据集。如果你注意的话,这些变量中有很多是取实数值的,这是回归分析的理想选择,如和
。
所有的变量都适合做回归分析。这意味着,从技术上讲,我们可以对任何类型的数字数据进行预测。事实上,对于一些取值为实数值的变量或属性会使得它们更适合回归。例如,该列中的实数值具有超越整数和自然数的含义。
让我们关注和
,这两个变量分别是胆固醇的测量水平和运动相对于休息诱发的ST段下移量。如果我们想改变医生最初的研究问题,即根据不同的因素来研究心脏病,该怎么办?如果现在想利用所有的因素,包括知道病人是否有心脏病,来确定或预测他们的胆固醇水平,那又会怎么样?可以通过对变量
进行回归分析的方式来实现这些目标。
因此,为了准备关于变量和
的数据,将进一步改变数据的尺度范围。为了进行验证,将检索这些数据在缩放前后的统计特性。
为了重新加载数据集并展示其统计特征,可以这样做:

在本例中,索引4和9对应于和
,describe()方法输出下列信息:

最值得注意的属性是该列中包含的平均值和最大值或最小值。一旦将数据扩展到不同的范围,这些取值会发生改变。可以将数据可视化为带有各自直方图的散点图,如图3.2所示。
从图3.2可以看出,数据取值范围的差异比较大,数据分布的差异也比较大。将这些数据进行变换后所得新数据的期望变换范围最小值为0,最大值为1。当我们对数据的尺度进行变换时,这是一种比较典型的变化范围。使用scikit-learn的MinMaxScaler对象就可以实现,具体步骤如下:

输出结果如下:


图3.2 x5和x10两列的散点图及其直方图
fit()方法在内部所做的工作是确定数据的当前最小值和最大值。然后,transform()方法使用该信息删除最小值并除以最大值以获得所需的范围。可以看出,新的描述性统计数据已经发生了变化,从图3.3的坐标轴范围可以证实。

图3.3 缩放后列x5和x10新数据的散点图及其直方图
但是,如果你仔细观察的话,就会注意到数据的分布其实并没有发生改变。也就是说,图3.2和图3.3中的数据直方图是相同的。这是一个非常重要的事实,因为通常你不想改变数据的分布。