还有,特征值不应随时间发生变化。这一点回到了数据的平稳性这一概念。
8.4.5 数据清洗
对于机器学习而言,预先了解源数据是至关重要的。我们不能将机器学习当作一个黑盒子,把数据丢进去,却不检查数据,就盼着能够获得好结果,这种做法并不妥当。有时,我们要监控一段时间内的数据。数据源昨天情况很好,并不意味着明天情况也会很好。有时,数据集中的有些数据可能并不可靠。因此,我们能做的就是,使用直方图或散点图以及各种排名指标将数据直观地显示出来,查看数据的统计信息(如最大/最小值、均值等)。我们写一些代码查找重复值和缺失值,查找不正确的标签数据和特征值,然后将它们清除出数据集。
在选取特征时应考虑排除离群值。例如,在加利福尼亚州的住房数据中,如果我们创建一个合成特征,例如人均房间数,即房间总数除以人口总数,那么对于大多数城市街区,我们都会得到介于每人0到3或4个房间的相对合理的值。如果出现高达50的值,这样的值就太不正常了,是一个离群值。再比如,年龄数据为200,这个可能是一个离群值。此时,我们或许可以为特征设置上限或转换特征,以便去掉这些不理性的离群值。这就是数据清洗的工作。还有一种数据清洗的标准化方法是将特征数据(比如1000到8000)缩放(scale)至给定的最小值与最大值之间,通常是0与1之间。
我们来看一个具体的例子。图8-47的左图描述了roomsPerPerson特征的数据分布。roomsPerPerson指一个区域内每人所占用的房间数。大多数特征数据集中在1和2之间,看上去比较合理。但是也有50的数据。为了减少离群值的影响,我们使用1og函数把特征值缩放了,如图8-47的右图所示。
虽然log缩放函数帮了一些忙,但是还有离群值。我们修剪最大值到4,如图8-48所示。
第8章 TensorFlow
251