https://zhuanlan.zhihu.com/p/107859019
欢迎来到Vitu中级机器学习微课程!
如果你有机器学习的背景知识,并且想学习如何快速提高模型的质量,那么你来对地方了!在这个微课程中,你将学习如何通过以下方式加速您的机器学习专业知识:
- 解决实际数据集中常见的数据类型(缺失值,分类变量),
- 设计pipelines以提高机器学习代码的质量,
- 使用先进的技术进行模型验证(交叉验证),
- 建立最先进的模型(XGBoost),和
- 避免常见和重要的数据科学错误(泄漏leakage)。
在此过程中,您将通过每个新主题的实际数据的动手练习来巩固您的知识。
缺失值处理
在本教程中,你将学习三种处理缺失值的方法。 然后,你将比较这些方法对现实世界数据集的有效性。
缺失值在实际数据中会以多种方式出现。 例如,
- 对于两卧室房屋,第三间卧室的大小可以是缺失值。
- 调查受访者可以选择不分享他的收入,收入项就是缺失值。
如果你尝试使用缺少值的数据构建模型,则大多数机器学习库(包括scikit-learn)会出错。 因此,你需要选择以下策略之一。
三种策略
1)简单策略:去掉有缺失值的列
除非列中的大多数数值丢失,这种方法会使得模型丢失重要的信息,显然不是太好
2) 好一点的策略: 补缺失值
对于缺失值我们采用这一列的平均值来补,它通常会比完全删除列更准确
3) 更好的策略: 补缺失值并且加一标记缺失值位置的列
补缺失值是标准方法,通常效果很好。 但是,估算值可能系统地高于或低于其实际值(未在数据集中收集)。 或者,具有缺失值的行可能在某些其他方面是唯一的。 在这种情况下,你的模型会通过考虑最初缺少哪些值来做出更好的预测。
案例
在这个案例里,我们将查看澳大利亚墨尔本的房价数据。
下载并上传
点击这里 下载 数据集
我们再把csv文件上传到vitu的数据集空间里
我们的模型将使用诸如房间数量和土地面积等信息来预测房价。
我们不会关注数据加载步骤。 相反,你可以想象您已经拥有X_train,X_valid,y_train和y_valid中的训练和验证数据。
我们定义一个函数score_dataset()来比较处理缺失值的不同方法。 此函数返回随机森林模型的平均绝对误差(MAE)。
方法1得分(去掉有缺失值的列)
由于我们正在使用训练集和验证集,因此我们谨慎地在两个DataFrame中删除相同的列。
方法2得分(补缺失值)
接下来,我们使用SimpleImputer以每列的平均值来补缺失值。
尽管很简单,但填充平均值通常表现得非常好(但这会因数据集而异)。 虽然统计学家已经尝试了更复杂的方法来确定估算值(例如回归估算),但是一旦将结果插入复杂的机器学习模型,复杂的策略通常不会带来额外的好处。
我们看到方法2的MAE低于方法1,因此方法2在该数据集上表现更好。
方法3(带扩展的补缺失值)得分
接下来,我们补缺失值,同时跟踪补的值。
我们可以看到,方法3比方法2略差
那么为什么方法2比方法1好呢
训练数据有10864行和12列,其中三列包含缺失数据。 对于每列,只有不到一半的条目丢失。 因此,删除列会删除大量有用的信息,因此插补可以更好地运行。
结论
通常,相对于我们简单地删除具有缺失值的列(在方法1中),输入缺失值(在方法2和方法3中)产生了更好的结果。
来源:oschina
链接:https://my.oschina.net/u/4351246/blog/3199913