笔者邀请您,先思考:
1 您做机器学习和数据科学项目犯过那些错误?
我们研究了数据科学过程中的典型错误,包括错误的数据可视化、错误的缺失值处理、错误的分类变量转换等等。让我们学会如何避免。
这是这个系列的第2部分,请在这里找到第1部分—如何从头构建数据科学项目。
在抓取或获取数据之后,在应用机器学习模型之前需要完成许多步骤。
您需要可视化每个变量,以查看分布,找到异常值,并理解为什么会有这样的异常值。
如何处理某些特征中缺失的值?
将分类特征转换成数值特征的最佳方法是什么?
这类问题有很多,但我将详细介绍大多数初学者遇到错误的地方。
1. 可视化
首先,您应该可视化连续特征的分布,以了解如果有许多异常值,分布将是什么,以及它是否有意义。
有许多方法可以可视化它,例如盒箱、直方图、累积分布函数和小提琴图。然而,我们应该选择能够提供最多数据信息的图。
要查看分布(如果是正态分布或双峰分布),直方图将是最有帮助的。虽然直方图是一个很好的起点,但是盒箱在识别异常值的数量和中位数在哪里可能更有优势。
根据这些图,最有趣的问题是:你看到了你期望看到的吗?回答这个问题将帮助您发现数据中的洞察力或错误。
为了获得灵感并理解什么图最有价值,我经常参考Python的seaborn图库。可视化和发现洞察力的另一个好的灵感来源是Kaggle的内核。这是我的kaggle内核,用于深度可视化泰坦尼克数据集。
在租金价格的一文中,我绘制了每个连续特征的直方图,我希望在没有账单和总面积的情况下,租金的分布会有一条长长的右尾。
连续变量的直方图
盒箱图帮助我看到每个特性的离群值的数量。事实上,绝大多数基于无账单租金的离群公寓,要么是200多平方米小店铺的工作室,要么是租金很低的学生宿舍。
连续变量的盒箱图
2. 我是否根据整个数据集来估算值?
由于各种原因,有时会会有一些缺失值。如果我们删除每一个至少有一个缺失值的观测,我们可以得到一个非常精简的数据集。
有许多方法可以插补值,例如均值,中位数等,不管您采用哪种方法,请确保从训练数据集中计算所要插补的统计值,以避免测试集的数据泄露。
在租赁数据中,我也获取了公寓的描述。每当公寓的质量、条件或类型丢失时,如果描述中包含此信息,我将从描述中推断。
3. 如何变换分类变量?
有些算法(取决于实现)不能直接处理分类数据,因此需要以某种方式将它们转换为数值。
将分类变量转换为数字变量的方法有很多,例如标签编码器、一种热编码、bin编码和哈希编码。但是,大多数人在使用One Hot Encoding时会错误地使用标签编码。
在我们的租赁数据中,假设我们有一个公寓类型列,其中包含以下数值:[ground floor, loft, maisonette, loft, loft, ground floor]。 LabelEncoder可以将其转换为[3,2,1,2,2,1],这意味着ground_floor> loft>maisonette。 对于某些算法(如决策树及其偏差),这种编码方式可能会很好,但应用于回归和SVM可能没什么作用。
在租金数据集中,condition编码如下:
- new:1
- renovated:2
- needs renovation: 3
而quality编码如下:
- Luxus:1
- better than normal: 2
- normal: 3
- simple: 4
- unknown: 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(均方根对数误差)作为优化过程的度量。 我使用了RMSLE,因为我使用了目标变量的对数。
XGBoost和LigthGBM表现相当,RF略差,而NN表现最差。
测试集上算法的性能(RMSLE) 基于决策树的算法非常擅长解释特征。 例如,它们产生特征重要性分数。
特征重要性:找到租赁价格的驱动因素 在拟合基于决策树的模型后,您可以看到哪些特征对于价格预测最有价值。
特征重要性提供了一个分数,指示每个特征在模型中构建决策树时的信息量。 计算此分数的方法之一是计算使用特征在所有树中分割数据的次数。 该分数可以用不同方式计算。
特征重要性可以揭示有关价格主要驱动因素的见解。
对于租赁价格预测,总面积是价格最重要的驱动因素并不奇怪。 有趣的是,一些使用外部API设计的特征也是最重要的因素。
通过分割(上图)和增益(下图)计算的特征重要性
但是,如“使用XGBoost进行可解释的机器学习”中所述,根据属性选项,可能存在特征重要性的不一致。 链接的博客文章和SHAP NIPS文章的作者提出了一种计算特征重要性的新方法,该方法既准确又一致。 这使用了shap Python库。 SHAP值表示特征对模型输出改变的重要性。
对租金数据的分析结果如下图所示。
每间公寓每行有一个圆点。点的x位置是该预测模型的特征对客户的影响,点的颜色表示该特征对于公寓的价值。
该图包含了大量有价值的信息(功能按平均值排序(|树SHAP |))。 小免责声明:数据来自2018年初,该地区在发展,因此价格相关因素可能会发生变化。
- 靠近市中心(开车到U-Bahn Stadtmitte的公里和乘坐火车前往S-Bahn Friedrichstrasse的时间)会增加预计的出租公寓价格
- 总面积作为租赁价格的最强驱动力
- 如果公寓业主要求您持有低收入证明(德语为WBS),则预测价格较低
- 在这些地区租一套公寓也会增加租金价格:Mitte,Prenzlauer Berg,Wilmersdorf,Charlottenburg,Zehlendorf和Friedrichshain
- 价格较低的地区是:Spandau,Tempelhof,Wedding和Reinickendorf
- 显然,一个条件更好的公寓 - 价值越低越好 - 质量越好 - 价值越低越好 - 带家具,内置厨房和电梯将花费更多
有趣的是以下特征的影响:
- 到最近的地铁站的持续时间
- 1公里范围内的车站数量
到最近的地铁站的时间: 对于某些公寓来说,这个特征的高价值似乎表明价格较高。这样做的原因是这些公寓位于柏林以外非常富裕的住宅区。
人们还可以看到,地铁站附近有两个方向:它降低了,它增加了一些公寓的价格。原因可能是非常靠近地铁站的公寓也会受到火车引起的地下噪音或振动的影响,但另一方面,他们将与公共交通连接良好。然而,你可以更多地研究这个特征,因为它显示只接近最近的地铁站而不是电车/公交车站。
1公里范围内的车站数量: 这同样适用于距公寓一公里范围内的车站数量。一般而言,周围的许多地铁站都会提高租金价格。然而,它也有负面影响 - 更多的噪音。
集成平均
在玩了不同的模型并比较性能之后,您可以将每个模型的结果组合起来并构建一个整体!
Bagging是机器学习集合模型,它利用几种算法的预测来计算最终的集成预测。它旨在防止过度拟合并减少算法的方差。
使用集成的优点:红色模型在左下方框中表现更好,但是蓝色模型在右上方框中表现更好。 通过组合两种模型的预测,它可以提高整体性能。 图取自这里。
由于我已经从上述算法中得到了预测,我以所有可能的方式组合了所有四个模型,并根据验证集的RMSLE选择了七个最佳的单一和集合模型。
然后在测试集上计算这七个模型的RMSLE。
测试算法的RMSLE。
与每个单个模型相比,基于三个决策树的算法的集成表现最佳。
您还可以生成加权集合,为更好的单个模型分配更多权重。其背后的原因是其他模型只有在他们共同商定替代方案时才能否决最佳模型。
实际上,除了尝试,人们永远不会知道平均集成是否会比单一模型更好。
堆叠模型 平均或加权集成不是组合不同模型的预测的唯一方式。您也可以以不同的方式堆叠模型!
堆叠模型背后的想法是在基础模型的结果之上创建几个基础模型和元模型,以便产生最终预测。然而,如何训练元模型并不是那么明显,因为它可以偏向于最好的基础模型。有关如何正确执行此操作的非常好的解释可以在“堆叠模型以改进预测”中找到。
对于租赁价格的情况,堆叠模型根本没有改进RMSLE。这可能有几个原因 - 要么我编码不正确,要么堆叠引入太多噪音。
如果你想探索更多的集成和堆叠模型文章,Kaggle集成指南解释了许多不同类型的集成与性能比较和如何做堆叠模型达到Kaggle的比赛的顶部。
最后的想法
- 听听别人在你身边谈论什么; 他们的抱怨可以作为解决问题的好起点
- 让人们通过提供交互式仪表板找到自己的见解
- 不要将自己局限于将两个变量相乘的常见特征工程。尝试查找其他数据来源或解释
- 尝试集合和堆叠模型,因为这些方法可以提高性能
请提供您显示的数据的日期!
作者:Jekaterina Kokatjuhha 原文链接: https://www.kdnuggets.com/2018/12/common-mistakes-data-science.html