gpt4 book ai didi

r - 在 R 中实现 LIME 水建模

转载 作者:行者123 更新时间:2023-12-01 17:33:23 29 4
gpt4 key购买 nike

我想实现LIME在 R 中使用 h2o(深度学习)创建的模型上。为了使用模型中的数据,我创建了 h2oFrames 并将其转换回数据帧,然后再在 LIME 中使用(lime 函数,因为 LIME 的解释函数无法识别 h2oFrame) 。在这里我可以运行该函数

下一步是对测试数据使用解释函数来生成解释。这里 R 因使用 dataframe 和 h2oFrame 而抛出错误。

这是使用数据框时生成的错误:

Error in chk.H2OFrame(x) : must be an H2OFrame

这是使用 h2oframe 时生成的错误:

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 <- h2o.assign( split[[3]], "test" ) # 20%


output <- 'Species'
input <- setdiff(names(iris),output)


model_dl_1 <- h2o.deeplearning(
model_id = "dl_1",
training_frame = iris_train,
validation_frame = iris_valid,
x = input,
y = output,
hidden = c(32, 32, 32),
epochs = 10, # hopefully converges earlier...
score_validation_samples = 10000,
stopping_rounds = 5,
stopping_tolerance = 0.01
)

pred1 <- h2o.predict(model_dl_1, iris_test)
list(dimension = dim(pred1), pred1$predict)

#convert to df from h2ofdataframe

train_org<-as.data.frame(iris_train)
#converting train h2oframe to dataframe
sapply(train_org,class) #checking the class of train_org
test_df <- as.data.frame(iris_test)
#converting test data h2oFrame to dataframe
test_sample <- test_df[1:1,]

#works
#lime is used to get explain on the train data
explain <- lime(train_org, model_dl_1, bin_continuous = FALSE, n_bins =
5, n_permutations = 1000)


# Explain new observation
explanation <- explain(test_sample, n_labels = 1, n_features = 1)
h2o.shutdown(prompt=F)

任何人都可以帮我找到解决方案或方法来使用 LIME 的解释功能和适当的数据帧

最佳答案

底层的 lime 包使用两个函数,predict_model()model_type(),您需要为任何模型设置它们目前不支持。

对于您的具体示例,您需要执行以下操作。

第 1 步:为 H2OMultinomialModel 类模型设置通用 model_type 函数。您在这里所做的就是告诉 lime 您希望它执行什么模型类型,例如“分类”或“回归”。

model_type.H2OMultinomialModel <- function(x, ...) {
# Function tells lime() what model type we are dealing with
# 'classification', 'regression', 'survival', 'clustering', 'multilabel', etc
#
# x is our h2o model

return("classification")

}

第 2 步:为 H2OMultinomialModel 类模型设置通用 predict_model 函数。这里的关键是要理解,为了让石灰发挥作用,它需要分类概率而不是预测(这花了我一些时间才弄清楚,并且它必须处理 lime:::output_type(explaination)变量)。

predict_model.H2OMultinomialModel <- function(x, newdata, type, ...) {
# Function performs prediction and returns dataframe with Response
#
# x is h2o model
# newdata is data frame
# type is only setup for data frame

pred <- h2o.predict(x, as.h2o(newdata))

# return classification probabilities only
return(as.data.frame(pred[,-1]))

}

正确设置这些函数后,您就可以运行 lime 脚本。

# Lime is used to get explain on the train data
explainer <- lime(train_org, model_dl_1, bin_continuous = FALSE, n_bins = 5, n_permutations = 1000)

# Explain new observation
explanation <- explain(test_sample, explainer, n_labels = 1, n_features = 1)

关于r - 在 R 中实现 LIME 水建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45059748/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com