自动机器学习(AutoML)是一种计算机化的方法,用于确定数据预处理、模型和超参数的最佳组合,以完成预测建模任务。AutoML模型旨在自动化所有耗时的操作,如算法选择、代码编写、管道创建等。简而言之,AutoML可以帮助机器学习从业者以最小的输入快速高效地完成预测建模工作。市场上有多种开源的AutoML工具可以加速机器学习进程,本文将探索其中一种名为“AutoKeras”的工具。
大多数深度学习项目使用Keras,这是一个基于TensorFlow的高级深度学习API。AutoKeras是一个基于Keras的开源AutoML框架,由德克萨斯A&M大学DATA实验室设计,旨在帮助用户快速构建高性能模型,而无需机器学习专业知识。尽管有其他工具具有类似的目标,但AutoKeras专注于深度学习。可以使用这个库来创建深度学习模型,而无需自己开发架构。
AutoKeras选择层的布局和神经元的数量。此外,它甚至可以选择其他超参数,如优化和损失函数。如果数据列包含文本,它将将其转换为嵌入;如果列值是固定的类别,它将为任务(如预测、检测等)将其转换为独热编码。只需要提供训练数据,AutoKeras将完成其余工作。
AutoKeras围绕四个关键特性构建,使其易于安装和使用:
本教程将探讨如何使用AutoKeras进行分类和回归任务。本教程使用Google Colab,当在不同平台如Jupyter notebook使用时,需要适当修改导入命令。
将使用以下代码安装AutoKeras库:
pip install autokeras
还将导入所有必要的包和库:
import autokeras as ak
import pandas as pd
from sklearn.model_selection import train_test_split
对于AutoKeras的分类任务,使用Pima印第安人糖尿病数据集。将预测患者是否可能患上糖尿病。数据集包含768行,涉及患者健康的9个不同特征。数据集可以从下载。
让查看此数据集的特征及其描述:
让使用以下命令查看数据集的前几行。
df.head()
将数据集分为训练集和测试集,下一步将使用80:20的比例进行划分。将使用AutoKeras的StructuredDataClassifier函数来找到最佳分类模型。这一步将设置max trials为5,即尝试的最大Keras模型数量,以及将epochs参数设置为50。AutoKeras的StructuredDataClassifier函数接受不同类型的输入格式。可以提供pandas DataFrame和其他格式,如NumPy数组和TensorFlow数据集。它还允许显式输入URL或文件路径,模型将立即下载并使用。
clf = ak.StructuredDataClassifier(max_trials=5)
clf.fit(X_train, y_train, epochs=50)
运行代码后,获得了超过80%的预测准确率。搜索被限制在50个周期和五个架构,max trials设置为5。增加这些值将给更高的准确率,但也需要更长的时间来完成。由于这些结果是随机的,因此在不同机器上使用相同设置运行时,准确率可能会有所不同。然后,可以在测试数据集上评估模型,以确定其在测试数据上的性能。
loss, acc = clf.evaluate(X_test, y_test, verbose=0)
print('Accuracy: %.2f' % acc)
可以使用以下命令打印其架构的摘要:
model = clf.export_model()
model.summary()
可以使用以下代码查看模型的可视化表示:
from tensorflow.keras.utils import plot_model
plot_model(model)
可以通过更多的周期和试验来提高模型性能。一旦获得可接受的准确率,可以使用以下命令保存模型。
model.save('/content/models/classification_model',save_format="tf")
现在可以使用这个保存的模型对未见数据进行预测。使用Keras的load_model功能导入受保护的模型。
from keras.models import load_model
new_model = load_model('/content/models/classification_model')
print(new_model)
这个模型现在可以直接用于进行预测,但重要的是要注意,不需要重新训练这个模型。
为了演示AutoKeras在回归任务中的应用,将使用sklearn数据集中的加利福尼亚房价数据集。将预测加利福尼亚郊区的房产中值价格。数据集包含20640行数据,涉及加利福尼亚房价的8个不同特征。让首先从sklearn.datasets导入数据集。
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
print(housing.DESCR)
需要从这个导入的数据集中创建一个数据框。这可以通过以下方式实现:
df=pd.DataFrame(data=housing.data,columns=housing.feature_names)
df["MedHouseVal"] = housing.target
df.shape
现在将使用以下命令打印数据集的前五行。
df.head()
接下来,将数据集分为训练集和测试集,使用80:20的比例。将使用AutoKeras的“structured data regressor”函数进行此示例,因为想要预测价格。“structured data regressor”函数生成一个回归模型,接受x作为结构化数据集和y作为标签列,即目标列。在这种情况下,将max trials设置为5,epochs设置为50。让开始训练过程以找到最佳模型。
reg = ak.StructuredDataRegressor(max_trials=5,overwrite=True,metrics=['mae'])
reg.fit(X_train.to_numpy(),y_train.to_numpy(), validation_split=0.2,epochs=50, verbose=0)
然后,可以在测试数据集上评估模型,以确定其在测试数据上的性能。
reg.evaluate(X_test, y_test)
最佳模型生成了以下预测。
predicted = reg.predict(X_test).flatten() * 100000
real = y_test.to_numpy() * 100000
for i in range(10):
print('Predicted price:', predicted[i].round(3))
print('Real price:', real[i].round(0))
print('')
上述结果可能是随机的,因此,在其他机器上使用相同设置运行这些模型时,可能会有不同的预测值。如果运行更多的试验和周期,肯定会获得更好的结果。此外,重要的是要记住,AutoKeras选择的最佳模型不涉及超参数调整。使用已知且已训练的模型来修改给定范围内的一些参数,以进行超参数调整以提高性能。
可以使用以下命令打印其架构的摘要:
keras_model = reg.export_model()
keras_model.summary()
可以使用以下代码查看模型的可视化表示:
from tensorflow.keras.utils import plot_model
plot_model(keras_model)
最后,可以使用以下命令保存模型,以便对未见数据进行预测。
model.save('/content/models/regression_model',save_format="tf")