纯机器学习(ML)模型的训练与建立端到端的数据科学解决方案与实际企业需要之间存在巨大差异。 本文总结了我们团队与来自不同行业的数十家企业客户(包括制造业,金融服务业,零售业,娱乐业和医疗保健业等)合作两年后所总结的经验教训。 企业面临的最常见的ML问题是什么?除了训练ML模型之外还有什么? 如何解决数据收集问题? 如何扩展到大型数据集? 为什么特征工程如此重要? 如何从生产中的模型转变为功能完备的系统? 我们是否需要数据科学平台?
ML不仅仅是训练模型
目前普遍存在一种误解,当你问一些从事机器学习的人:“假设你有一个具有某些特征的数据集,目的是预测某个变量,你会做什么?”,得到的回答十分的标准:“我将数据集拆分为训练/测试,运行Logistic回归,随机森林,SVM,深度学习,XGBoost ......(以及一些闻所未闻的算法),然后计算精度,召回率,F1得分...(以及一些闻所未闻的指标),最终选择最佳模型“。但是,你有没看过这些数据? 如果您缺少值该怎么办? 如果您的错误值/错误数据怎么办? 您如何映射分类变量? 你是如何做特色工程的?这些问题是我们忽视的也是最重要的。
获取数据很难
对于算法来说,数据的重要性大家都知道,再高端的算法没有数据也不如一块砖头,虽然目前有各种开源的数据集,但这根本满足不了日益复杂的广泛的机器学习应用需要。而且获取数据又有一个大的挑战,有时可能需要数周甚至数月才能获得合适的数据集。 下边列出一些获取数据集的挑战:
大数据可能不那么大
这是一个有争议的问题,大数据如果数据不大还能叫大数据吗。 这里我们需要区分原始数据 (即包括可能与手头问题无关的部分)和特征集 (即ML算法的输入矩阵)这两者的关系。 从原始数据转到特征集的过程称为数据处理 ,通常包括:
在完成所有数据处理步骤之后,不难发现最终的特征集将会比原始数据集小得多;即使功能集非常庞大,那么像Apache Spark这样的大数据工具会派上用场,但它们提供的算法是比较有限的。
脏数据处理
想象跟现实还是有很大区别的,当你满怀欣喜地打开数据集,期待数据十分完美,直接上算法就能出正确率。然而你可能需要面对的是异常值、缺失值等等诸多问题,因此你需要清洗数据,下边提供几个常用的数据清洗问题:
不平衡数据集
无论是欺诈检测,制造测试,客户流失,患者风险,客户犯罪,系统崩溃预测等等机器学习问题,问题始终是:能否在大量的数据中识别出少数问题。即数据集不平衡问题。一些常见的处理不平衡数据集的算法是:
不是所有问题都要预测
我遇到过几个项目,其目标不是创建一个模型来实时进行预测,而是解释一个假设或分析哪些因素对某种行为的影响 ,举一些例子:
解决这些问题的一种方法是计算特征重要性,该特征重要性由随机森林 , 决策树和XGBoost等算法给出。 此外,LIME或SHAP等算法有助于解释模型和预测。
调超参数
机器学习算法具有参数和超参数 。 它们的不同之处在于前者是由算法直接估计的, 例如回归系数或神经网络的权重;而后者需要由用户设置,例如随机森林,神经网络中的正则化方法,或支持向量机(SVM)分类器的核函数。为ML模型设置不同的超参数值可以产生不同的结果。 例如,SVM的线性内核将无法对不可线性分离的数据进行分类。 如果最大深度或分割数量设置得太高,则基于树的分类器可能过度拟合,或者如果它们的最大特征数量设置得太低则可能不合适。找到超参数的最佳值是一个非常复杂的优化问题。 下边总结一些方法:
深度学习:灵丹妙药?
在过去几年中, 深度学习一直是研究和产业发展的重点。 TensorFlow , Keras和Caffe等框架现在可以通过高级API快速实现复杂的神经网络。应用在许多领域,包括计算机视觉,聊天机器人,自动驾驶汽车,机器翻译,甚至游戏 - 击败顶级Go人类玩家和世界顶级国际象棋电脑!深度学习的主要前提是它能够随着数据量的增加继续学习,这在大数据时代尤其有用(见下图)。 尤其是与硬件(即GPU)相结合,计算能力的提高更是加速深度学习的发展与应用。
那么这是否意味着DL是解决任何机器学习问题的方法? 并不是的。 原因如下:
参考
https://towardsdatascience.com/machine-learning-lessons-learned-from-the-enterprise-d8588f3d3060
深度学习与Python,专注于深度学习、机器学习前沿知识与资讯