你能猜出这个谜语的答案吗?如果你研究机器学习,它会无处不在...如果你是程序员,你会用到它千百次...如果你练习任何技术,这是第二次你...不,答案不是狂欢咖啡……是“迭代”!是的,迭代就是为了达到一定的结果,重复一组任务的过程。等等,这不是字典定义吗?嗯,是的,这就是迭代的真正含义。我们并不是要揭开一些激动人心的秘密。但我们想以一种您可能不熟悉的方式来构建这个简单的概念。我们的目标是从与教科书上的传统方法不同的角度概述机器学习的基本概念。我们知道,大多数书籍都是以正向(顺序)的方式解释机器学习的过程:加载数据、预处理、拟合模型、预测等。这种顺序的方法当然是合理且有帮助的,但真正的机器学习很少是线性的。相反,实用的机器学习具有特殊的周期性,需要不断迭代、调整和完善。因此,我们想展示简单的迭代技术如何在机器学习中具有优美的形式和深远的意义。这篇文章是为初学者写的,但更有经验的读者也不妨阅读一下。为什么要讨论迭代?迭代是机器学习的核心概念,在很多方面都至关重要。准确了解这个简单概念在机器学习工作流程中的适用位置有许多切实的好处:1.您可以更好地理解算法2.您可以制定更切合实际的项目进度表3.您将发现更易于实施的模型改进方法4.帮助您更轻松地坚持下去,即使最初的结果不佳5.帮助您进一步解决机器学习中更复杂的问题帮助初学者理解机器学习背后的概念。因此,废话不多说,让我们从机器学习迭代的5层开始。目录模型层:拟合参数微观层:调试超参数宏观层:解决问题元数据层:改进数据人类层:提升自己。任何模型,无论是回归模型、决策树还是神经网络,都由许多(有时数百万)模型参数定义。例如,回归模型由回归系数定义,决策树由节点分类方式定义,神经网络由连接各层的权重定义。但是机器如何学习正确的模型参数值呢?迭代算法发挥作用!用梯度下降拟合参数梯度下降算法(或随机梯度下降/随机梯度下降)在机器学习中取得了巨大的成功。梯度下降是一种寻找函数最小值的迭代方法。在机器学习中,这个函数通常是一个损失(或成本)函数。“损失”是指对错误预测成本的定量衡量。给定一组参数,梯度下降计算相应模型的预测损失,然后调整这些参数以减少损失。重复这个过程,直到损失不能再减少为止。最小化损失的最后一组参数是最终的拟合模型。直观的梯度下降算法我们这里不推导梯度下降的数学公式,但是直观地给出梯度下降的概念:1.想象一座山,有谷有峰(损失函数);2.山的每一个位置(参数集)都有一个高度(loss);3.现在在山的某处放一个滚球(初始化);4.任何时刻,球都向最陡的方向(梯度)滚动;5.它一直滚动(迭代)直到它卡在某个山谷的底部(局部最小值);6.理想情况下,你想找到最好的山谷(全局最小值);7.有很多巧妙的方法可以防止小球卡在局部极小点(比如初始化多个小球,给它们更大的动量,让小球可以越过小山丘等);8.顺便说一句,如果山的形状像碗(凸函数),那么小球一定要到达***点。在实践中,调用机器学习应用程序包(如Scikit-Learn)时,并不需要从头编写梯度下降算法。微观层面:调整超参数的下一次迭代在我们所说的“微观”层面发挥着巨大作用,通常被称为通用模型或模型族。您可以将模型系列视为具有可定制结构的一大类模型。逻辑回归、决策树、支持向量机(SVM)和神经网络实际上都是不同的模型家族。在实际拟合模型参数之前,每个模型族都有一组结构可供选择。例如,在逻辑回归系列中,可以使用L1或L2正则化惩罚来构建单个模型。在决策树家族中,可以选择不同结构的模型,例如树的深度(depth)、剪枝阈值(pruningthreshold)或分裂准则(splittingcriteria)。这些结构选择变量称为超参数。为什么超参数是特殊的超参数是“更高级别”的参数,不能使用梯度下降或其他优化算法直接从数据中学习。它们描述了在拟合模型参数之前必须确定的有关模型的结构信息。因此,当人们说他们要“训练逻辑回归模型”时,他们真正的意思涉及一个两阶段过程。首先,确定模型系列的超参数。例如,模型是否应该添加L1或L2惩罚以防止过度拟合?然后,将模型参数与数据相匹配。例如,如何拟合模型系数以最小化损失函数?我们之前讨论了梯度下降如何帮助完成第2步。但是为了使用梯度下降来拟合模型参数,您必须首先从模型族中设置超参数。那么我们如何处理第1步,为模型系列找到最佳超参数?Debugginghyperparameterswithcross-validation交叉验证是很多场景下最有用的技术之一,用起来几乎有一种作弊的感觉。在这种情况下,交叉验证也是一种迭代方法,用于评估使用给定超参数集构建的模型的性能。这是通过将训练数据分成块并重用它们来重用训练数据的巧妙方法(有关详细信息,请参见下一小节)。使用交叉验证,您可以仅使用训练集来拟合和评估具有各种超参数集的模型。这意味着您可以保留测试集并将其用于最终模型选择(下一节将详细介绍)。交叉验证的详细步骤以下是使用10折交叉验证选择超参数的步骤:1.将训练集分成10等份,即“fold”;参数;3.给定一组超参数后,用前9折的训练数据训练你的模型;4.使用第10次折叠,或者单独折叠的数据(hold-out)来评估模型;5.同一套超参数重复步骤(3)和(4)10次,每次取出不同的数据折(10折必须用一次)进行评估;6.总结所有10个周期的结果,并将其作为超参数集的Performancemetrics;7.对所有备选超参数集重复步骤(2)到(6);hereisthepseudocode:#pseudocodeforcross-validationall_folds=split_into_k_parts(all_training_data)forset_pinhyperparameter_sets:model=InstanceFromModelFamily()forfold_kinall_folds:training_folds=all_foldsbesidesfold_kfitmodelontraining_foldsusingset_pfold_k_performance=evaluatemodelonfold_kset_p_performance=averageallkfold_k_performancesforset_pselectsetfromhyperparameter_setswithbestset_p_performanceWewilldiscussiterationattheproblem-solvinglevel.通常,构建的第一个模型并不完美,即使在使用交叉验证调整参数之后也是如此。这是因为拟合模型参数和调整超参数只是整个机器学习问题解决工作流程的两个部分。还有其他几种迭代技术可用于找到性能最佳的解决方案。我们认为以下两种技术可以相对轻松地提高预测性能。尝试不同的模型族机器学习中有一个概念叫做“没有免费午餐定理(NFL/NoFreeLunchtheorem)”。人们对NFL定理有不同的解释,但我们担心的是:没有一个模型家族对所有问题都是最好的。由于数据类型、问题域、稀疏数据甚至收集的数据量等各种因素,不同的模型族会表现不同。因此,改进给定问题的解决方案的最简单方法之一是尝试多个不同的模型系列。Thislevelofiterationishigherthantheotherlevelsbefore.下面是伪代码:#eudocodeforselectingmodelfamilytraining_data,test_data=randomly_split(all_data)list_of_families=logisticregression,decisiontree,SVM,neuralnetwork,etc…formodel_familyinlist_of_families:best_model=tunedwithcross-validationontraining_dataevaluatebest_modelfromeachmodel_familyontest_dataselectfinalmodel请注意,这里的交叉验证步骤与上一节中的交叉验证步骤相同。这种漂亮的嵌套迭代形式是解决机器学习问题的有效方法。组合模型改进解决方案的下一个方法是将多个模型组合成一个整体。这是拟合这些模型的迭代过程的直接扩展。我们将保留对不同集成方法的详细讨论,但集成的一种常见形式是简单地平均多个模型的预测。当然,还有更高级的方法来组合您的模型,但拟合多个模型的迭代方法是相同的。与任何单个模型相比,这种预测组合通常具有较小的性能增益。下面是构建一个简单的整合模型的伪代码:#pseudocodeforbuildingasimpleensemblemodaltraining_data,test_data=randomly_split(all_data)list_of_families=logisticregression,decisiontree,SVM,neuralnetwork,etc…formodel_familyinlist_of_families:best_model=tunedwithcross-validationontraining_dataaveragepredictionsbybest_modelfromeachmodel_family…profit!(often)请注意,该大部分过程与之前的技术完全相同!实际上,这意味着您可以轻松地复制这两种技术。首先,您可以从各种不同的模型系列中构建***模型。然后你可以整合它们。***,您可以在同一测试集上评估单个模型和集成模型。最后要提醒的是:你应该总是单独拿出一个未经测试的测试集来选择你的最终模型。我们建议在建模过程开始时将数据拆分为训练集和测试集。在***之前不要使用测试集。元数据级别:改进的数据更好的数据胜过更好的算法,但这并不总是意味着更多的数据胜过更好的算法。是的,更好的数据通常意味着更多的数据,但它也意味着更干净的数据、更相关的数据以及具有更好特征的数据。改进数据也是一个迭代过程。当您迎接更大的机器学习挑战时,您会意识到很难从一开始就正确获取所有数据。也许有一些您还没有想到的关键功能。也许你没有收集足够的数据。也许您误解了数据集中的一列,需要返回并向同事重新解释。一个伟大的机器学习从业者总是保持开放的心态,不断改进数据集。收集更好的数据收集更好的数据的能力是一种随着时间、经验和其他领域专业知识而发展的技能。例如,如果您正在构建房地产定价模型,您应该收集有关房屋本身、社区甚至过去缴纳的财产税的公开信息。更好数据的另一个要素是数据的整体清洁度。这意味着减少丢失的数据,减少测量错误,并尽最大努力用主要指标代替代理指标。以下几个问题可以激发改进数据集的想法:您收集的数据是否具有您想要的所有特征?你能更好地清理数据吗?你能减少测量误差吗?是否存在可以移除的异常值?收集更多数据成本低廉吗?设计更好的特征特征工程,或通过利用领域知识从数据中创建新特征,是改进模型最有价值的活动。它通常既困难又耗时,但被认为是应用机器学习的关键。因此,作为机器学习的从业者,您有责任在您选择的领域继续学习。这是因为当你对这个领域了解得越多,你就会对最具影响力的人的特征有更好的直觉。您还应该将学习过程视为一个迭代过程,随着您专业知识的增长而改进。人类层面:提升自己我们现在已经达到了机器学习中最重要的层面:人类层面。即使您忘记了本文中的所有内容,我们也希望您能从本节中学到一些东西。事实是:机器学习和数据科学是非常大而且麻烦的学科。特别是如果您是初学者,您可能会感到不知所措。内容如此之多,每天都有新的发展。你知道吗?机器学习部分对我们来说仍然非常困难和困惑。但这没关系,因为我们坚信最重要的迭代层面是在个体层面,即机器学习从业者。所以我们想用一些建议来结束这篇冗长的文章。我们希望这最后一部分能帮助您随时了解情况,而不是被该领域的信息过载所淹没。#1。不要停止学习如上所述,迭代内置于机器学习过程的每一层。你的个人技能也不例外。机器学习是一个深奥而丰富的领域,你练习得越多,它就会变得越容易。#2。不要从一开始就期望***你不需要赢得你的第一场Kaggle比赛。即使你发现自己建立的模型完全没有用也没关系,最宝贵的财富是你个人的成长和提升,这应该是你的主要关注点。#3。什么都不知道也没关系事实上,一个人几乎不可能对机器学习一无所知。关键是建立一个基础来帮助你根据需要选择新的算法和技术。是的……理解迭代也是基础的一部分。#4。至少尝试两次为算法或任务苦苦挣扎?花费的时间比您想象的要长吗?没问题,记得至少再试一次。在您尝试的那一刻,一切都变得更容易、更快,这是您进步的好方法。#5。在理论、实践和项目之间循环我们认为学习机器学习最有效的方法是在理论、有针对性的实践和更大的项目之间循环。这是在发展应用实践技能的同时掌握理论的最快方法。总结迭代是一个简单而美好的概念,它将机器学习的各个层面粘合在一起:调试模型超参数的验证模型级:梯度下降以拟合模型参数
