我正在尝试探索使用GBM h2o进行分类问题来替换逻辑回归(GLM).我的数据中的非线性和相互作用使我认为GBM更合适.
我已经运行了基线GBM(见下文),并将AUC与逻辑回归的AUC进行了比较.GBM的表现要好得多.
在经典线性逻辑回归中,人们将能够看到每个预测变量(x)对结果变量(y)的方向和影响.
现在,我想以同样的方式评估估算GBM的变量重要性.
如何获得每个(两个)类的变量重要性?
我知道变量重要性与逻辑回归中的估计系数不同,但它有助于我理解哪个预测因子会影响哪个类.
其他人提出了类似的问题,但提供的答案对H2O对象不起作用.
任何帮助深表感谢.
example.gbm <- h2o.gbm(
x = c("list of predictors"),
y = "binary response variable",
training_frame = data,
max_runtime_secs = 1800,
nfolds=5,
stopping_metric = "AUC")
Run Code Online (Sandbox Code Playgroud) 我是R和H2O的新手,我试图找到一种方法将r数据帧转换为h2o对象.我花了一些时间研究如何做到这一点,没有运气.其他方式是可能的,并记录如下.
prosPath = system.file("extdata", "prostate.csv", package="h2o")
prostate.hex = h2o.importFile(localH2O, path = prosPath)
prostate.data.frame <- as.data.frame(prostate.hex)
Run Code Online (Sandbox Code Playgroud)
但我想要的是完全相反的.我想将r"prostate.data.frame"数据对象转换为名为"prostate.hex"的h2o对象.提前致谢.
我有几十万个非常小的.dat.gz文件,我想以最有效的方式读入R.我在文件中读取然后立即聚合并丢弃数据,因此我不担心在接近流程结束时管理内存.我只是想加快瓶颈,这恰好是解压缩和读取数据.
每个数据集由366行和17列组成.这是我目前所做的可重复的例子:
构建可重现的数据:
require(data.table)
# Make dir
system("mkdir practice")
# Function to create data
create_write_data <- function(file.nm) {
dt <- data.table(Day=0:365)
dt[, (paste0("V", 1:17)) := lapply(1:17, function(x) rnorm(n=366))]
write.table(dt, paste0("./practice/",file.nm), row.names=FALSE, sep="\t", quote=FALSE)
system(paste0("gzip ./practice/", file.nm))
}
Run Code Online (Sandbox Code Playgroud)
以下是代码申请:
# Apply function to create 10 fake zipped data.frames (550 kb on disk)
tmp <- lapply(paste0("dt", 1:10,".dat"), function(x) create_write_data(x))
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我最有效的代码来读取数据:
# Function to read in files as fast as possible
read_Fast <- function(path.gz) {
system(paste0("gzip -d ", path.gz)) # Unzip …Run Code Online (Sandbox Code Playgroud) 我想在R中使用h2o(深度学习)创建的模型上实现LIME.为了使用模型中的数据,我创建了h2oFrames并将其转换回数据帧,然后在LIME中使用它(lime函数,因为LIME的解释函数可以'识别h2oFrame).在这里,我可以运行该功能
下一步是对测试数据使用explain函数来生成解释.这里R抛出了使用数据帧和h2oFrame的错误.
这是使用数据帧时生成的错误:
Run Code Online (Sandbox Code Playgroud)Error in chk.H2OFrame(x) : must be an H2OFrame
这是使用h2oframe时产生的错误:
Run Code Online (Sandbox Code Playgroud)Error in UseMethod("permute_cases") : no applicable method for 'permute_cases' applied to an object of class "H2OFrame"
if(!require(pacman)) install.packages("pacman")
pacman::p_load(h2o, lime, data.table, e1071)
data(iris)
h2o.init( nthreads = -1 )
h2o.no_progress()
# Split up the data set
iris <- as.h2o(iris)
split <- h2o.splitFrame( iris, c(0.6, 0.2), seed = 1234 )
iris_train <- h2o.assign( split[[1]], "train" ) # 60%
iris_valid <- h2o.assign( split[[2]], "valid" ) # 20%
iris_test <- …Run Code Online (Sandbox Code Playgroud) 寻找一种有效的方法在rstudio,H2O的Flow或h2o的RF和GBM模型的本地html页面中绘制树,类似于下面链接中的图像.具体来说,如何通过解析h2o.download_pojo(rf1)或h2o.download_pojo(gbm1)来为下面的代码生成的对象(拟合模型)rf1和gbm2绘制树?
# # The following two commands remove any previously installed H2O packages for R.
# if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
# if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }
# # Next, we download packages that H2O depends on.
# pkgs <- c("methods","statmod","stats","graphics","RCurl","jsonlite","tools","utils")
# for (pkg in pkgs) {
# if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) }
# }
#
# # Now we download, install h2o package
# install.packages("h2o", type="source", repos=(c("http://h2o-release.s3.amazonaws.com/h2o/rel-turchin/3/R")))
library(h2o)
h2o.init(nthreads = …Run Code Online (Sandbox Code Playgroud) 我目前正在使用H2O作为分类问题数据集.我H2ORandomForestEstimator在python 3.6环境中测试它.我注意到预测方法的结果给出了0到1之间的值(我假设这是概率).
在我的数据集中,目标属性是数字,即True值为1,False值为0.我确保将类型转换为目标属性的类别,我仍然得到相同的结果.
然后我修改了代码,将目标列转换为asfactor()H2OFrame上的因子使用方法,结果没有任何变化.
但是当我将目标属性中的值分别更改为1和0时的True和False时,我得到了预期结果(即)输出是分类而不是概率.
我在Rstudio版本0.99.447中运行h2o包.我运行版本10.9.5 OSX.
我想按照本教程的步骤在R中设置一个本地集群:http://blenditbayes.blogspot.co.uk/2014/07/things-to-try-after-user-part-1-deep html的
第一步似乎不是问题.似乎是一个问题是将我的数据框转换为适当的h2o对象.
library(mlbench)
dat = BreastCancer[,-1] #reading in data set from mlbench package
library(h2o)
localH2O <- h2o.init(ip = "localhost", port = 54321, startH2O = TRUE) #sets up the cluster
dat_h2o <- as.h2o(localH2O, dat, key = 'dat') #this returns an error message
Run Code Online (Sandbox Code Playgroud)
上面的语句as.h2o导致以下错误消息
Error in as.h2o(localH2O, dat, key = "dat") :
unused argument (key = "dat")
Run Code Online (Sandbox Code Playgroud)
如果我删除"key"参数,让数据驻留在机器生成的名称下的H2O键值存储中,则会出现以下错误消息.
Error in .h2o.doSafeREST(conn = conn, h2oRestApiVersion = h2oRestApiVersion,
Unexpected CURL error: Empty reply from server
Run Code Online (Sandbox Code Playgroud)
这个问题和我一样,但是解决方案让我遇到了同样的错误.
有没有人有这个问题的经验?我不完全确定如何处理这个问题.
这是我的代码:
set.seed(1)
#Boruta on the HouseVotes84 data from mlbench
library(mlbench) #has HouseVotes84 data
library(h2o) #has rf
#spin up h2o
myh20 <- h2o.init(nthreads = -1)
#read in data, throw some away
data(HouseVotes84)
hvo <- na.omit(HouseVotes84)
#move from R to h2o
mydata <- as.h2o(x=hvo,
destination_frame= "mydata")
#RF columns (input vs. output)
idxy <- 1
idxx <- 2:ncol(hvo)
#split data
splits <- h2o.splitFrame(mydata,
c(0.8,0.1))
train <- h2o.assign(splits[[1]], key="train")
valid <- h2o.assign(splits[[2]], key="valid")
# make random forest
my_imp.rf<- h2o.randomForest(y=idxy,x=idxx,
training_frame = train,
validation_frame = …Run Code Online (Sandbox Code Playgroud) 我的目的是从同一台计算机/服务器上的R内启动两个或多个h2o集群/实例(不是两个或更多节点!),以使多个用户能够同时与h2o连接.此外,我希望能够单独关闭和重新启动集群,也可以从R内部.
我已经知道我无法简单地从R中控制多个h2o集群,因此我尝试从Windows 10中的命令行启动两个集群:
java -Xmx1g -jar h2o.jar -name testCluster1 -nthreads 1 -port 54321
java -Xmx1g -jar h2o.jar -name testCluster2 -nthreads 1 -port 54323
Run Code Online (Sandbox Code Playgroud)
这对我来说很好:
library(h2o)
h2o.init(startH2O = FALSE, ip = "localhost", port = 54321)
Connection successful!
R is connected to the H2O cluster:
H2O cluster uptime: 4 minutes 8 seconds
H2O cluster version: 3.8.3.2
H2O cluster name: testCluster
H2O cluster total nodes: 1
H2O cluster total memory: 0.87 GB
H2O cluster total cores: 4
H2O cluster allowed cores: …Run Code Online (Sandbox Code Playgroud) 我知道有可能导出/导入之前训练过的h2o模型.
我的问题是 - 有没有办法将h2o模型转换为非h2o模型(仅适用于普通R)?
我的意思是我不想启动h2o环境(JVM)因为我知道预测训练模型只是简单地乘以矩阵,应用激活函数等.
当然可以手动提取权重等,但我想知道是否有更好的方法来做到这一点.
我没有看到关于此问题的SA以前的任何帖子.