前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从业多年,总结几点关于机器学习的经验教训

从业多年,总结几点关于机器学习的经验教训

作者头像
深度学习与Python
发布2019-06-19 23:18:02
6520
发布2019-06-19 23:18:02
举报
文章被收录于专栏:深度学习与python

纯机器学习(ML)模型的训练与建立端到端的数据科学解决方案与实际企业需要之间存在巨大差异。 本文总结了我们团队与来自不同行业的数十家企业客户(包括制造业,金融服务业,零售业,娱乐业和医疗保健业等)合作两年后所总结的经验教训。 企业面临的最常见的ML问题是什么?除了训练ML模型之外还有什么? 如何解决数据收集问题? 如何扩展到大型数据集? 为什么特征工程如此重要? 如何从生产中的模型转变为功能完备的系统? 我们是否需要数据科学平台?

ML不仅仅是训练模型

目前普遍存在一种误解,当你问一些从事机器学习的人:“假设你有一个具有某些特征的数据集,目的是预测某个变量,你会做什么?”,得到的回答十分的标准:“我将数据集拆分为训练/测试,运行Logistic回归,随机森林,SVM,深度学习,XGBoost ......(以及一些闻所未闻的算法),然后计算精度,召回率,F1得分...(以及一些闻所未闻的指标),最终选择最佳模型“。但是,你有没看过这些数据? 如果您缺少值该怎么办? 如果您的错误值/错误数据怎么办? 您如何映射分类变量? 你是如何做特色工程的?这些问题是我们忽视的也是最重要的。

获取数据很难

对于算法来说,数据的重要性大家都知道,再高端的算法没有数据也不如一块砖头,虽然目前有各种开源的数据集,但这根本满足不了日益复杂的广泛的机器学习应用需要。而且获取数据又有一个大的挑战,有时可能需要数周甚至数月才能获得合适的数据集。 下边列出一些获取数据集的挑战:

  • 大多数企业数据都非常敏感,尤其是在与政府,医疗保健和金融行业打交道时。 在共享数据资产方面,保密协议(NDAs)是非常严格的。
  • 数据分散在组织内不同地方的情况并不罕见,因此收集起来难度无疑很大。
  • 有些数据只有专家才知道如何收集到正确的数据,缺乏专业知识收集的数据可能不适合整个项目需要。
  • 混淆和匿名化已经成为研究领域中处理敏感数据的常用方法。
  • 标签:具有可用的基础事实或标签通常很有用,因为它允许应用各种监督学习算法。 但是,在某些情况下,标记数据代价较高,或者由于法律限制,标签可能无法使用。 在这些情况下,只能考虑一些无监督方法。
  • 数据生成器:当数据或标签不可用时的另一种方法是模拟它们。 在实现数据生成器时,获得有关数据模式,数值变量的概率分布以及名义变量的类别分布的信息非常有用。 如果数据是非结构化的, Tumblr是标记图像的重要来源,而Twitter可能是自由文本的重要来源。 Kaggle还在许多领域和行业提供各种数据集和解决方案。

大数据可能不那么大

这是一个有争议的问题,大数据如果数据不大还能叫大数据吗。 这里我们需要区分原始数据 (即包括可能与手头问题无关的部分)和特征集 (即ML算法的输入矩阵)这两者的关系。 从原始数据转到特征集的过程称为数据处理 ,通常包括:

  1. 丢弃无效/不完整/脏数据,根据我们的经验,这些数据可能达到记录的一半。
  2. 合并一个或多个数据集,包括联接和组聚合器等操作。
  3. 特征选择/提取,例如移除可能不相关的特征,并应用其他降维技术,例如主成分分析 (PCA)。
  4. 使用稀疏数据表示或特征哈希来减少具有许多零值的数据集的内存占用。

在完成所有数据处理步骤之后,不难发现最终的特征集将会比原始数据集小得多;即使功能集非常庞大,那么像Apache Spark这样的大数据工具会派上用场,但它们提供的算法是比较有限的。

脏数据处理

想象跟现实还是有很大区别的,当你满怀欣喜地打开数据集,期待数据十分完美,直接上算法就能出正确率。然而你可能需要面对的是异常值、缺失值等等诸多问题,因此你需要清洗数据,下边提供几个常用的数据清洗问题:

  • 异常值检测:负时间,浮点邮政编码或信用评分为零等等问题。 在训练模型时,不处理异常值可能会带来模型的高偏差。
  • 缺失值插补:解决错误/缺失值的明显方法是简单地丢弃它们。 替代方案是插补,即通过相应属性的均值,中值或模式替换缺失/不正确的值。 另一种选择是插值,即构建模型以预测具有缺失值的属性。
  • 虚拟编码和特征映射:这些对于将分类数据转换为数字非常有用,特别是对于基于系数的算法。 假设存在指示美国状态的属性状态 (例如FL , CA , AZ )。 将FL映射到1,将CA映射到2,将AZ映射到3会引入感知顺序和幅度,这意味着AZ将大于FL,CA将是FL的两倍。 独热编码通过将分类列映射到多个二进制列来解决此问题,每个列对应一个类别值。
  • 缩放:当特征处于不同尺度时,基于系数的算法会经历偏差。 假设年龄在[0,100]内的年份给出,而工资在[0,1000]内以美元给出。 优化算法可以为工资分配更多权重,因为它具有更高的绝对量。 因此,通常建议归一化,常用方法包括z评分或标准化 (当数据正常时)和最小 - 最大特征缩放。

不平衡数据集

无论是欺诈检测,制造测试,客户流失,患者风险,客户犯罪,系统崩溃预测等等机器学习问题,问题始终是:能否在大量的数据中识别出少数问题。即数据集不平衡问题。一些常见的处理不平衡数据集的算法是:

  1. 自动编码器
  2. 置信区间
  3. 聚类
  4. 使用过采样和欠采样进行分类。

不是所有问题都要预测

我遇到过几个项目,其目标不是创建一个模型来实时进行预测,而是解释一个假设或分析哪些因素对某种行为的影响 ,举一些例子:

  • 哪些因素会使患者陷入高风险?
  • 哪种药物对血液检测结果的影响最大?
  • 哪个保险计划参数值最大化利润?
  • 客户的哪些特征使他更容易犯罪?

解决这些问题的一种方法是计算特征重要性,该特征重要性由随机森林 , 决策树和XGBoost等算法给出。 此外,LIME或SHAP等算法有助于解释模型和预测。

调超参数

机器学习算法具有参数和超参数 。 它们的不同之处在于前者是由算法直接估计的, 例如回归系数或神经网络的权重;而后者需要由用户设置,例如随机森林,神经网络中的正则化方法,或支持向量机(SVM)分类器的核函数。为ML模型设置不同的超参数值可以产生不同的结果。 例如,SVM的线性内核将无法对不可线性分离的数据进行分类。 如果最大深度或分割数量设置得太高,则基于树的分类器可能过度拟合,或者如果它们的最大特征数量设置得太低则可能不合适。找到超参数的最佳值是一个非常复杂的优化问题。 下边总结一些方法:

  1. 了解超参数的优先级。 在随机森林中, 树木的数量和最大深度可能是最相关的,而对于深度学习,可以优先考虑学习速率和层数 。
  2. 使用搜索策略: 网格搜索或随机搜索 。
  3. 使用交叉验证 :设置单独的测试集,将剩余数据拆分为k个部分,并使用每个部分迭代k次以进行验证 (即调整超参数),剩余的用于训练 。

深度学习:灵丹妙药?

在过去几年中, 深度学习一直是研究和产业发展的重点。 TensorFlow , Keras和Caffe等框架现在可以通过高级API快速实现复杂的神经网络。应用在许多领域,包括计算机视觉,聊天机器人,自动驾驶汽车,机器翻译,甚至游戏 - 击败顶级Go人类玩家和世界顶级国际象棋电脑!深度学习的主要前提是它能够随着数据量的增加继续学习,这在大数据时代尤其有用(见下图)。 尤其是与硬件(即GPU)相结合,计算能力的提高更是加速深度学习的发展与应用。

那么这是否意味着DL是解决任何机器学习问题的方法? 并不是的。 原因如下:

1、复杂性:神经网络模型的结果非常依赖于网络的体系结构和超参数。 在大多数情况下,您需要一些网络架构方面的专业知识才能正确调整模型。
2、解释性:正如我们之前看到的,许多用例不仅需要预测,还需要解释预测背后的原因: 为什么贷款被拒绝? 或者为什么保险单价格会上涨? 基于树和基于系数的算法直接允许可解释性,但神经网络不能够解释。
3、准确性:根据我们的经验,对于大多数结构化数据集,神经网络模型的准确性不一定比Random Forests和XGBoost的准确性更好。 DL擅长的地方实际上涉及非结构化数据,即图像,文本或音频。
4、适用性:不要用霰弹枪杀死苍蝇。 诸如Random Forest和XGBoost之类的ML算法足以应对大多数结构化监督问题,也更容易调整,运行和解释。 让DL去解决更复杂的图像、语音等问题吧。

参考

https://towardsdatascience.com/machine-learning-lessons-learned-from-the-enterprise-d8588f3d3060

深度学习与Python,专注于深度学习、机器学习前沿知识与资讯

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习与python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、复杂性:神经网络模型的结果非常依赖于网络的体系结构和超参数。 在大多数情况下,您需要一些网络架构方面的专业知识才能正确调整模型。
  • 2、解释性:正如我们之前看到的,许多用例不仅需要预测,还需要解释预测背后的原因: 为什么贷款被拒绝? 或者为什么保险单价格会上涨? 基于树和基于系数的算法直接允许可解释性,但神经网络不能够解释。
  • 3、准确性:根据我们的经验,对于大多数结构化数据集,神经网络模型的准确性不一定比Random Forests和XGBoost的准确性更好。 DL擅长的地方实际上涉及非结构化数据,即图像,文本或音频。
  • 4、适用性:不要用霰弹枪杀死苍蝇。 诸如Random Forest和XGBoost之类的ML算法足以应对大多数结构化监督问题,也更容易调整,运行和解释。 让DL去解决更复杂的图像、语音等问题吧。
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档