开始使用 H2O
介绍
H2O 是一个快速、可扩展的开源机器学习和人工智能平台,可用于在大型数据集上构建机器学习模型。此外,H2O 可以与 R、Python 和 Spark 等主要编程语言集成。
在本指南中,您将学习使用 H2O 和 R 构建机器学习模型的基础知识。
数据
失业是任何国家都面临的重大社会经济和政治问题,管理失业也是任何政府的首要任务。在本指南中,您将构建回归算法来预测经济体中的失业率。
数据来自https://research.stlouisfed.org/fred2提供的美国经济时间序列数据。它包含 574 行和 5 个变量,如下所述:
psavert:个人储蓄率
pce:个人消费支出,单位:十亿美元
uempmed:失业持续时间中位数,以周为单位
pop:总人口,以百万计
unemploy:失业人口数量,以千为单位。这是因变量。
评估指标
您将使用两个指标评估模型的性能:R 平方值和均方根误差 (RMSE)。理想情况下,较低的 RMSE 和较高的 R 平方值表明模型良好。
首先加载所需的库和数据。
library(plyr)
library(readr)
library(dplyr)
dat <- read_csv("data.csv")
glimpse(dat)
输出:
Observations: 564
Variables: 5
$ pce <dbl> 531.5, 534.2, 544.9, 544.6, 550.4, 556.8, 563.8, 567.6, 568.…
$ pop <dbl> 199808, 199920, 200056, 200208, 200361, 200536, 200706, 2008…
$ psavert <dbl> 11.7, 12.2, 11.6, 12.2, 12.0, 11.6, 10.6, 10.4, 10.4, 10.6, …
$ uempmed <dbl> 5.1, 4.5, 4.1, 4.6, 4.4, 4.4, 4.5, 4.2, 4.6, 4.8, 4.4, 4.4, …
$ unemploy <dbl> 2878, 3001, 2877, 2709, 2740, 2938, 2883, 2768, 2686, 2689, …
输出显示数据集中的所有变量都是数值变量(标记为“dbl”)。
数据分区
您将在训练集上构建模型,并在测试集上评估其性能。这称为用于评估模型性能的保留验证方法。
下面的第一行代码设置了随机种子,以确保结果的可重复性。第二行创建了用于数据分区的随机抽样观测的索引。接下来的两行代码创建了训练集和测试集,而最后两行则打印了训练集和测试集的维度。训练集包含 70% 的数据,而测试集包含剩余的 30%。
set.seed(100)
index = sample(1:nrow(dat), 0.7*nrow(dat))
train = dat[index,]
test = dat[-index,]
dim(train)
dim(test)
输出:
394 5
170 5
连接 H2O
和 R
您已经创建了数据分区,并将使用 H2O 和 R 构建预测模型。但是,在构建机器学习模型之前,您必须将h2o与 R 连接起来。第一步是安装h2o包,这可以通过下面的代码完成。
install.packages("h2o")
library(h2o)
安装库后,启动集群并使用以下代码对其进行初始化。
localH2O <- h2o.init(nthreads = -1)
h2o.init()
输出:
Connection successful!
R is connected to the H2O cluster:
H2O cluster uptime: 24 minutes 26 seconds
H2O cluster timezone: Etc/UTC
H2O data parsing timezone: UTC
H2O cluster version: 3.30.0.1
H2O cluster version age: 2 months and 7 days
H2O cluster name: H2O_started_from_R_nbuser_xnt904
H2O cluster total nodes: 1
H2O cluster total memory: 0.80 GB
H2O cluster total cores: 2
H2O cluster allowed cores: 2
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
H2O API Extensions: Amazon S3, XGBoost, Algos, AutoML, Core V3, TargetEncoder, Core V4
R Version: R version 3.5.3 (2019-03-11)
上面的输出显示h2o和 R 之间的连接成功。这意味着您已准备好构建机器学习模型。首先,将数据从 R 传输到h2o实例。这是通过以下代码完成的。
train.h2o <- as.h2o(train)
test.h2o <- as.h2o(test)
下一步是确定建模中要使用的变量。这可以通过以下代码完成。
#dependent variable
y.dep <- 5
#independent variables
x.indep <- c(1:4)
您现在可以使用 R 和 H2O 构建回归模型。
线性回归
最简单的回归形式是线性回归,它假设预测变量与目标变量具有线性关系。假设输入变量具有高斯分布。另一个假设是预测变量彼此之间没有高度相关性(称为多重共线性问题)。
可以使用h2o.glm()函数构建 H2O 中的多元线性回归模型,该模型可用于所有类型的回归算法,例如线性、套索、岭、逻辑等。下面的第一行代码构建多元线性回归模型,而第二行在训练数据集上打印模型的性能。
mlr.model <- h2o.glm( y = y.dep, x = x.indep, training_frame = train.h2o, family = "gaussian")
h2o.performance(mlr.model)
输出:
|======================================================================| 100%
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 3236195
RMSE: 1798.943
MAE: 1410.828
RMSLE: 0.2562514
Mean Residual Deviance : 3236195
R^2 : 0.4692928
Null Deviance :2402569520
Null D.o.F. :393
Residual Deviance :1275060937
Residual D.o.F. :389
AIC :7036.148
上面的输出显示,训练数据上线性回归模型的 RMSE 和 R 平方值分别为 180 万和 47%。这些数字并不大,因为 R 平方值较低。稍后,您将尝试使用随机森林模型来提高模型性能。
评估模型
模型评估将在测试数据上进行,但第一步是使用该模型对测试数据生成预测。以下代码对测试数据生成预测并将其保存为数据框。
predict.mlr <- as.data.frame(h2o.predict(mlr.model, test.h2o))
为了评估模型在测试数据上的性能,您将创建一个函数来计算评估指标、R 平方和 RMSE。以下代码创建了评估指标函数。
eval_results <- function(true, predicted, df) {
SSE <- sum((predicted - true)^2)
SST <- sum((true - mean(true))^2)
R_square <- 1 - SSE / SST
RMSE = sqrt(SSE/nrow(df))
# Model performance metrics
data.frame(
RMSE = RMSE,
Rsquare = R_square
)
}
现在使用预测和评估函数在测试数据上打印评估结果。
#evaluation on test data
eval_results(test$unemploy, predict.mlr$predict, test)
输出:
A data.frame: 1 x 2
RMSE Rsquare
<dbl> <dbl>
2037.001 0.5154574
上面的输出显示,测试数据的 RMSE 和 R 平方值分别为 200 万和 51%。这些结果仍然不是很好,这表明线性回归不是适合这些数据的算法。接下来,您将构建一个强大的随机森林模型,看看性能是否有所提高。
随机森林
随机森林算法之所以被称为森林,是因为它们是多棵决策树的集合或整体。在随机森林中,不是尝试对所有特征进行分割,而是为每个分割选择一个特征样本,从而减少模型的方差。
训练模型
在 R 中,h2o.randomForest()函数用于训练随机森林算法。下面的第一行代码在训练数据上构建模型,而第二行则打印模型的性能摘要。
rforest.model <- h2o.randomForest(y=y.dep, x=x.indep, training_frame = train.h2o, ntrees = 1000, mtries = 3, max_depth = 4, seed = 1122)
h2o.performance(rforest.model)
输出:
H2ORegressionMetrics: drf
** Reported on training data. **
** Metrics reported on Out-Of-Bag training samples **
MSE: 529099.3
RMSE: 727.3921
MAE: 537.3119
RMSLE: 0.08856347
Mean Residual Deviance : 529099.3
上面的输出显示训练数据上的 RMSE 为 0.73 百万。下一步是评估测试数据上的模型性能,使用下面的代码完成。
predict.rf <- as.data.frame(h2o.predict(rforest.model, test.h2o))
eval_results(test$unemploy, predict.rf$predict, test)
输出:
RMSE Rsquare
<dbl> <dbl>
647.5397 0.9510354
上面的输出显示,测试数据上的 RMSE 和 R 平方分别为 0.65 百万和 95%。随机森林模型的性能远远优于之前建立的多元线性回归模型。
结论
在本指南中,您了解了使用 H2O 和 R 构建机器学习模型的基础知识。您学习了如何启动h2o集群并将其与 R 会话集成。最后,您构建了几个回归模型。
要了解有关使用 R 进行数据科学的更多信息,请参阅以下指南:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~