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

进行机器学习和数据科学常犯的错误

笔者邀请您,先思考:

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位置是该预测模型的特征对客户的影响,点的颜色表示该特征对于公寓的价值。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券