端到端机器学习项目的最佳方法 [2022]
已发表: 2021-01-01机器学习正在加快步伐,并且在很长一段时间内一直是争论的焦点。 该领域的一些非常出色的算法和架构使得机器学习的概念可以应用于实际和生活世界。
它不再只是一个研究概念,并且已经深入到有用的应用领域。 今天,比以往任何时候都更需要掌握机器学习项目的端到端管道艺术。
许多人对机器学习的兴趣与日俱增,并且有大量可用资源可以帮助您了解 ML 和 AI 的基础知识。 许多课程带您从学习一些基本概念到最终构建一些最先进的模型。
但就是这样吗? 我们真的学会了如何访问数据吗?我们真的知道如何清理数据以便我们的机器学习模型可以从中提取有用的特征吗? 那么部署部分呢? 在我们完成这些课程和课程后,有很多类似的问题在我们的脑海中仍未得到解答。
由于对任何项目的完整端到端机器学习管道缺乏了解,就会出现此问题。 在本文中,我们将通过一个这样的管道来了解究竟需要做什么才能在任何 ML 项目的实际场景中获得更好的结果。
最能说明这一点的一本书是 Aurelien Geron 的 Hands-on Machine Learning with Scikit-Learn、Keras 和 TensorFlow。

为了更好地理解,这个端到端管道可以分为几个步骤,它们是:
- 理解问题陈述
- 获取所需数据
- 了解数据
- 清理数据
- 选择最佳模型进行训练
- 微调超参数
- 展示结果
- 部署和维护系统
为了更好地理解任何现实生活中的机器学习项目的流程,我们将使用加利福尼亚房价预测问题的流行示例。 我们将讨论与此问题陈述相关的所有上述要点。 不同的项目可能会有一些细微的变化,但总体目标保持不变。
目录
理解问题陈述
为了构建一个好的解决方案,需要非常清楚地理解问题陈述。 您很可能最终会构建和训练机器学习模型,但现实生活中的应用领域需要的不仅仅是模型。 模型的输出应该与最终用户的确切需求相匹配。
对于这个特定的示例,我们获得了一个包含加利福尼亚州所有指标的数据集,例如人口、收入、房价等。 模型所需的输出是它应该能够根据其他属性(如位置、人口、收入等)预测房屋的定价。
这一步的重要原因是要准确了解需要做什么以及需要什么样的解决方案。 这是关于如何处理问题陈述的主要头脑风暴部分。
阅读:面向初学者的机器学习项目创意
获取所需数据
一旦您清楚地理解了问题陈述并决定使用机器学习方法来解决问题,您应该开始搜索相关数据。 数据是任何机器学习项目中最重要的组成部分,因此您必须仔细查找并仅选择质量数据。 ML 模型的最终性能取决于训练时使用的数据。
有各种来源可以找到数据,这些数据也可以帮助理解现实示例中的数据分布。 对于我们的示例,我们可以从 Kaggle 获取加利福尼亚房价预测数据集。 此数据为 CSV 格式,因此我们将使用 Pandas 库加载数据集。
了解数据
能够理解您正在使用的数据是 ML 解决方案的一个非常重要的方面。 这使我们能够选择更适合项目的算法或模型架构。 在开始详细查看数据之前,最好先将数据集拆分为训练集和测试集。 这使测试集保持不变,从而减少了过度拟合测试集的机会。 通过这样做,您可以消除模型中的数据窥探偏差。
有多种方法可以将数据集拆分为这些训练集和测试集。 其中之一是用硬编码的百分比值拆分它。 在大多数情况下,90% 的训练和 10% 的测试是一个常见的值。
拆分后,您必须深入可视化训练集以了解数据。 当前数据集包括纬度和经度点,因此,使用散点图根据位置查看密度非常有帮助。
查找数据集中两个属性之间的相关性有助于了解哪些属性与所需属性的相关性更高。 在这种情况下,我们需要找出数据集中哪个属性与房价相关性更高。 这可以通过使用 corr() 方法在 Scikit-Learn 中轻松完成。 它为每个属性相对于另一个属性返回一个值。 因此,如果您需要查看与房价的关系,您可以这样做:
corr_matrix[“median_house_value”].sort_values(ascending=False)
中位数房屋价值 1.000000收入中位数 0.687170total_rooms 0.135231Housing_median_age 0.114220家庭 0.064702总卧室 0.047865人口 -0.026699经度 -0.047279纬度-0.142826
在这里,可以看出median_income与房价直接相关,而纬度值与房价间接相关。
最后,你也可以尝试通过将一些属性组合在一起来做一些特征工程。 例如,total rooms_per_household可以比单独的total_rooms或家庭值提供更多信息。
清理数据
在此步骤中,您将为机器学习项目准备数据。 这是整个管道中最耗时和最重要的一步。 模型的性能主要取决于您准备数据的程度。 通常,为此目的编写函数是一个好习惯,因为它允许您在需要时使用这些函数,并且可以在生产线中使用相同的函数来准备新数据以进行预测。
真实数据中最常遇到的问题之一是数据集中一些条目的缺失值。 有几种处理方法。 您可以直接删除整个属性,但这对模型不是很好。 您可以删除具有一个缺失值的行。 最常用的另一种方法是将缺失值设置为其他值,例如零或整列的算术平均值(如果它是数值)。

对于分类值,最好用数字表示它们并将它们编码为 one-hot 编码,以便模型更容易处理它。 Scikit-Learn 还提供了 OneHotEncoder 类,以便我们可以轻松地将分类值转换为 one-hot 向量。
您必须注意的另一件事是特征缩放。 可能有一些属性的值范围非常大。 因此最好将它们缩放到标准比例,以便模型可以轻松地使用这些值并表现更好。
另请阅读:印度机器学习工程师的薪水
选择最佳模型进行训练
在完成所有的数据清洗和特征工程之后,下一步就变得相当容易了。 现在,您所要做的就是在数据上训练一些有前途的模型,并找出能够提供最佳预测的模型。 有几种方法可以帮助我们选择最佳模型。
我们的加利福尼亚房价预测示例是一个回归问题。 这意味着我们必须从一系列数字中预测一个值,在这种情况下,就是房价。
这里的第一步是训练几个模型并在验证集上测试它们。 您不应该在这里使用测试集,因为它会导致对测试集的过度拟合,最终模型将具有非常低的正则化。 从这些模型中,大部分时间应该选择具有良好训练准确度和验证准确度的模型。 它也可能取决于用例,因为某些任务需要与其他任务不同的配置。
由于我们已经清理了数据并且预处理功能已准备就绪,因此使用 Scikit-Learn 或 Keras 等框架在三到四行代码中训练不同的模型非常容易。 在 Scikit-Learn 中,我们还有一个交叉验证选项,这有助于为决策树等模型找到好的超参数。
微调超参数
在有几个模型入围后,需要微调超参数以释放它们的真正潜力。 也有很多方法可以实现这一点。 其中之一是您可以手动更改超参数并一次又一次地训练模型,直到获得满意的结果。 在这里,您可以清楚地看到无法像自动化任务那样检查出尽可能多的组合的问题。 所以这里有一些很好的方法来自动化这些东西。
Grid Search是 Scikit-Learn 以 GridSearchCV 类的形式提供的一项出色功能,它自己进行交叉验证并找出完美的超参数值以获得更好的结果。 我们所要做的就是提到它必须试验哪些超参数。 这是一个简单但非常强大的功能。
随机搜索是另一种可用于类似目的的方法。 当需要试验的超参数空间较小时,网格搜索效果很好,但是当超参数数量很大时,最好使用 RandomizedSearchCV。 它尝试随机超参数并得出它所见过的最佳值。
最后但并非最不重要的是集成学习的方法。 在这里,我们可以使用多个模型来给出各自的预测,最后,我们可以选择最终的预测作为所有模型的平均值。 这是一种非常有前途的方法,并且在 Kaggle 上赢得了很多比赛。
在为最终模型微调所有超参数后,您可以使用该模型对测试集进行预测。 在这里,我们可以评估模型在测试集上的表现。 请记住,在此之后您不应该微调您的模型以提高测试集的准确性,因为它会导致测试集样本的过度拟合。
展示结果
一旦选择了最佳模型并完成了评估,就需要正确显示结果。 可视化是制作更好的机器学习项目的关键,因为它全都与数据和理解其背后的模式有关。 对于已经熟悉该领域的人来说,原始数字结果听起来不错,但在图形和图表上将其可视化非常重要,因为它使项目具有吸引力,并且每个人都可以清楚地了解我们的解决方案中实际发生的情况。
部署和维护系统
大多数学习者到达管道的这个阶段并在尝试将项目部署到现实生活场景中时面临巨大的问题。 在 Jupyter Notebook 中构建和训练模型非常容易,但重要的是成功保存模型,然后在实时环境中使用它。
ML 工程师面临的最常见问题之一是实时接收的数据与他们训练模型的数据存在差异。 在这里,我们可以使用我们在创建用于训练模型的管道时构建的预处理功能。
可以部署两种类型的机器学习模型:在线模型和离线模型。 在线模型是不断从实时接收的数据中学习的模型。 离线模型不会从新样本中学习,如果它接收到的数据类型发生变化,则必须正确更新和维护。 因此,这两种型号都需要进行适当的维护。
在部署机器学习模型时,需要将它们包装在一个平台中,以便用户轻松与它们交互。 选项很广泛,我们可以将其封装在 Web 应用程序、Android 应用程序、Restful API 等等中。 构建此类应用程序或 API 的基本知识是一个巨大的优势。 您应该能够在 Google Cloud Platforms、Amazon Web Services 或 Microsoft Azure 等云服务上部署 NodeJS 或 Python 应用程序。

如果您对 Django 或 Flask 等框架不满意,您可以尝试使用 Streamlit,它允许您以 Web 应用程序的形式部署 Python 代码,只需几行附加代码。 可以探索各种此类库和框架。
结论
总结整篇文章,我想说机器学习项目在管道方面与其他传统项目有很大不同,如果你设法掌握了这条管道,其他一切都会变得容易得多。
许多初学者往往忽略的端到端管道的一些最重要的步骤是数据清理和模型部署。 如果这些步骤都得到了处理,那么剩下的部分就像任何其他项目一样。
遵循这些步骤并为项目设置管道有助于您对任务有清晰的认识,并且调试问题变得更易于管理。 因此,我建议您完成这些步骤并尝试使用此清单实施您自己的端到端机器学习项目。 拿起问题陈述,找到数据集,然后继续享受您的项目的乐趣!
如果您有兴趣了解有关机器学习的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和人工智能 PG 文凭,该文凭专为工作专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和作业、IIIT- B 校友身份、5 个以上实用的实践顶点项目和顶级公司的工作协助。
什么是机器学习或 ML?
系统无需从提供的数据中明确编程即可学习任务的能力称为机器学习。 该领域专注于开发可以访问数据并自行学习的计算机程序。 它是广阔的人工智能(AI)学科的一个子领域。 几乎所有行业都在实施机器学习,以提高生产力、营销、销售、客户满意度和企业利润。 许多 IT 专家对此很感兴趣,他们正在考虑转行。
什么是端到端 ML 项目?
端到端机器学习项目涉及数据准备、模型训练和模型部署等步骤。 它由管道组成,这些管道是编写代码和自动化工作流程的方式。 这些管道,如果编译得当,就会形成一个成功的机器学习项目。 理解问题陈述、获取适当的数据、理解数据、清理数据、选择训练的最佳模型、微调超参数以及呈现结果只是其中的一些阶段。
机器学习中的超参数是什么?
超参数是机器学习中的一个参数,其值用于影响学习过程。 它们可以分为两部分,模型超参数和算法超参数。 在将机器提供给训练集时不能假设模型超参数,因为它们直接用于模型选择任务。 相比之下,算法超参数对模型的性能没有影响,但会影响学习过程的速度和质量。 不同的模型训练技术需要不同的超参数,但有一些基本算法不需要任何超参数。