H2O AutoML平台介绍与应用

H2O是一个分布式内存机器学习平台,具有线性可扩展性,支持最广泛使用的统计和机器学习算法,包括梯度提升机、广义线性模型、深度学习等。H2O中的AutoML功能可以自动化构建大量模型的过程,目标是在数据科学家无需任何先验知识或努力的情况下找到“最佳”模型。

当前版本的H2O AutoML默认训练和交叉验证随机森林、极端随机森林、梯度提升机(GBMs)的随机网格、深度神经网络的随机网格、固定网格的广义线性模型(GLMs),并在最后训练两个堆叠集成模型。一个集成包含所有模型(针对模型性能优化),第二个集成只包含每个算法类别/家族中表现最佳的模型(针对生产使用优化)。

自动化机器学习(AutoML)是自动化将机器学习应用于现实世界问题的端到端过程。在典型的机器学习应用中,工作阶段(和子阶段)通常包括数据准备、数据预处理、特征工程、特征提取、特征选择、模型选择、超参数优化(以最大化最终模型的性能)。这些步骤往往超出了非专家的能力。H2O AutoML被提出作为基于人工智能的解决方案,以应对应用机器学习日益增长的挑战。

要开始使用H2O,首先需要导入h2o Python模块和H2OAutoML类,并初始化本地H2O集群。H2O库可以通过运行pip安装。接下来,在jupyter笔记本中导入库。这里,导入了pandas库用于数据预处理工作。

pip install h2o import pandas as pd import h2o from h2o.automl import H2OAutoML

使用指定参数(nthreads和max_mem_size)初始化H2O是可选的。

h2o.init(nthreads=-1, # 启动新H2O服务器时的线程数 max_mem_size=12 # 以千兆字节为单位 )

每年10月10日庆祝世界精神卫生日。这一天的目标是提高对全球精神卫生问题的认识,并动员支持精神卫生的努力。根据一项匿名调查,大约有4.5亿人患有精神障碍,这可能是全球健康不佳和残疾的主要原因之一。任务是理解和观察公司所有员工的精神健康状况。因此,需要根据提供的特征预测员工的倦怠率,从而帮助公司为员工采取适当的措施。

将训练/测试集导入H2O。这里,导入了员工数据,用于预测员工在远程工作场景中倦怠的概率。

train = h2o.import_file("C:/Burnout_Rate_Prediction/dataset/train.csv") test = h2o.import_file("C:/Burnout_Rate_Prediction/dataset/test.csv")

将H2O框架转换为Pandas数据框架。这样做是为了使数据操作更容易进行。同时,删除包含缺失值的行。

train_as_df = h2o.as_list(train, use_pandas=True) train_as_df = train_as_df[train_as_df['Burn Rate'].notna()] train_as_df = train_as_df[train_as_df['Mental Fatigue Score'].notna()] train_as_df = train_as_df[train_as_df['Resource Allocation'].notna()] train_as_df.head(2)

检查是否有任何缺失值。在这种情况下,没有缺失值需要处理。

round((train_as_df.isnull().sum() * 100 / len(train_as_df)), 2).sort_values(ascending=False)

将Pandas数据框架转换回H2O框架以继续进一步处理。

train = h2o.H2OFrame(train_as_df)

首先,确定预测变量和响应变量。由于正在预测员工的“倦怠率”,因此它将是响应变量。数据框架中的其余变量将形成预测变量。

x = train.columns y = "Burn Rate" x.remove(y)

运行AutoML以构建10个基础模型(默认最大运行时间限制为1小时)。'max_models'参数指定个体(或“基础”)模型的数量,不包括可以单独训练的任何集成模型。

aml = H2OAutoML(max_models=10, seed=1) aml.train(x=x, y=y, training_frame=train)

接下来,将查看AutoML排行榜。由于没有在H2OAutoML.train()方法中指定leaderboard_frame用于评分和排名模型,AutoML排行榜使用交叉验证指标对模型进行排名。对于每种机器学习任务(二元分类、多类分类、回归),内部指定了默认性能指标,排行榜将按该指标排序。在二元分类的情况下,默认排名指标是ROC曲线下面积(AUC)。将来,用户将能够指定任何H2O指标,以便使用不同的指标在排行榜上生成排名。领先模型存储在aml.leader中,排行榜存储在aml.leaderboard中。

lb = aml.leaderboard lb.head(rows=lb.nrows)

要生成测试集的预测,可以直接在“H2OAutoML”对象或领先模型对象上进行预测。

preds = aml.predict(test) or preds = aml.leader.predict(test)

将预测与测试数据集结合。然后,可以查看每个EmployeeId的倦怠率预测。

df = test.cbind(preds) df.head(2)

通过名称向量切片列,以在最终数据框架中仅保留相关列。

res = df[:, ["Employee ID", "predict"]] res.head(2)

将‘predict’列重命名为‘Burn Rate’。

res.set_names(['Employee ID', 'Burn Rate'])

将结果保存为.CSV文件。

h2o.export_file(res, path="C:/Burnout_Rate_Prediction/dataset/submission.csv", force=True)

有两种方式可以保存领先模型——二进制格式和MOJO格式。如果将领先模型投入生产使用,建议使用MOJO格式,因为它针对生产使用进行了优化。

h2o.save_model(aml.leader, path="C:/Burnout_Rate_Prediction/h20_model") aml.leader.download_mojo(path="C:/Burnout_Rate_Prediction")

要了解集成如何工作,让深入了解一下“所有模型”堆叠集成模型。“所有模型”集成是AutoML运行中所有个体模型的集成。这通常是排行榜上表现最佳的模型。

# 获取AutoML排行榜中所有模型的模型ID model_ids = list(aml.leaderboard['model_id'].as_data_frame().iloc[:,0]) # 获取“所有模型”堆叠集成模型 se = h2o.get_model([mid for mid in model_ids if "StackedEnsemble_AllModels" in mid][0]) # 获取堆叠集成的元学习器模型 metalearner = h2o.get_model(se.metalearner()['name']) metalearner.coef_norm()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485