当前位置: 首页 > 科技观察

关于机器学习你需要知道的5件事

时间:2023-03-17 18:35:55 科技观察

任何快速发展的主题总是有新的东西需要学习,机器学习也不例外。这篇文章将指出关于机器学习的5件事,你可能不知道、可能没有意识到,或者可能知道但现在忘记了。请注意,这篇文章的标题不是关于机器学习的“前5件事”或“前5件事”;这只是“5件事”。它既不权威也不详尽,只是可能有用的5件事的集合。1.数据准备占机器学习的80%,所以……在机器学习任务中,数据准备占了很大一部分时间;或者,至少,看起来大部分时间。很多人都这么认为。我们经常讨论执行数据准备的细节及其重要性;但我们要注意的远不止这些。这就是为什么我们应该关心数据准备。我的意思不仅仅是为了获得一致的数据,更像是一种哲学上的谩骂,让你明白为什么你应该拥抱数据准备。做好数据准备,做有数据准备的人。CRISP-DM模型中的数据准备。我能想到的关于机器学习的一些最佳建议是,由于您注定要花费大量时间为大型项目准备数据,因此确定成为最好的数据准备专家是一个非常好的目标。因为这不仅仅是耗时的工作,数据准备实际上对后续步骤(无效数据输入、无效数据输出等)非常重要,并且因数据准备不当而声名狼藉这不会是最糟糕的事情在世界上。所以,是的,虽然数据准备可能需要一段时间才能执行和掌握,但这确实不是一件坏事。数据准备的必要性有很多机会,既适用于脱颖而出的专业人士,也适用于展示您良好工作能力的内在价值。2.性能基线值当你用特定算法模拟一些数据,并花费大量时间调整你的超参数,实现一些工程特性和/或选择;你很高兴,因为你已经钻出了如何训练准确率,假设准确率是75%。你对你所做的工作很满意。但是,你比较了你得到的结果是什么?如果您没有基线——比经验法则更容易将数据与之进行比较的全面检查——那么您实际上并没有将艰苦工作的结果与任何东西进行比较。那么,是否有任何理由理所当然地认为任何准确性在不与其他数据进行比较时都是有价值的呢?很明显不是。随机猜测不是基线的最佳方法;相反,有广泛接受的方法来确定用于比较的基线的准确性。例如,Scikit-learn在其DummyClassifier类中提供了一系列基线分类器:stratified通过尊重训练集类别分布来生成随机预测。most_frequent总是预测训练集中出现频率最高的标签。prior总是预测最大化优先级的类(如'most_frequent')并且'predict_proba'返回类的优先级。uniform随机生成预测。常量总是预测用户提供的常量标签。基线也不仅仅是分类器;例如,基线回归统计方法也存在于任务中。在探索性数据分析、数据准备和预处理之后,建立基线是机器学习工作流程中合乎逻辑的下一步。3.验证:不仅仅是训练和测试当我们构建机器学习时当我们构建模型时,我们使用训练数据来训练它们。当我们测试生成的模型时,我们使用测试数据。那么验证从何而来?fast.ai的RachelThomas最近写了一篇关于如何以及为什么创建良好验证集的文章,并介绍了以下3种类型的数据:用于训练给定模型的训练集用于在模型(例如随机森林或神经网络)之间进行选择的验证集哪个能更好地解决你的问题?你想要一个有40棵树还是50棵树的随机森林?)一个告诉你如何工作的测试集。如果你尝试很多不同的模型,你可能会得到一个很好的验证集,但这只是偶然的,因为总是有一个测试集不属于这个类别。那么,将数据随机分成测试、训练和验证集一定是个好主意吗?事实证明,答案是否定的。RachelinTimeSeriesData这篇文章回答了这个问题:Kaggle目前正在研究预测厄瓜多尔杂货店销售额的预测问题。Kaggle的“训练数据”从1/1/2013运行到8/15/2017,测试数据从2017年8月16日到2017年8月31日。最好使用2017年8月1日到8月15日作为验证集,所有更早的数据也可以用作你的训练集。本文的其余部分将涉及将数据集拆分为Kaggle竞赛数据,这非常实用;并且我会在讨论中加入交叉验证,读者可以按照我的方法自行探索。许多其他时候,随机拆分数据会很有用;它取决于其他因素,例如获取数据时的数据状态(是否已拆分为训练/测试数据?),以及数据的类型(请参阅上面的时间序列分类)。Scikit可能没有用于随机拆分的train_validate_test_split方法,但您可以利用标准Python库来创建自己的方法。4.集成方法比树有更多选择算法对于机器学习新手来说可能是一个挑战。在构建分类器时,尤其是对于初学者而言,通常采用解决单个算法的单个实例问题的方法。然而,在给定的情况下,级联或组合分类器更有效;这种方法使用投票、加权和组合技术来追求最准确的分类器。集成学习是一种以多种方式提供此功能的分类器。集成学习器的一个非常重要的例子是随机森林,它在一个预测模型中使用许多决策树。随机森林已成功应用于各种问题,并取得了很好的效果。但它们并不是唯一存在的集成方法,还有许多其他方法值得尝试。关于装袋操作的简单概念:构建多个模型,观察这些模型的结果,并解决大部分结果。最近我的车后桥总成出了点问题:没有听取dealer的建议,拿去另外两个维修的地方,都以为是dealer的问题提出了不同的问题由商人。这就解释了bagging在现实生活中的应用。随机森林是在bagging技术的基础上改进而来的。加速类似于装袋,但概念略有不同。它不是为模型分配相同的权重,而是增加对分类器的权重分配,并根据加权投票得出最终结果。又是我的汽车问题,也许我过去曾多次去过车库,并且比其他任何人都更相信他们的诊断。还假设我之前没有与经销商互动或打过交道,并且我对他们的能力相对缺乏信心。我分配的权重将是自反的。Stacking与前两种技术的不同之处在于它训练多个单一分类器而不是各种相同学习器的集合。虽然bagging和speedup使用许多使用相同分类算法(如决策树)的不同实例的构建模型,但堆叠构建模型也使用不同的分类算法(如决策树、逻辑回归、人工神经网络或其他组合)。然后根据其他算法的预测对组合算法进行训练,以得出最终预测。这种组合可以是任何集成技术,但逻辑回归通常被认为是执行这种组合的最合适和最简单的算法。除了分类,堆叠还可以用于无监督学习任务,例如密度估计。5.谷歌Colab?最后,让我们看一些更实用的东西。JupyterNotebook实际上已经成为数据科学开发最实用的工具,大多数人在个人电脑上运行该软件,或者通过一些其他配置——更复杂的方法(比如在Docker容器或虚拟机中)。首先,最先受到关注的是谷歌的Colaboratory,它可以让Jupyter风格和兼容的笔记本直接在你的GoogleDrive中运行,无需任何配置。Colaboratory预先配置了一些最近流行的Python库,并且通过支持的包管理,它可以在Notebooks中自行安装。例如,TensorFlow属于这一类,但Keras不属于;但是通过pip安装Keras只需要几秒钟。关于这个主题的好消息是,如果你使用的是神经网络,你可以在你的训练中启用GPU硬件加速,开启后你可以享受长达12小时的免费服务。好消息并不像最初看起来那么完美,但它是一个额外的好处,也是使GPU加速大众化的良好开端。