开始使用 H2O

发布日期:2026-07-08 08:52:09   来源 : 杭州电子商务研究院    浏览量 :16
杭州电子商务研究院 发布日期:2026-07-08 08:52:09  
16

介绍

H2O 是一个快速、可扩展的开源机器学习和人工智能平台,可用于在大型数据集上构建机器学习模型。此外,H2O 可以与 R、Python 和 Spark 等主要编程语言集成。

在本指南中,您将学习使用 H2O 和 R 构建机器学习模型的基础知识。

数据

失业是任何国家都面临的重大社会经济和政治问题,管理失业也是任何政府的首要任务。在本指南中,您将构建回归算法来预测经济体中的失业率。

数据来自https://research.stlouisfed.org/fred2提供的美国经济时间序列数据。它包含 574 行和 5 个变量,如下所述:

  1. psavert:个人储蓄率

  2. pce:个人消费支出,单位:十亿美元

  3. uempmed:失业持续时间中位数,以周为单位

  4. pop:总人口,以百万计

  5. 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 进行数据科学的更多信息,请参阅以下指南:

  1. 使用 R 的描述性统计解释数据

  2. 使用 R 统计模型解释数据

  3. 使用 R 进行时间序列预测

  4. 假设检验 - 用统计模型解释数据

  5. 使用 R 对文本数据进行机器学习

  6. 使用 R 中的词云对文本数据进行可视化

  7. 使用 R 进行可视化数据探索<

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据