当我们拿到数据之后,第一步一般是分析数据的特点比如有没有缺失值,有没有异常值以及数据分布是如何的。

    搜狗截图20190926145738.png

    通过数据的观察,其实很容易知道这个数据针对的是分类问题。也就是通过给定的5个课程方面的特征来预测学生对课程满意度。

    另外,这数据表格里有两个缺失值,分别是助教经验属性栏,还有每周需要花费的时间栏。

    缺失值对于算法的影响很大,因为大部分算法没有办法处理这些缺失值。这就意味着,我们需要提前把这些缺失值处理好。
    对于缺失值处理上,最简单的处理方法叫做”删除法“:一旦遇到了缺失值,我们就删掉相应的记录。
    第一种删除法是把相应的属性全部删掉,也就是删掉整个列。

    搜狗截图20190926150041.png

    对于某一些特征,可能存在大量的缺失值。 简单的例子是,比如我们发起了一个问卷调查,其中有必填项也有选填项,但有可能只有不到30%的人填写了选填项,这个时候就产生大量的缺失值。而且,如果我们觉得这个选填项没有非常大的价值,其实可以丢弃掉,不放在模型里。但如果一个特征中只有几个样本缺失了这条特征,全部删掉整个列是不太明智的。因为等同于完全废弃掉了此特征,所以实际使用的时候还是要多加深思。

    第二种删除法是删除相应的记录。 只要一个记录里包含了缺失值,就丢弃掉此记录。

    搜狗截图20190926150237.png

    如上图所示,丢弃掉了第五条和第八条记录,因为这两条记录分别包含了缺失值。这种方法也简单且直接,也是平时工程里常用的方法,实现起来也非常简单。

    删除记录的方法确实是一个非常实用的方法,而且广泛应用于很多的场景。但它也有些缺点。
    对于维度很多的数据,假如大量的维度都存在缺失值,这个方法很容易丢弃掉大量的样本。

    设想一下数据里含有100多个特征,而且其中60多个特征都允许出现缺失值(可以理解为选填项), 那这个时候对于一个记录来讲,它有大概率包含至少一个缺失值。所以,如果这时候使用此方案,最终会发现大量的记录都被我们丢弃掉了,这使得样本数据量急剧变小,从而影响后续建模的效果。

    所以这是为什么对数据的理解非常重要,因为只有通过对数据的理解,才能一开始就觉察到哪些特征”有可能“重要,哪些特征根本就不重要。再有,理解数据中缺失值的分布情况有助于选择合适的方法去处理缺失值。

    除了删除法,另一种方法叫做填补法,也就是尝试着用一个新的值来填补缺失值。对于数值型(real-valued)变量,我们经常使用平均法则,就是用平均值来填补缺失值。

    搜狗截图20190926150711.png

    如上图所示,对于助教经验那一列,使用了平均填补法。方法很简单,把这一列的所有的值加起来做个平均,然后把这个平均值填补到每一个缺失值的地方。 除了平均值,有些人可能也会想到使用中位数来调补,两者均可。

    那这种平均值/中位数填补法有什么缺点呢?
    虽然这种方法比较有效,但也避免不了一些缺点。比如填补的值对于当前的样本来说很不合理,这时候反而会影响模型的效果。举个例子,目前在某公司担任技术专家的张三,他没有提供自己的薪资,如果这时候我们使用所有IT从业人员的平均薪资来填补缺失值,那对于张三来说是不太合理的。

    ,假如大量的维度都存在缺失值,这个方法很容易丢弃掉大量的样本对于维度很多的数据,假如大量的维度
    都存在缺失值,这个方法很容易丢弃掉大量的样本

    对于维度很多的数据,假如大量的维度都存在缺失值,这个方法很容易丢弃掉大量的样本
    对于维度很多的数据,假如大量的维度都存在缺失值,这个方法很容易丢弃掉大量的样本