低代码AI:机器学习库和框架

发布时间:2024年01月18日

本章介绍了简化机器学习(ML)模型开发的ML框架。通常情况下,您需要了解数学、统计和ML的基本工作原理,才能构建和训练ML流程。这些框架通过自动化许多耗时的ML工作流任务,如特征选择、算法选择、代码编写、流程开发、性能调整和模型部署,来帮助您。

无代码自动机器学习(No-Code AutoML)

想象一下,您是一家公用事业公司的业务分析师。您有一个项目,需要帮助公司开发面向高电能消耗社区的营销和宣传计划。数据以逗号分隔值(CSV)文件格式提供。

您没有机器学习(ML)背景,也没有任何编程知识,但团队领导要求您承担这个项目,因为您表达了对ML以及如何在组织中应用ML的兴趣。尽管您没有编程经验,但您的一些初步研究结果得出了以下一些观察:

  • 对于像您这样的非编码人员,有自动化的无代码ML框架,具有图形用户界面(GUI),您可以使用它们来构建和训练ML模型,而无需编写一行代码。
  • 对于轻度编程人员,有低代码ML框架,可以通过编写少量代码来构建和训练ML模型。
  • 对于经验丰富的编程人员,有ML库,允许您在ML工作流的每个阶段编写代码,从而获得更大的灵活性和控制。

基于您的公用事业市场推广项目和使用案例中的数据,您确定目标是基于多个变量(邮政编码、月份、年份和客户类别:住宅、商业、工业和农业)来预测总千瓦时(kWh)电能消耗。

假设您需要快速获得一个基准预测,这是使用AutoML的绝佳用例。基于图形用户界面(GUI)的AutoML框架最容易使用。图?3-1 显示了您可以用于业务用例的典型AutoML无代码工作流程的高层概述。本例使用了谷歌的Vertex AI,这是一个帮助您构建、部署和扩展ML模型的ML平台。总的来说,谷歌AutoML、微软Azure AutoML和AWS SageMaker AutoML都是功能强大的AutoML解决方案,可以帮助您构建和部署ML模型,而无需编写任何代码。最适合您的解决方案将取决于您的具体需求和要求。

image.png

由于文件格式是CSV,您选择了“表格”选项卡。鉴于总kWh是输出,并且是您要预测的数值,您可以看出这是一个回归任务。由于您拥有多个变量的列名(或标签),这是一个监督式机器学习问题。没有标签的数据需要进行无监督的机器学习任务,比如聚类。图3-2 显示了选择了“回归/分类”作为目标。

image.png

一些框架在数据加载后会生成统计信息。其他框架可以通过自动检测和清理缺失值、异常值以及重复的行和列来减少手动清理数据的需要。请注意,还有一些额外的步骤可以采用,比如在加载数据后检查缺失值和查看数据统计信息。图3-3显示了数据集上传选项。

image.png

图3-4显示了使用Google的Vertex AI框架生成的能源公用事业数据集的统计信息。没有缺失值,并且每列的不同值数量都显示出来。例如,有145个邮政编码。由于邮政编码是一个数字,所以“转换”列显示为“数字”。然而,邮政编码是一个分类特征,因为每个邮政编码都不同,因此可以被归入自己的“类别”中。将邮政编码从数字变为分类特征只需选择下拉菜单以自定义转换。

image.png

图3-5显示了邮政编码现在作为一个分类特征。还请注意最右边的列,您可以选择或取消选择要用于训练的特征。

image.png

AutoML呈现了每个特征的数据概况。图3-6显示了92694邮编作为最常见的特征,这表明更多的客户住在该邮编区域。您可以利用这些信息进行您的营销活动。

image.png

在第3步,您可以选择一些培训参数来训练一个新模型。Vertex AI的“Train new model”窗口允许您选择训练方法、模型详细信息、训练选项以及计算和定价。请注意,在“训练方法”参数中,数据集和目标(回归)被显示为输入。AutoML是默认选择的。图3-7显示了“Train new model”窗口。

image.png

一旦所有参数都输入完毕,您就可以开始训练作业。图3-8显示它已准备好提交训练作业以进行训练。

image.png

在训练后,将呈现模型训练结果。现在,您可以在进行下一步之前向团队展示初步发现,下一步可能包括更多的实验或将模型部署为一个网页,用户可以在上面选择客户类别和邮政编码,然后显示预测的总kWh。

图3-9显示了训练结果。在接下来的章节中,您将看到一个完整的AutoML项目示例,其中会更详细地讨论图3-9中呈现的指标。

image.png

模型特征归因告诉您每个特征对模型训练的影响有多大。图3-10显示了归因值以百分比表示;百分比越高,相关性越强,也就是说,该特征对模型训练的影响越大。模型特征归因是使用采样的Shapley方法来表示的(请参考GitHub上的术语表)。

image.png

图3-11显示了模型元数据。您可以看到有关模型的各种信息,从其ID、创建日期和训练时间,到使用的数据集、目标列、数据拆分百分比分配以及在这种情况下使用的模型评估指标,即均方根误差(RMSE)。单击“模型”或“试验”可让您获取有关AutoML使用的模型的信息。

image.png

AutoML是如何工作的

实施机器学习工作流程是耗时的。正如你在前面的市场营销项目中所看到的,AutoML 简化了为你构建机器学习模型的过程,无需编写任何代码。在该项目中,图 3-12 显示了工作流程,其中的第 2、3 和 4 阶段都不需要编写代码。

image.png

为了更好地理解 AutoML 的工作原理,请注意你不需要做的事情!首先,你不需要设置运行 Python Jupyter Notebook 的环境。无需安装任何软件库。事实上,根本不需要安装任何东西。一旦你将 CSV 数据文件上传到 Vertex AI,文件就会存储在云端。如果你使用 Python 和 Pandas,那么无需编写任何代码来加载数据集,甚至不需要将数据集拆分为训练、验证和测试文件。虽然数据很干净,但有两个分类特征:邮政编码和客户类别。如果你编写了这两个特征的代码,那么你将不得不进行“独热编码”。独热编码是将分类数据变量转换为数字值的过程。以下是用于邮政编码特征进行独热编码的示例代码:

ini
复制代码
from sklearn.preprocessing import OneHotEncoder
one_hot = OneHotEncoder()
encoded = one_hot.fit_transform(df[[`zipcode`]])
df[one_hot.categories[0]] = encoded.toarray()

独热编码是特征转换或工程的一个示例。你还可以轻松地选择目标(输出)和/或取消选择特征,或者删除它们。你不必编写类似于以下示例的代码,其中从 Pandas DataFrame 中删除了“id”列:

go
复制代码
import pandas as pd
df = pd.read_csv(`/path/file.tsv`, header=0, delimiter=`\t`)
print df.drop(`id`, 1)

你的数据集中的更多特征会导致更复杂的关系,这些关系可能是非线性的。神经网络非常适用于处理非线性关系。你可能对这一切没有任何概念,所以让我们进一步详细解释一下。

正如前面所述,这是一个预测问题,因为你想知道是否可以根据平均千瓦时、客户类别、月份、年份和邮政编码来预测未来的总千瓦时。更深入地看,这种用例可以由于输入特征的数量而被视为复杂——它具有多个变量并且是多元的。这些类型的复杂关系被认为是非线性的,因为你不能简单地绘制一条“直线”来“最佳拟合”已知的总千瓦时和其他多个变量之间的关系。

这个数据集非常适合使用神经网络。神经网络在没有先前的机器学习知识的情况下难以构建。尽管神经网络是以后章节的主题,但让我们快速看一下一个图像,以确定你不必考虑的内容。图3-13显示了一个典型的神经网络,具有输入层、隐藏层和输出层。

image.png

在Python中编写神经网络的代码将类似于这样:

python
复制代码
# Create the 'Network' class and define its arguments:
# Set the number of neurons/nodes for each layer
# and initialize the weight matrices:
class Network:

    def __init__(self, 
                 no_of_in_nodes, 
                 no_of_out_nodes, 
                 no_of_hidden_nodes,
                 learning_rate):
        self.no_of_in_nodes = no_of_in_nodes
        self.no_of_out_nodes = no_of_out_nodes
        self.no_of_hidden_nodes = no_of_hidden_nodes
        self.learning_rate = learning_rate 
        self.create_weight_matrices()
        
    def create_weight_matrices(self):
        """ A method to initialize the weight matrices of the neural network"""
        rad = 1 / np.sqrt(self.no_of_in_nodes) 
        X = truncated_normal(mean=0, sd=1, low=-rad, upp=rad)
        self.weights_in_hidden = X.rvs((self.no_of_hidden_nodes, 
                                       self.no_of_in_nodes))
        rad = 1 / np.sqrt(self.no_of_hidden_nodes)
        X = truncated_normal(mean=0, sd=1, low=-rad, upp=rad)
        self.weights_hidden_out = X.rvs((self.no_of_out_nodes, 
                                        self.no_of_hidden_nodes))

    def train(self, input_vector, target_vector):
        pass # More work is needed to train the network
         
    def run(self, input_vector):
        """
        running the network with an input vector 'input_vector'. 
        'input_vector' can be tuple, list or ndarray
        """
        # Turn the input vector into a column vector:
        input_vector = np.array(input_vector, ndmin=2).T

        # activation_function() implements the expit function,
        # which is an implementation of the sigmoid function:
        input_hidden = activation_function(
            self.weights_in_hidden @ input_vector)
        output_vector = activation_function(
            self.weights_hidden_out @ input_hidden)
        return output_vector

使用Keras,编写神经网络的代码会变得更加简单。编写神经网络的代码将类似于这样:

ini
复制代码
# Import python libraries required in this example:
from keras.layers import Dense, Activation
from keras.models import Sequential
import numpy as np

# Use numpy arrays to store inputs (x) and outputs (y):
x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]]) 

# Define the network model and its arguments. 
# Set the number of neurons/nodes for each layer:
model = Sequential()
model.add(Dense(2, input_shape=(2,)))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('relu')) 

# Compile the model and calculate its accuracy:
model.compile(
    loss='mean_squared_error', optimizer='rmse', metrics=['accuracy']
) 

# Print a summary of the Keras model:
model.summary()

在构建训练作业时,您只需选择数据集,然后选择一些训练参数。不需要进行以下操作:

  • 不需要了解要使用哪种回归算法

有许多类型的回归分析技术,每种方法的使用取决于许多因素。这些因素包括目标变量的类型、回归线的形状以及独立变量的数量。

  • 不需要了解“经典机器学习”与神经网络的区别

不需要理解常用的神经网络构建模块,如层、神经元(节点)、目标、激活函数或优化器(请参阅GitHub上的词汇表)。

  • 不需要了解训练过程或任何模型优化策略

在训练过程中,AutoML专注于优化模型权重和架构。选择适当的架构是由AutoML完成的。

  • 不需要了解或指定计算资源

当您选择“一个节点”时,AutoML会选择正确的机器类型。

机器学习即服务(MLaaS)

AutoML是云供应商提供的机器学习即服务(MLaaS)平台的一部分。前三大云供应商是谷歌、亚马逊和微软。如果你对云架构和服务不熟悉,图3-14显示了典型的云“平台金字塔”。

金字塔的底层是IaaS(基础架构即服务)。将这一层视为硬件和存储层,客户使用云供应商的服务器来处理实际的计算和存储服务,用于存储数据集文件、模型、容器等等。中间层是PaaS(平台即服务)。将这一层视为提供平台(操作系统如Linux或Windows),客户可在其上运行自己的软件。顶层是SaaS(软件即服务)。AutoML是这一层的一个最好的例子,你不必配置服务器或编写代码,只需打开浏览器并使用它。

image.png

谷歌、亚马逊和微软提供服务来支持整个机器学习工作流程,包括机器学习算法的训练和调整、数据可视化、数据预处理和深度学习。它们还提供托管的Jupyter Notebook,用于使用诸如scikit-learn、Keras、TensorFlow和PyTorch等框架。表3-1显示了MLaaS的优点。

截屏2023-10-17 13.51.28.png

AutoML 是一项有价值的工具,适用于希望利用机器学习改进其运营的企业和组织。通过自动化构建机器学习模型中涉及的许多耗时且复杂的任务,AutoML 可帮助企业和组织更快地启动其模型。以下是一些关于如何在当今的企业中使用 AutoML 的具体示例:

  • 电信

电信公司正在使用 AutoML 来改善客户流失预测、欺诈检测和网络优化。

  • 制造业

制造业公司正在使用 AutoML 来提高产品质量、优化生产流程和预测设备故障。

  • 零售

零售商正在使用 AutoML 来个性化客户体验、推荐产品和优化库存水平。

  • 医疗保健

医疗保健公司正在使用 AutoML 来诊断疾病、预测患者结果和个性化治疗计划。

这些只是 AutoML 在今天的企业中使用的一些示例。随着 AutoML 技术不断成熟,预计将来会看到更多创新的 AutoML 应用。以下是 AutoML 的好处的摘要:

截屏2023-10-17 13.54.25.png

图 3-15 展示了Google的Vertex AI解决方案,图 3-16 展示了Microsoft的Azure ML Studio解决方案,图 3-17 展示了Amazon SageMaker的AutoML解决方案。

image.png

image.png

image.png

低代码 ML 框架

低代码自动机器学习需要安装和配置库,以及一些 Python 或结构化查询语言(SQL)的知识。这里定义低代码为以下情况:

  • 在现有的 ML 框架之上提供“抽象层”的 ML 框架。
  • 允许你使用 SQL 运行 ML 模型的数据库,或者允许你运行包括 ML 代码的 Python 代码的数据库。 表3-3显示了一些示例。

截屏2023-10-17 13.56.49.png

SQL ML 框架

数据分析师和数据科学家通常使用 SQL 进行数据分析。他们可以充分利用其现有的 SQL 技能和专业知识,并将其应用于机器学习,而无需具备机器学习编程的背景。如果他们懂 SQL 但不会编写 Python、Java 或 R 代码,他们可以在 SQL-ML 框架内进行机器学习项目。这就是为什么 SQL-ML 框架被认为是低代码的原因。不需要大量的 SQL 编码。

使用数据库/数据仓库进行 SQL-ML 的好处包括:

  1. 大规模数据集的模型构建:当您可以在数据所在的地方构建机器学习模型时,ML SQL 代码保持“接近数据”,减少了延迟(数据传输时间)。这对于使用深度学习处理大型数据集,其中训练需要在训练、验证和测试中迭代通过一部分数据的情况尤为重要。
  2. 与现有 ML 系统的后端集成:与云提供商的后端 ML 框架(例如 Google 的 Vertex AI、Amazon 的 SageMaker 和 Microsoft 的 Azure)集成。
  3. 常见的模型构建语句:它们都使用 CREATE MODEL SQL 命令,并将训练数据指定为表格或 SELECT 语句。然后,在数据仓库内编译和导入训练好的模型,并准备一个 SQL 推断函数,可以立即在 SQL 查询中使用。
  4. 应用场景:典型的应用包括欺诈检测、产品推荐和广告定位,这些应用因需要低延迟和实时需求而受益。

Google’s BigQuery ML

Google的BigQuery是一个数据仓库。它可以通过其机器学习工具提供预测性分析,为决策提供指导。您可以在不导出数据出BigQuery的情况下创建和训练模型。与Vertex AI类似,BigQuery ML不需要环境和依赖项设置。BigQuery ML基于浏览器,并且是无服务器的,这意味着您不需要服务器来运行它。如果您的数据已经存储在BigQuery的数据仓库中,那么您可以将这些数据用于您的机器学习项目。

Amazon Aurora ML 和 Redshift ML

亚马逊的Aurora是一个云中构建的关系数据库管理系统(RDBMS),具有完整的MySQL和PostgreSQL兼容性。Amazon Aurora ML允许您使用SQL将基于ML的预测添加到应用程序中。当您运行ML查询时,Aurora会调用Amazon SageMaker以使用各种ML算法。

Redshift ML是一个数据仓库。您可以使用SQL语句在Redshift数据上创建和训练Amazon SageMaker ML模型,然后使用这些模型进行预测。Redshift ML将模型作为SQL函数提供在Redshift数据仓库中使用。

开源机器学习库

开源自动机器学习指的是开源框架,如AutoKeras、Auto-sklearn和Auto-PyTorch,它们在现有的开源库之上增加了一个额外的抽象层。通常,您需要在Jupyter笔记本中编写以下内容:

  1. 安装AutoML包。
  2. 导入包。
  3. 载入数据集。
  4. 数据分割。
  5. 拟合模型。
  6. 预测。
  7. 评估。
  8. 导出模型。

在第4步之后,每个开源框架都有自己的方式来执行模型拟合、预测和评估。图3-18显示了前四个步骤。

image.png

AutoKeras

AutoKeras是一个基于Keras的开源AutoML框架,旨在让非专家能够快速构建具有最少代码的神经网络。使用AutoKeras时,您只需要指定训练数据,AutoKeras会独立执行数据预处理。例如,如果数据包含分类变量,它会根据任务是分类还是回归来将它们转换为独热编码;如果输入数据包含文本,AutoKeras会将其转换为嵌入表示。

Auto-Sklearn

Auto-sklearn是一个基于scikit-learn机器学习库的开源Python包。Auto-sklearn会自动搜索适合新的机器学习数据集的学习算法,并优化其超参数。该框架仅支持基于scikit-learn的模型。Auto-sklearn由弗莱堡大学和汉诺威大学的实验室开发。

Auto-PyTorch

除了Auto-sklearn外,弗莱堡-汉诺威AutoML团队还开发了一个基于PyTorch的AutoML框架,专注于深度学习。Auto-PyTorch被认为非常适合快速原型开发,并支持分布式训练。

总结

业务分析师、数据分析师、公民数据科学家、数据科学家、软件开发人员和机器学习工程师都可以使用AutoML框架来简化开发流程。

首先,您加载一个包括目标变量和用于预测的输入特征数据的数据集。数据加载后,会为每个数据列生成数据概要。要提交一个训练作业,您只需选择一些参数。

然后,AutoML会尝试多个模型并执行模型优化。结果会被呈现出来,还有特征归因信息。 云供应商提供MLaaS服务,以加速和自动化日常ML工作流程,提供工具来将模型集成到应用程序或服务中,以及部署模型到生产环境中。

低代码AutoML需要安装、配置库,并具备一些SQL或Python的知识。开源AutoML是指开源框架,如AutoKeras、Auto-sklearn和Auto-PyTorch,它们在现有的开源库之上增加了一个额外的抽象层。 在第4章中,您将构建一个AutoML模型来预测广告媒体渠道的销售情况。首先,您将使用Pandas探索数据。然后,您将学习如何使用AutoML来构建、训练和部署一个ML模型来预测销售情况。

文章来源:https://blog.csdn.net/2301_81940605/article/details/135644053
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。