首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习总是踩雷?实例教你避开陷阱

全文共3620字,预计学习时长7分钟

在学习数据科学的过程中,可能会遇到不少典型错误,包括错误的数据可视化,错误值的错误处理,分类变量的错误转换等等……通过本文的学习,你就可以知道如何避免这些错误了。

在抓取数据之后、应用机器学习模型之前,需要完成许多步骤。比如需要对每个变量进行可视化以查看分布,查找异常值,并了解存在此类异常值的原因。

对于某些功能中的缺失值,你可以做些什么?将分类特征转换为数字特征的最佳方法是什么?这样的问题有很多。那么,大部分初学者都会遇到哪些错误呢?

1.可视化

首先,你应该对连续特征的分布进行可视化,来感受一下是否有太多的异常值,这个分布应该是什么样的,还有这种分布是否说得通。

可以通过多种方式对其进行可视化,例如箱形图、直方图、累积分布函数和小提琴图。但是,应该选择能够提供有关数据信息最多的图。

要查看分布(它是正态分布还是双峰分布),直方图最有帮助。尽管直方图是一个很好的起点,但是箱形图在识别异常值的数量和查看中位数四分位数的位置方面可能更为出色。

根据这些图,最有趣的问题是:你看到了预期的东西吗?回答这个问题可以帮助你洞察数据或发现数据中的错误。

为了获得灵感并理解哪些图会给予最大的价值,Python的seaborn绘图包非常有用。可视化和获取深刻见解的另一个来源是Kaggle的kernel。

下图为在租赁价格的背景下绘制的每个连续特征的直方图,并且预计在没有账单和总面积的租金分布中看到一个很长的右尾。

连续特征的直方图

箱形图能帮助你清晰地看到每个功能的异常值数量。事实上,大多数没有账单的离群公寓,要么是超过200平方米的小商店工作室,要么是租金很低的学生宿舍。

连续特征的箱形图

2.是否需要根据整个数据集来估算值?

由于各种原因,有时会出现缺失值。如果每一个观察都排除至少一个缺失值,最终会得到一个非常简化的数据集。

有很多方法可以计算值、平均值或中位数。由你决定如何操作,但要确保仅根据训练数据计算插补统计数据,以避免测试集的数据泄漏。

在租赁数据中,你还可以提取公寓的描述。每当缺少公寓的质量、条件或类型时,如果描述中包含了此信息,就可以推定此确实信息。

3.如何转换分类变量?

某些算法(取决于实现)不能直接使用分类数据,因此需要以某种方式将它们转换为数值。

有许多方法可以将分类变量转换为数字特征,例如标签编码、独热编码、二进制编码和散列编码。但是大多数人在应该使用独热编码时错误地使用了标签编码。

在租赁数据中,假设有一个公寓类型列,其中包含以下数值:[地面层,阁楼,复式小屋,阁楼,阁楼,地面层]。 标签编码可以将其转换为[3,2,1,2,2,1],引入普遍性,这意味着底层> 阁楼>复式小屋。对于某些算法(如决策树及其偏差),此功能的此类编码可能会很好,但应用在回归和SVM支持向量机可能不是很好。

在租赁价格数据集中,条件编码如下:

新的:1

装修:2

需要翻新:3

质量编码如下:

豪华型:1

比平常更好:2

平常:3

简单:4

未知:5

4.需要对变量标准化吗?

标准化使所有连续变量达到相同的规模,这意味着如果一个变量的值从1K到1M,另一个变量从0.1到1,标准化后它们将具有相同的范围。

L1或L2正则化是减少过度拟合的常用方法,可以用在许多回归算法中。但是,在L1或L2之前应用特征标准化很重要。

租赁价格以欧元计算时的拟合系数将比价格以美分计算的拟合系数大约100倍。 L1和L2对大一点的系数更不利,这意味着它对小规模的特征更不利。为了防止这种情况,应在应用L1或L2之前对特征进行标准化。

标准化的另一个原因是,如果你的算法使用梯度下降,梯度下降会随着特征缩放而快速收敛。

5.是否需要导出目标变量的对数?

其实,这没有标准答案,取决于很多因素:

是否需要分数或绝对误差

使用的算法

指标中的残差图和变化表明什么

在回归中,首先要注意残差图和指标。有时,目标变量的对数化会产生更好的模型,结果也易于理解。然而,还有其他可能有效的转换,例如取平方根。

在Stack Overflow上,关于这个问题有很多答案。原始日志目标变量上的残差图和均方根误差(RMSE)很好地解释了这个问题。

对于租赁数据,可以得出价格的对数,因为残差图看起来好一些。

残差图的对数(左)和租金未转换数据(右)的两张图都不包括账单变量。右图(残差图的右边部分)显示“异方差性”——随着预测从小到大,残差变大。

一些更重要的东西

某些算法(如回归)将受到数据中共线性的影响,因为系数变得非常不稳定。由于内核的选择,SVM支持向量机可能会或也可能不会受到共线性的影响。

基于决策的算法不会受到多重共线性的影响,因为它们可以在不同树中交替使用特征,而不会影响性能。然而,由于相关变量可能看起来不那么重要,因此对特征重要性的解释变得更加困难。

机器学习

在熟悉数据并清理异常值之后,就到了摸清机器学习的最佳时机。你可以使用许多算法进行监督性机器学习。

本文探索了三种不同的算法,比较性能差异和速度等特征——具有不同实现的梯度增强树(XGBoost和LightGMB),随机森林(FR,scikit-learn)和3层神经网络(NN,Tensorflow)。此处选择RMSLE(均方根对数误差)作为优化过程的指标,因为导出了目标变量的对数。

XGBoost和LigthGBM表现相当,RF略差,而NN表现最差。

测试集上算法的性能(RMSLE)

基于决策树的算法非常擅长解释特征。例如,它们会生出特征重要性分数。

特征重要性:找到租赁价格的驱动因素

在拟合基于决策树的模型后,你可以看到哪些特征对于价格预测最有价值。

特征重要性提供了一个分数,表明每个特征在模型中构建决策树时的信息量。计算此分数的方法之一是计算使用特征在所有树中分割数据的次数。该分数可以通过不同方式计算。

特征重要性可以洞悉有关主要价格驱动因素。

对于租赁价格预测,总面积是价格最重要的驱动因素并不惊奇。有趣的是,一些使用外部应用程序编程接口(API)设计的功能也是最重要的因素之一。

通过分割(上图)和增益(下图)计算的特征重要性

但是,根据属性选项,可能存在功能重要性的不一致。有一种计算特征重要性的新方法,该方法既准确又一致——使用了shap Python库,SHAP值表示特征对模型输出更改的责任。

租赁价格数据分析的输出如下图所示。

每间公寓每排有一个圆点。点的x位置是该特征对顾客模型预测的影响,点的颜色表示该特征对于公寓的价值。

该图包含了大量有价值的信息(功能按平均值排序(|Tree SHAP |))。免责声明:数据来自2018年初;该地区可能发展,因此价格相关因素可能会发生变化。

靠近市中心(开车到Stadtmitte地铁站的公里数和乘坐火车前往Friedrichstrasse火车站的时间)会增加预计的出租公寓价格。

总面积是租赁价格的最强驱动力。

如果公寓业主要求您持有低收入证明(德语为WBS),则预测价格较低。

在这些地区租用公寓也会增加租金:Mitte,Prenzlauer Berg,Wilmersdorf,Charlottenburg,Zehlendorf和Friedrichshain。

价格较低的地区会是:Spandau,Tempelhof,Wedding和Reinickendorf。

显然,条件更好—价值越低越好—质量越好—价值越低越好—带家具、内置厨房和电梯的公寓费用会更高。

有趣的是以下功能的影响:

到最近的地铁站的时间

1公里范围内的车站数量。

到最近的地铁站的时间:

对于某些公寓来说,这个特征的高价值似乎表明价格较高。因为这些公寓位于柏林以外非常富裕的住宅区。

还可以看到,靠近地铁站有两个可能:它降低了价格和增加了一些公寓的价格。原因可能是非常靠近地铁站的公寓也会受到火车引起的地下噪音或振动的影响,但另一方面,它们交通十分便利。然而,人们可以更深入地研究这个特征,因为它只显示接近最近的地铁站而不是电车/公交车站。

1公里范围内的地铁站数量:

这同样适用于距公寓一公里范围内的地铁站数量。一般而言,周围有许多地铁站的都会提高租金价格。然而,它也有负面影响—更多噪音。

总体均值

在展示了不同的模型并比较性能之后,你可以将每个模型的结果组合起来并构建一个整体。

Bagging是机器学习集合模型,它利用几种算法的预测来计算最终的聚合预测。它旨在防止过度拟合并减少算法的方差。

使用集合的优点:红色模型在左下方框中表现更好,但是蓝色模型在右上方框中表现更好。通过组合两种模型的预测,可以提高整体性能。

由于已经从上述算法中得到了预测,我们以所有可能的方式组合了所有四个模型,并根据验证集的均方根对数误差(RMSLE)选择了七个最佳的单一和集合模型。

然后在测试集上计算这七个模型的RMSLE。

测试算法的RMSLE。

与单个模型相比,基于三个基于决策树的算法的集合表现最佳。

你还可以生成加权集合,为更好的单个模型分配更多权重。理由是其他模型只有在它们都支持一种选择时才能超过最佳模型。

实际上,如果不试试,就不会知道平均整体是否比单一模型更好。

堆叠模型

平均或加权集合不是组合不同模型的预测的唯一方式。你也可以以不同的方式堆叠模型!

堆叠模型的想法是在基础模型的结果之上创建几个基础模型和元模型,用来生成最终预测。然而,如何训练元模型并不那么简单,因为它会偏向于最好的基础模型。

在租赁价格的例子中,堆叠模型根本没有改进RMSLE—它们甚至增加了指标。可能有几个原因—要么编码不正确,要么堆叠引入了太多噪音。

留言 点赞 发个朋友圈

我们一起分享AI学习与发展的干货

编译组:郝晶晶、胡婷

相关链接:

https://www.kdnuggets.com/2018/12/common-mistakes-data-science.html

如需转载,请后台留言,遵守转载规范

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181220A0ULF900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券