责任编辑由本时评译者
征稿,经生前所编
序言
有关R的博戈达化排序,有parral包等将原有流程转换成为apply或是for后来同时实现博戈达排序。那时要如是说的是H2O.ai。H2O.ai是两个开放源码的机器学习架构。其外部采用java程式设计,同时实现多缓存和多机排序,能透过R来初始化。基本原理是H2O做为后端展开统计数据的排序,而R而已做为两个后端展开统计数据的传达和结论的表明。
一、R的开启
他们在读取H2OTNUMBERZG要初始化运转的缓存数,比如说nthreads= -1则表示采用全数核。当统计数据转换成成H20的文件格式后,先期的的排序Sonbhadra手动被重新分配到数个缓存和数个CPU上。H20中原有的演算法是GBM,GLM,Distibution Random Forest、Navie Bayes,DeepLearning。除此之外除了统计数据体育竞技的大杀器:Ensemble model(数学模型结合)。
library(h2o)
h2o.init(nthreads= -1)
## Connection successful!
##
## R is connected to the H2O cluster:
## H2O cluster uptime: 3 hours 52 minutes
## H2O cluster version: 3.10.0.8
## H2O cluster version age: 3 months and 23 days !!!
## H2O cluster name: H2O_started_from_R_xianda_elh185
## H2O cluster total nodes: 1
## H2O cluster total memory: 0.71 GB
## H2O cluster total cores: 4
## H2O cluster allowed cores: 4
## H2O cluster healthy: TRUE
## H2O Connection ip: localhost
## H2O Connection port: 54321
## H2O Connection proxy: NA
## R Version: R version 3.3.2 (2016-10-31)
二、统计数据转换成
1、as.h2o()表达式
把R的统计数据框转换成为H2O.ai可辨识的统计数据库系统,先期的排序会在iris.hex统计数据K568展开。当然你也能用R的一些常用表达式,比如说head()、names()、summary()等对iris.hex统计数据集展开操作
data(iris)
iris.hex <- as.h2o(iris, destination_frame= “iris.hex”)
summary(iris.hex)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.1000
## 1st Qu.:5.099 1st Qu.:2.799 1st Qu.:1.596 1st Qu.:0.2992
## Median :5.798 Median :2.998 Median :4.348 Median :1.3000
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.1993
## 3rd Qu.:6.399 3rd Qu.:3.298 3rd Qu.:5.095 3rd Qu.:1.7992
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.5000
## Species
## setosa :50
## versicolor:50
## virginica :50
##
2、as.data.frame()表达式
当然你能把iris.hex统计数据集还原成R的统计数据文件格式,初始化表达式as.data.frame():
iris.R <- as.data.frame(iris.hex)
GBM与Ensemble
在统计数据发现的体育竞技中,他们经常需要对统计数据建模并做预测。在体育竞技中处理预测问题,比较流行的演算法有GBM、XGBoost和Ensemble。由于在H2O.ai中并没有XGBoost演算法,下面以GBM演算法和Ensemble做为示例来如是说。
三、GBM演算法
初始化公式:
h2o.gbm(x,y,training_frame,model_id,ntrees,distribution,max_depth,stopping_metric,balance_classes,learn_rate)
h2O里每个数学模型可调节的参数非常多,其GBM演算法的参数与XGBoost的参数比较类似。此处初始化iris统计数据集展开数学模型拟合
iris.hex <- as.h2o(iris, destination_frame= “iris.hex”)
iris.gbm <- h2o.gbm(y = 5, x = 1:4, training_frame = iris.hex, ntrees
= 15, max_depth = 5, min_rows = 2, learn_rate = 0.01, distribution= “multinomial”)
如果是回归数学模型,则distribution=”gaussian”。
要查看数学模型的拟合效果,能采用下面语句:
iris.gbm@model$training_metrics
## H2OMultinomialMetrics: gbm
## ** Reported on training data. **
##
## Training Set Metrics:
## =====================
##
## Extract training frame with `h2o.getFrame(“iris.hex”)`
## MSE: (Extract with `h2o.mse`) 0.3293958
## RMSE: (Extract with `h2o.rmse`) 0.5739301
## Logloss: (Extract with `h2o.logloss`) 0.8533637
## Mean Per-Class Error: 0.01333333
## Confusion Matrix: Extract with `h2o.confusionMatrix(<model>,train = TRUE)`)
## =========================================================================
## Confusion Matrix: vertical: actual; across: predicted
## setosa versicolor virginica Error Rate
## setosa 50 0 0 0.0000 = 0 / 50
## versicolor 0 49 1 0.0200 = 1 / 50
## virginica 0 1 49 0.0200 = 1 / 50
## Totals 50 50 50 0.0133 = 2 / 150
##
## Hit Ratio Table: Extract with `h2o.hit_ratio_table(<model>,train = TRUE)`
## =======================================================================
## Top-3 Hit Ratios:
## k hit_ratio
## 1 1 0.986667
## 2 2 1.000000
## 3 3 1.000000
2、h2o.predict()表达式
对于模型的预测,初始化
pred.hex <- h2o.predict(object = iris.gbm, newdata = iris.hex)
pred.hex
## predict setosa versicolor virginica
## 1 setosa 0.4297616 0.2851192 0.2851192
## 2 setosa 0.4297616 0.2851192 0.2851192
## 3 setosa 0.4297616 0.2851192 0.2851192
## 4 setosa 0.4297616 0.2851192 0.2851192
## 5 setosa 0.4297616 0.2851192 0.2851192
## 6 setosa 0.4297616 0.2851192 0.2851192
##
## [150 rows x 4 columns]
3、与R中GBM演算法的比较
最后,我用两个P2P的统计数据集做为测试,从AUC和运转时间两个维度来比较H2O与R中GBM演算法的优劣。在win10上采用2个缓存展开测试,改变H2O中的learn_rate参数和R中的shrinkage参数,其它参数保持不变。以下是9次结论的对比
从AUC来看两者差距并不大,但H2O所花费的时间要远远小于R。有关机器学习数学模型的效率比较能参考github上的一篇文章,译者展开了详细的验证【5】
四、Ensembles model
H2O的Ensemble能透过h2oEnsemble包来初始化。该包允许用户采用任何有监督的机器学习演算法来展开结合的训练。现在H2O的Ensemble只支持回归和二分类。
H2O的Ensemble的表达式为h2o.ensemble(),其主要参数如下,下面作简单的如是说
h2o.ensemble(x = x, y = y, training_frame = data, family = family, learner = learner, metalearner = metalearner, cvControl = list(V = 5))
1、family参数
family代表采用回归还是分类数学模型,对于二分类问题,能设置family <- “binomial”
2、learner参数
learner则表示初始展开数学模型训练的机器学习库,下面的两个例子采用的是默认的H2O中的数学模型: GLM, Random Forest, GBM and Deep learning(全数采用默认数学模型参数值)
learner <- c(“h2o.glm.wrapper”,
“h2o.randomForest.wrapper”, “h2o.gbm.wrapper”, “h2o.deeplearning.wrapper”)
当然你也能透过自己定义数学模型参数加入到learner中。比如说
h2o.gbm.1 <- function(…, ntrees =100, seed = 1)
h2o.gbm.wrapper(…, ntrees = ntrees, seed = seed)
learner <- c(“h2o.glm.wrapper”,”h2o.randomForest.wrapper”, “h2o.gbm1”, “h2o.deeplearning.wrapper”)
3、metalearner参数
metalearner则表示最终展开结合的数学模型,以下采用默认参数的glm数学模型展开
metalearner <- “h2o.glm.wrapper”
4、例子
了解了大致参数后,他们用以下R代码展开完整的数学模型训练
library(devtools)
install_github(“h2oai/h2o-3/h2o-r/ensemble/h2oEnsemble-package”)
library(h2oEnsemble)
h2o.init(nthreads = -1)
h2o.removeAll()
train <- h2o.importFile(“https://s3.amazonaws.com/erin-data/higgs/higgs_train_5k.csv”)
test <- h2o.importFile(“https://s3.amazonaws.com/erin-data/higgs/higgs_test_5k.csv”)
y <- “response”
x <- setdiff(names(train), y)
family <-“binomial”
#必须把解释变量中的类别变量全数转换成为因子类型
train[,y] <- as.factor(train[,y])
test[,y] <- as.factor(test[,y])
#自定义GBM数学模型参数
h2o.gbm.1 <- function(…, ntrees = 100,
seed = 1) h2o.gbm.wrapper(…, ntrees = ntrees, seed = seed)
learner <- c(“h2o.glm.wrapper”, “h2o.randomForest.wrapper”, “h2o.gbm.1”, “h2o.deeplearning.wrapper”)
metalearner <-“h2o.glm.wrapper”
fit <- h2o.ensemble(x = x, y = y, training_frame = train,family =family, learner = learner, metalearner = metalearner, cvControl = list(V = 5))
为了评估数学模型在测试K568的效果,他们能透过AUC来看数学模型结合对效果的提升程度
perf <- h2o.ensemble_performance(fit, newdata = test)
perf
## Base learner performance, sorted by specified metric:
learner AUC
## 1
h2o.glm.wrapper 0.6824304
## 4 h2o.deeplearning.wrapper 0.6919192
## 2 h2o.randomForest.wrapper 0.7599636
## 3
h2o.gbm.1 0.7751240
## H2O Ensemble Performance on <newdata>:
## —————-
## Family: binomial
## Ensemble performance (AUC): 0.779474562705375
五、参考资料
上述而已列举了H2O一些基本操作,有关H2O更为详细的资料列举如下:
H2O与R的官方文档H2O的数学模型结合思想及操作H2O与spark的结合(RSparkling)H2O中机器学习和深度学习的超参数寻优机器学习各演算法准确率和运转时间的比较
最后
想要了解有关R、Python、统计数据科学和机器学习更多内容。
Data Science with R&Python