【问题标题】:LIME (with h2o) explanation errorLIME (with h2o) 解释错误
【发布时间】:2018-01-02 16:08:03
【问题描述】:

d我是 R 和 ML 的新手,但有一个我想回答的重点问题。

我使用自己的数据,但在此处按照 Matt Dancho 的示例来预测损耗:http://www.business-science.io/business/2017/09/18/hr_employee_attrition.html

我根据他的更新删除了零方差和缩放变量。

我的问题是在解释器步骤上运行 explain()。当我运行前一个原始代码和后一个变体时,我得到下面两个错误的变体(粗体)。其他所有内容都运行到那个点。

explanation <- lime::explain(
as.data.frame(test_h2o[1:10,-1]), 
explainer    = explainer, 
n_labels     = 1, 
n_features   = 4,
kernel_width = 0.5)

给予:

Error during wrapup: arguments imply differing number of rows: 50000, 0

虽然

explanation <- lime::explain(
as.data.frame(test_h2o[1:500,-1]), 
explainer    = explainer, 
n_labels     = 1, 
n_features   = 5,
kernel_width = 1)

给予:

ERROR: Unexpected HTTP Status code: 500 Server Error (url = http://localhost:54321/3/PostFile?destination_frame=C%3A%2FUsers%2Fsim.s%2FAppData%2FLocal%2FTemp%2FRtmpykNkl1%2Ffileb203a8d4a58.csv_sid_afd3_26)
Error: lexical error: invalid char in json text.
<html> <head> <meta http-equiv=
                 (right here) ------^

如果您对此问题有任何想法或见解,或者需要我提供更多信息,请告诉我。

【问题讨论】:

  • R 具有惰性求值,因此错误实际上可能在较早的行上。您可以在拨打电话之前显示nrow(test_h2o)ncol(test_h2o) 吗? (我从错误消息中的猜测是 test_h2o 不是您当时认为的那样。)
  • 我有 2179 行和 48 列,其中 15% 的数据集符合我的预期。你觉得这有什么问题吗?
  • 看起来不错。如果它们为零,或者您在运行它们时遇到错误,则表明客户端和服务器不同步,或其他一些数据问题。

标签: r h2o lime


【解决方案1】:

试试这个,让我知道你得到了什么。请注意,这假设您的 excel 文件存储在工作目录中名为“data”的文件夹中。使用 getwd()setwd() 获取/设置工作目录(或使用 RStudio IDE 中的项目)。

library(h2o)        # Professional grade ML pkg
library(tidyquant)  # Loads tidyverse and several other pkgs 
library(readxl)     # Super simple excel reader
library(lime)       # Explain complex black-box ML models
library(recipes)    # Preprocessing for machine learning

hr_data_raw_tbl <- read_excel(path = "data/WA_Fn-UseC_-HR-Employee-Attrition.xlsx")

hr_data_organized_tbl <- hr_data_raw_tbl %>%
  mutate_if(is.character, as.factor) %>%
  select(Attrition, everything())

recipe_obj <- hr_data_organized_tbl %>%
  recipe(formula = Attrition ~ .) %>%
  step_rm(EmployeeNumber) %>%
  step_zv(all_predictors()) %>%
  step_center(all_numeric()) %>%
  step_scale(all_numeric()) %>%
  prep(data = hr_data_organized_tbl)

hr_data_bake_tbl <- bake(recipe_obj, newdata = hr_data_organized_tbl) 

h2o.init()

hr_data_bake_h2o <- as.h2o(hr_data_bake_tbl)

hr_data_split <- h2o.splitFrame(hr_data_bake_h2o, ratios = c(0.7, 0.15), seed = 1234)

train_h2o <- h2o.assign(hr_data_split[[1]], "train" ) # 70%
valid_h2o <- h2o.assign(hr_data_split[[2]], "valid" ) # 15%
test_h2o  <- h2o.assign(hr_data_split[[3]], "test" )  # 15%

y <- "Attrition"
x <- setdiff(names(train_h2o), y)

automl_models_h2o <- h2o.automl(
  x = x, 
  y = y,
  training_frame    = train_h2o,
  validation_frame  = valid_h2o,
  leaderboard_frame = test_h2o,
  max_runtime_secs  = 15
)

automl_leader <- automl_models_h2o@leader

explainer <- lime::lime(
  as.data.frame(train_h2o[,-1]), 
  model          = automl_leader, 
  bin_continuous = FALSE
)

explanation <- lime::explain(
  x              = as.data.frame(test_h2o[1:10,-1]), 
  explainer      = explainer, 
  n_labels       = 1, 
  n_features     = 4,
  n_permutations = 500,
  kernel_width   = 1
)

explanation

【讨论】:

  • 我能够为该数据运行您的代码并获得输出...我只是不确定它对我的数据集有什么不满意...
  • 错误消息表明响应列存在问题。确保您的响应是具有相同级别的因子,这意味着级别 0 = 否,级别 1 = 是,对于您的所有数据拆分。如果因子水平不一致,可能会导致此问题。
  • 我在解释步骤中遇到了同样的错误:“(function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply不同的行数:5000, 0" 有什么想法吗?
  • 好的,谢谢你,马特!我将响应更改为简单的是/否,就像您示例中的数据集一样,它接受了该部分。
  • 我仍然无法在解释步骤中解决此错误的变体。任何见解?:“(函数中的错误(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,:参数意味着不同的行数:500、0”
猜你喜欢
  • 2020-01-03
  • 1970-01-01
  • 2017-12-17
  • 2015-12-11
  • 2019-11-19
  • 2018-08-01
  • 1970-01-01
  • 2018-03-29
  • 2013-06-22
相关资源
最近更新 更多