当前位置: 首页 > article >正文

python automl_深度解析AutoML框架——H2O:小白也能使用的自动机器学习平台

H2O是一个完全开源的、分布式的、具有线性可扩展性的内存的机器学习平台。

它具有以下特点:支持R和Python

支持最广泛使用的统计和机器学习的算法,包括DRF,GBM,XGBoost,DL等

具有模型解释能力

支持回归和分类任务,AutoMl的功能只支持有监督任务

自动化建立Web的交互界面,允许用户直接交互进行机器学习操作

自动进行特征工程,模型验证、调整、选择和部署

自动可视化

安装

python

python环境依赖包:grip、colorama、future、tabulate、requests和wheel

pip install h2o

or

R

install.packages("h2O")

下载软件

下载地址,可免费试用21天。

使用示例

在使用前要确保能建立H2O集群

在环境变量设置了java路径 的情况下在cmd执行以下命令:

java -jar path_to/h2o.jar

建立本地的h2o集群,通过http://localhost:54321查看,看到H2O Flow的Web界面即成功。H2O仅支持8,10,11,12版本的java。

H2O的数据特点能从HDFS、S3、NoSQL、SQL中读入数据并写入

能从本地和分布式文件系统(nfs)接收csv格式的数据

能自动解析文件的格式

H2O能将输入的数据通过import_file函数将其转换成H2O Frame,类似Pandas的DataFrame,是一种二维表。

H2O FLOW

H2O Flow是允许用户进行机器学习的交互式界面,使用者能通过简单的操作完成数据预处理、特征工程、建模和预测等功能。H2O Flow所有的功能均可使用代码实现,H2O Flow省去了用户编辑代码的时间,用python实现下列功能的教程见Tutorials

使用示例

通过执行h2o.jar建立了h2o集群后,在浏览器输入地址,看到H2o Flow的Web界面,如下图所示:

简单示例重要步骤

导入数据

将数据的路径输入即可,H2O会自行解析数据,搜索到数据文件后点击import导入数据

建模

H2O提供多种经典的 机器学习算法,如图所示:

建模过程有些参数可选,举几个例子:response_column(必选):确定预测目标

ignore_columns:要去除的特征

n_folds:n折交叉验证

Lambda_search:给模型增加正则化降低拟合度

具体参数设置和解释见H2O Flow右侧>HELP->Building Models

建模结束后平台会对数据模型等进行分析,比如特征重要性,如图所示

保存和导入模型

导航栏Model栏目有import和export model的选择。

AutoML in H2O

H2O中对特征工程和模型超参数采用了grid search(穷举)以及Stacking/Super Learning的方法搜索最优的模型。

grid search

H2O了两种类型的grid searchCartesian:搜索所有模型参数组合的模型

RandomDiscrete:随机网格搜索将在某一特定时间段(或最大模型数内)随机地采样模型参数集

简单示例

Cartesian

导入grid search包和机器学习算法,此处以GBM举例

# Import H2O Grid Search:

from h2o.grid.grid_search import H2OGridSearch

# Import H2O GBM:

from h2o.estimators.gbm import H2OGradientBoostingEstimator

确定搜索空间(网格)

# GBM hyperparameters

gbm_params1 = {'learn_rate': [0.01, 0.1],

'max_depth': [3, 5, 9],

'sample_rate': [0.8, 1.0],

'col_sample_rate': [0.2, 0.5, 1.0]}

训练和验证网格包括的所有的模型

gbm_grid1 = H2OGridSearch(model=H2OGradientBoostingEstimator,

grid_id='gbm_grid1',

hyper_params=gbm_params1)

gbm_grid1.train(x=x, y=y,

training_frame=train,

validation_frame=valid,

ntrees=100,

seed=1)

比较各个模型的性能,结果如图所示

gbm_gridperf1 = gbm_grid1.get_grid(sort_by='auc', decreasing=True)

RandomDiscrete

需要设定类型和最大model数

# Search criteria

search_criteria2 = {'strategy': 'RandomDiscrete', 'max_models': 36}

实例化grid search的时候传入搜索策略

gbm_grid2 = H2OGridSearch(model=H2OGradientBoostingEstimator,

grid_id='gbm_grid2',

hyper_params=gbm_params2,

search_criteria=search_criteria2)

Stacked Ensembles

Stacking算法是训练metalearner(比如逻辑回归)找到一些base算法的最佳组合,将他们集合在一起

算法步骤:

1.设置ensemble明确一组L个基本算法作为算法基

明确元学习算法

2.训练ensemble在训练集上训练基本算法中的所有算法

在基本算法上进行k折交叉验证并收集对应的预测值组成NXL矩阵(N代表训练集的行数),和响应向量一起组成一级数据(其实就是将各个base模型产生的预测值作为特征)

在一级数据上训练元学习算法,ensemble model里面包括了基本算法和元学习算法。

3.预测先获得各个基本算法的预测值

将这些预测值输入元学习器获得ensemble的预测值

使用示例

载入包

import h2o

from h2o.estimators.random_forest import H2ORandomForestEstimator

from h2o.estimators.gbm import H2OGradientBoostingEstimator

from h2o.estimators.stackedensemble import H2OStackedEnsembleEstimator

from h2o.grid.grid_search import H2OGridSearch

from __future__ import print_function

h2o.init()

```

数据预处理

train = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_train_10k.csv")

test = h2o.import_file("https://s3.amazonaws.com/erin-data/higgs/higgs_test_5k.csv")

# Identify predictors and response

x = train.columns

y = "response"

x.remove(y)

# For binary classification, response should be a factor

train[y] = train[y].asfactor()

test[y] = test[y].asfactor()

Stacking的方式有三种单个训练一组模型并将它们组成队列

训练一个网格(grid)的模型

训练多个网格(grid)的模型

举单个网格训练的例子

# 明确 GBM 的超参数网格

hyper_params = {"learn_rate": [0.01, 0.03],

"max_depth": [3, 4, 5, 6, 9],

"sample_rate": [0.7, 0.8, 0.9, 1.0],

"col_sample_rate": [0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}

search_criteria = {"strategy": "RandomDiscrete", "max_models": 3, "seed": 1}

# 训练网格

grid = H2OGridSearch(model=H2OGradientBoostingEstimator(ntrees=10,

seed=1,

nfolds=nfolds,

fold_assignment="Modulo",

keep_cross_validation_predictions=True),

hyper_params=hyper_params,

search_criteria=search_criteria,

grid_id="gbm_grid_binomial")

grid.train(x=x, y=y, training_frame=train)

# 用网格训练 ensemble 模型

ensemble = H2OStackedEnsembleEstimator(model_id="my_ensemble_gbm_grid_binomial",

base_models=grid.model_ids)

ensemble.train(x=x, y=y, training_frame=train)

# 评估 emsemble 模型的性能

perf_stack_test = ensemble.model_performance(test)

AutoML

H2O的AutoML训练和交叉验证下列算法:一个随机森林(DRF)

一个超随机森林(XRT)

一个广义线性模型的随机网格(GLM)

一个极端梯度提升的随机网格(XGBoost)

一个梯度提升的随机网格(GBM)

一个深度学习的随机网格(DeepLearning)

两个ensemble模型集成了所有的模型

集成了各种模型中性能最好的一个

使用示例

aml = H2OAutoML(max_models = 9)

aml.train(x = x, y = y, training_frame = train)

#展示结果

aml.leaderboard

#保存最好的模型

h2o.save_model(aml.leader, path = "./product_backorders_model_bin")

结果如图所示,产生了9个models(不包括ensemble模型)后停止,将性能从高到低排列。

Open for comments and suggestions!

2738073913@qq.com

鹏城实验室人工智能中心

http://www.lryc.cn/news/2421065.html

相关文章:

  • 小迪安全 第12天:php开发-个人博客项目文章功能显示数据库操作数据接受
  • Spring Cloud Loadbalancer服务均衡负载器
  • 程序员需知的 58 个网站
  • 风云三国2.4问鼎天下修改作弊大全
  • Flickr为在照片中寻找朋友而添加了用户标签
  • 行健设计_【天财男女神季】张行健amp;程迪:十佳第一!=科研人的理性+统计人的责任+学霸情侣...
  • [Vulkan教程]绘制一个三角形/呈现/交换链(Swip chain)
  • vs2005快捷键大全
  • GUI Design Studio----如何创建交互式设计(二)
  • 如何用PS切图和输出网页?
  • 开源软件下载地址
  • 若非群玉山头见,会向瑶台月下逢
  • Vba菜鸟教程
  • 别盲从了,spring 解决循环依赖真的一定需要三级缓存吗?demo结合源码讲解三级缓存的真正目的,一级缓存singletonFactories的真正作用,看到文章最后让面试官眼前一亮
  • 华众 mysql_华众虚拟主机管理系统HZhost三大常见错误!
  • visual studio 2008 开发c++学习(一):参考网上材料
  • 网页中Flash如何下载?网页中Flash下载方法
  • MFC界面库BCGControlBar v32.1 - 可视化管理器和主题升级
  • css的浮动详解
  • qq里测试音色的软件,QQ换音大师2015(QQ消息提示声音修改软件)
  • Flash Player Debugger下载(9/10版本)
  • IT服务方案设计攻略(详)
  • 【web前端期末大作业】学生个人网页设计作品 学生个人网页设计作品 学生个人网页模板 简单个人主页成品
  • PCB板-Solder-Mask-layer与Paste-Mask-layers的区别以及其它各层的详细含义介绍
  • 实现将 GridView 导出到 Excel文件中
  • 怕堵车?路况查询应用帮你查: 路况信息应用横向评测
  • Windows Phone开发之路(10) 进军WP的第一个程序
  • 给网页去色
  • “奇怪的”高危Reptar CPU 漏洞影响 Intel 桌面和服务器系统
  • OpenGL ES 3.0 对比 OpenGL ES 2.0 的异同点和新功能