前言

笔者是在读研究生,用h2o的时间也有小半年了,心血来潮就想写一些自己的心得,希望对大家有所帮助。
之前学习的有些参考其他人的地方,如果有遗漏或侵权请私信,看到了立马加注明或删除!

怎么安装h2o这里就不写了。其他大佬那写的很详细了。笔者也是从他们那学的怎么使用h2o。不是我太懒了!

关于启动h2o

library(h2o)#加载h2o包
rm(list = ls(all = TRUE))

h2o.removeAll() #以防万一集群已经运行了
h2o.init()
h2o.init(nthreads = -1, #-1表示使用你机器上所有的核
          max_mem_size = "2G")  #max_mem_size参数表示允许h2o使用的最大内存

h2o.init()
h2o.init(nthreads = -1, max_mem_size = “2G”)
这两种方法都能开启h2o集群,后者能设置的更加详细些,但是下面的那种方法在某种情况下 具体情况忘了

#导入数据
Train_Data <- h2o.importFile("2_64Data_Train.csv")
Test_Data <- h2o.importFile("2_64Data_Test.csv")
#查看数据类型
> class(Train_Data)
[1] "H2OFrame"

接着是导入需要的数据,h2o中使用的数据必须是 通过h2o.importFile导入的 "H2OFrame"类型的数据。
2_64Data_Train.csv这个文件是在项目中的。所以没有其他的路径设置。如果不在项目中是需要修改路径的。
比如想要读取在C盘根目录下的文件

t1<- h2o.importFile("C:\\2_64Data_Train.csv")

预测类型

深度学习分为回归分类两大类问题。分类又分成二分类和多分类。

分类

根据数据将数据分类
比如有一大堆照片,想要对照片中的东西进行分类。
二分类:只有2种分类。是人,不是人。
多分类:有多种分类,是人,是猫,是狗,是车等。
对某一列进行分类预测时,需要保证这一列是因子factor类型
可以通过h2o.levels来确认列中的各个因子

#转化因子类型
Train_Data$Hito <- as.factor(Train_Data$Hito)
#查看因子levels
h2o.levels(Train_Data["Hito"])
回归

根据数据预测出精确的数值
比如根据房屋的数据预测出房屋的售价
进行回归预测的列理应是数字类型的 这应该在数据处理的时候就应该做好的。
但是资料里只说了分类模型的数据需要转换成因子类型,不是因子类型的自动选择回归模型
所以不确定用字符类型的数据进行回归预测会怎么样
有兴趣的可以试试

模型创建
#导入已经处理好的训练和测试数据
Train_Data <- h2o.importFile("2_64Data_Train.csv")
Test_Data <- h2o.importFile("2_64Data_Test.csv")
#因为这是个分类模型所以需要将Hito这列转换成因子类型
Train_Data$Hito <- as.factor(Train_Data$Hito)
#查看因子levels
h2o.levels(Train_Data["Hito"])
#创建模型的参数
Activation <- "Maxout"
Hidden <- c(64, 64, 64, 64, 64, 64)
Epochs <- 1500

# y响应变量与x预测变量
y <- "Hito"
x <- setdiff(names(Train_Data), c(y, 'HiDuke', "KyoRi", "JyouTai"))
model_Hito <- h2o.deeplearning(
  x = x,
  y = y,
  training_frame = Train_Data,
  model_id = "model_Hito1",
  activation = Activation,
  hidden = Hidden,
  epochs = Epochs
)

====
首先关于创建模型中的y响应变量x预测变量。说人话就是y是想要预测的列,x是根据哪些列来预测y
training_frame 用来训练的数据,前面提到过必须是通过h2o.importFile导入的 "H2OFrame"类型的数据
model_id是训练完的模型名字,保存模型的时候会使用到
接下来这3个参数比较重要,直接影响到模型的好坏、预测的准确性
activation
Specify the activation function (Tanh, Tanh with dropout, Rectifier, Rectifier with dropout, Maxout, Maxout with dropout). This option defaults to Rectifier.
Note: Maxout is not supported when autoencoder is enabled.
hidden
Specify the hidden layer sizes (e.g., 100,100). The value must be positive. This option defaults to (200,200).
epochs
Specify the number of times to iterate (stream) the dataset. The value can be a fraction. This option defaults to 10.
因为比较重要所以我直接复制的原文
Deep Learning (Neural Networks) 当然还有很多其他的参数。但是作为初学者的我暂时还用不到,想要了解的话链接里面有详细的说明。
hidden设置隐藏层,epochs设置循环学习多少次(我自己的理解)

这里挖个坑,以后有机会就写一下怎么用超参数搜索查找合适的参数
数据预测
#预测
Hito_predict <- as.data.frame(h2o.predict(model_Hito, Test_Data))
#将预测的结果转换成想要的数据
Hito_predict$predict <-
  as.integer(as.character(Hito_predict$predict))
  
#> class(h2o.predict(model_Hito, Test_Data))
#  |===================================================================| 100%
#[1] "H2OFrame"

最后的步骤:把测试数据放入模型中进行预测,验证模型的好坏。
使用h2o.predict进行预测
h2o.predict(object = 预测模型, newdata = 测试数据)
将预测所得到的数据(H2OFrame)转换成数据框类型数据 方便查看
这时Hito_predict$predict是因子类型的数据 可以根据需要自行转换。

预测的结果展示

清理R语言内存 r语言内存用完了_深度学习

预测结果评价

Accuracy(准确率)=预测准确的数/总数

#Accuracy
> length(which((Hito_predict$predict == testdata$Hito) == TRUE))/
+   length(Hito_predict$predict)
[1] 0.8712871
#预测正确数
> length(which((Hito_predict$predict == testdata$Hito) == TRUE))
[1] 88
#数据总数
> length(Hito_predict$predict)
[1] 101
模型的评价
分类模型

Classification 对于分类模型的评价h2o中自带各种函数,介绍几个我常用的。
二分类常用Accuracy、auc

perf <- h2o.performance(model_Hito)
h2o.accuracy(perf)
h2o.auc(perf)

多分类
例子模型不是多分类的,所以下面的代码并不能评价这个模型

h2o.logloss(perf)
回归模型

Regression MAE(平均绝对误差)

#model_1是回归模型
mae<- h2o.mae(model_1)
mae

参考资料

h2o.aiClassification and Regression with H2O Deep Learning