R:当情况并非如此时,LIME 在不同的特征编号上返回错误

2023-12-11

我正在构建克林顿和特朗普推文的文本分类器(数据可以在Kaggle ).

我正在使用 EDA 和建模quanteda包裹:

library(dplyr)
library(stringr)
library(quanteda)
library(lime)

#data prep
tweet_csv <- read_csv("tweets.csv")
tweet_data <- tweet_csv %>% 
  select(author = handle,
     text,
     retweet_count,
     favorite_count,
     source_url,
     timestamp = time) %>% 
mutate(date = as_date(str_sub(timestamp, 1, 10)),
     hour = hour(hms(str_sub(timestamp, 12, 19))),
     tweet_num = row_number()) %>% 
select(-timestamp)

# creating corpus and dfm
tweet_corpus <- corpus(tweet_data)

edited_dfm <- dfm(tweet_corpus, remove_url = TRUE, remove_punct = TRUE,     remove = stopwords("english"))

set.seed(32984)
trainIndex <- sample.int(n = nrow(tweet_csv), size =     floor(.8*nrow(tweet_csv)), replace = F)

train_dfm <- edited_dfm[as.vector(trainIndex), ]
train_raw <- tweet_data[as.vector(trainIndex), ]
train_label <- train_raw$author == "realDonaldTrump"

test_dfm <- edited_dfm[-as.vector(trainIndex), ]
test_raw <- tweet_data[-as.vector(trainIndex), ]
test_label <- test_raw$author == "realDonaldTrump"

# making sure train and test sets have the same features
test_dfm <- dfm_select(test_dfm, train_dfm)

# using quanteda's NB model
nb_model <- quanteda::textmodel_nb(train_dfm, train_labels)
nb_preds <- predict(nb_model, test_dfm) 


# defining textmodel_nb as classification model
class(nb_model)

model_type.textmodel_nb_fitted <- function(x, ...) {
  return("classification")
}

# a wrapper-up function for data preprocessing

get_matrix <- function(df){
  corpus <- corpus(df)
  dfm <- dfm(corpus, remove_url = TRUE, remove_punct = TRUE, remove = stopwords("english"))
}

然后我定义解释器 - 这里没有问题:

explainer <- lime(train_raw[1:5],
              model = nb_model,
              preprocess = get_matrix)

但是当我运行解释器时,即使在与中完全相同的数据集上explainer,我收到错误:

explanation <- lime::explain(train_raw[1:5], 
                              explainer, 
                              n_labels = 1,
                              n_features = 6,
                              cols = 2,
                              verbose = 0)

Predict.textmodel_nb_fitted(x, newdata = newdata, type = type, 中的错误: 新数据中的特征集与训练集中的特征集不同

有什么关系吗quanteda和dfms?老实说,我不明白为什么会发生这种情况。任何帮助都会很棒,谢谢!


我们可以将错误追溯到predict_model,这称为predict.textmodel_nb_fitted(我只使用了前 10 行train_raw以加快计算速度):

traceback()
# 7: stop("feature set in newdata different from that in training set")
# 6: predict.textmodel_nb_fitted(x, newdata = newdata, type = type, 
#        ...)
# 5: predict(x, newdata = newdata, type = type, ...)
# 4: predict_model.default(explainer$model, case_perm, type = o_type)
# 3: predict_model(explainer$model, case_perm, type = o_type)
# 2: explain.data.frame(train_raw[1:10, 1:5], explainer, n_labels = 1, 
#        n_features = 5, cols = 2, verbose = 0)
# 1: lime::explain(train_raw[1:10, 1:5], explainer, n_labels = 1, 
#        n_features = 5, cols = 2, verbose = 0)

问题是predict.textmodel_nb_fitted需要 dfm,而不是数据框。例如,predict(nb_model, test_raw[1:5])给你相同的“新数据中的特征集与训练集中的特征集不同”错误。然而,explain将数据框作为其x争论。

解决办法是写一个自定义的textmodel_nb_fitted方法用于predict_model在调用之前进行必要的对象转换predict.textmodel_nb_fitted:

predict_model.textmodel_nb_fitted <- function(x, newdata, type, ...) {
  X <- corpus(newdata)
  X <- dfm_select(dfm(X), x$data$x)   
  res <- predict(x, newdata = X, ...)
  switch(
   type,
   raw = data.frame(Response = res$nb.predicted, stringsAsFactors = FALSE),
   prob = as.data.frame(res$posterior.prob, check.names = FALSE)
  )  
}

这给了我们

explanation <- lime::explain(train_raw[1:10, 1:5], 
                              explainer,
                              n_labels = 1,
                              n_features = 5,
                              cols = 2,
                              verbose = 0)
explanation[1, 1:5]
#       model_type case label label_prob    model_r2
# 1 classification    1 FALSE  0.9999986 0.001693861
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:当情况并非如此时,LIME 在不同的特征编号上返回错误 的相关文章

  • 如何在 R 树形图中省略标签?

    我一直在使用R 树形图包 http cran r project org web packages treemap treemap pdf我有一个 2 层深的树形图 我希望打印第二级标签 但不打印第一级标签 使用手册页中的示例 tmPlot
  • 使用 R:如何创建带有日期的时间序列对象?

    我有一年中每小时采集的一系列值 是否可以创建一个保留小时和年份值的时间序列对象 我的代码使用股票价格第一列中的值 但不使用日期 stockprices ts lt ts stockprices 1 start 1 freq 168 您没有提
  • 将 r 数据框中的列字符串转换为数字

    我有一个数据框 其中有一列字符串 如下所示 mydata lt c 1 356670 35 355030 1 356670 35 355030 1 356620 35 355890 1 356930 35 358660 1 357000 3
  • r caret 包中的 train 函数的模型输出尺寸巨大

    我正在使用 bagFDA 模型进行训练train r caret 包中的函数 并将模型输出保存为 Rdata 文件 输入文件大约有 300k 条记录 有 26 个变量 但输出 Rdata 大小为 3G 我只是运行以下命令 modelout
  • 使用 igraph 将边缘属性显示为标签

    我在 R 中使用 igraph 进行网络分析 我想在图中的每条线上显示边缘属性 下面是一个例子 df lt data frame a c 0 1 2 3 4 b c 3 4 5 6 7 nod lt data frame node c 0
  • 如何加速 R for 循环?

    我正在为 R 中 GWmodel 包中的 gwr basic 函数运行以下 for 循环 我需要做的是收集任何给定带宽的估计参数的平均值 代码如下 library GWmodel data DubVoter Dub voter LARent
  • R:为什么 kable 不在 for 循环内打印?

    我正在使用 rmarkdown 和 Latex 编写报告 我需要使用打印一组表格knitr kable 但在 for 循环内时不会打印 这是我的代码 title project title author Mr Author date 201
  • 字边界正则表达式问题

    我在使用单词边界时遇到问题 b在我的正则表达式中 我正在使用 R 但当我尝试时问题也存在http regexr com http regexr com 我使用的模式是 bs l b 虽然我预计下面的第 1 行和第 3 行能够匹配此模式 但只
  • 列槽不足

    当尝试为 data table 中的每个变量 108 个变量 创建 12 个滞后时 我收到一条错误 指出列槽不足 此操作应创建大约 1200 个变量或列 Data A as data table Datos A Varnames names
  • Plotly 绘图不会在 RMarkdown 文档的 for 循环内渲染

    我正在尝试动态构建一个需要运行循环的报告 并为每次迭代打印一些消息 表格和绘图 我可以让一切正常运转except为了情节 示例 rmd r echo FALSE results asis fig keep all message FALSE
  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http
  • R Data.Table 创建带有条件的变量

    我需要在下面的数据集中创建一个新变量 A X a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 The newvar如果X等于 2 5 7 或 9 否则 newvar应该是 0 Code dt1 lt dat
  • 使用 R 读取和转换二进制原始数据

    我有一个file https drive google com file d 0BxMpk0nhnJy6SFhxd2xuMzJYYlk edit usp sharing其中包含原始 二进制数据和 ascii 它包含一个时间戳和一个代表速度的
  • read.table 和 read.delim 函数之间的区别

    两者有什么区别read table and read delim R语言中的函数 当您不确定函数的作用时 除了阅读帮助页面之外 您还可以检查函数的实际代码 例如 输入read delim显示该函数包含以下代码 gt read delim f
  • 使用 stargazer 分析包含时间序列的数据帧

    我有一个面板数据集共 10 个观测值和 3 个变量 观测值 30 的数量 10 行 国家 地区 2 列 迁移参数 相应年份的 1 列 可以这么说 我的数据框由 3 个年度数据框组成 我该如何申请观星者考虑到它是一个面板数据集 所以最大 N
  • 在 R Shiny 中,如何使用可排序 js 将其在列表中出现的顺序次数附加到每个列表元素?

    下面的可重现代码适用于将元素从一个面板拖动到另一个面板 并在 拖动到 面板中自动使用 HTML CSS 对拖入的每个元素进行排名顺序编号 但是 我现在尝试附加到每个 拖动到 列表元素的末尾 使用某种形式的paste0 我假设 该元素在 拖至
  • 对于多项式,获取其所有极值并通过突出显示所有单调部分来绘制它

    有人问我这个有趣的问题 我认为值得将其发布在这里 因为 Stack Overflow 上还没有任何相关线程 假设我有长度为的多项式系数n vector pc 其中次数多项式n 1对于变量x可以以其原始形式表示 pc 1 pc 2 x pc
  • Shiny可以识别用鼠标选择的文本(突出显示的文本)吗?

    我需要用户将文本片段分配给 Shiny 中的类别或 代码 基本上 我希望用户突出显示输出中的文本 在下面的示例中 来自table or text输出 然后按一个按钮 code 并将选定的文本分配给应用程序内的对象 在下面的应用程序中 所选文
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • 将 read.csv 与符号链接文件一起使用

    我正在尝试做什么 我的源文件非常大 我想避免将其复制到其他文件夹中 我决定创建一个指向大文件的符号链接并想使用read csv读取文件 文件夹结构 项目1 数据 源文件 csv 项目2 数据 别名到源文件 csv 什么地方出了错 读取源文件

随机推荐

  • 在 Expect 脚本中处理多个衍生进程

    这是我的预期脚本的用例 我拥有的少数几个之一 我想运行多个sed通过 ssh 命令 它就像预构建环境设置一样 我想运行这样的东西 usr bin expect set timeout 1 spawn noecho bash c ssh t
  • 如何使用命令行从私有仓库下载 GitHub Release

    GitHub 指南解释了两种授权方式 但看起来这两种方式都不适用于发布文件 后果 curl u username L o a tgz https github com company repository releases download
  • 如何在 Android 的 Unity 中将 System.IO.Stream 转换为纹理?

    我正在 Unity 中构建客户端 Android 应用程序 当它从 AWS S3 服务器下载 jpg 时 结果会以 System IO Stream 的形式返回 然而 我对 Mono 和 Net 的了解有限 这意味着我正在努力弄清楚如何将这
  • SQL 内部联接返回的行数比预期多得多

    当每个表只有 340 行时 以下查询返回 gt 7000 行 SELECT Config Spec TempTable Spec FROM Confg INNER JOIN TempTable on Config Spec TempTabl
  • 为所有用户从 VS.NET MSI 安装程序项目安装快捷方式

    我在这里搜索了又搜索 我尝试过以下方法但没有成功 将项目安装程序属性设置为 InstallforAllUsers 不记得确切的名称 但这确实会将快捷方式添加到所有用户的菜单 但只有安装该应用程序的用户才能运行它 其他用户收到 SysWOW6
  • 动画显示正在退出/被替换的路线

    我通过以下实现进行了简单的淡入淡出页面转换 return new PageRouteBuilder opaque true pageBuilder BuildContext context Animation
  • 访问API网关时缺少身份验证令牌?

    我正在尝试通过 AWS API Gateway 调用 Lambda 函数 当我提到身份验证类型 NONE 时 它工作正常 但 API 变得公开 任何拥有 url 的人都可以访问我的 API 为了使 API 调用安全 我使用身份验证类型 AW
  • 如何在 Azure 应用服务中使用 .Net Core 应用程序发布 Angular 9 Universal

    我使用 Angular 9 创建了一个 Asp NET Core Web 应用程序 我已将 Angular Universal 添加到我的应用程序中 现在我需要将我的应用程序发布到 Azure 应用程序服务中 我使用以下命令来构建应用程序
  • 支持文本路径的文本渲染库

    我需要一个良好 可靠的库或工具链 用于以编程方式将具有不同大小 字体 粗细等的文本渲染为 png 它还需要能够以弧线或路径渲染文本 我希望它能够很快 因为我会像在服务器上运行它一样 我尝试过使用 SVG 和librsvg 但这不会渲染
  • iPhone键盘返回键颜色

    我们可以改变iPhone键盘返回键颜色的颜色吗 苹果支持吗 如果是的话 你能帮我改变它吗 没有可用的公共 API 如果您使用私有 API 那么您的应用程序将在应用程序商店中被拒绝
  • 多种数据类型的列表?

    我有两个这样的课程 public class MachineLine public double X1 public double Y1 public double X2 public double Y2 public double Thi
  • 如何从 Windows Phone 7 或 8 获取用户自己的手机号码

    我想提取 用户own手机号码 不是他的整个电话簿 我使用c 作为开发语言 谢谢 如果您想获取设备自己的电话号码 目前还不可能
  • Spring Cloud Dataflow 有什么好处?

    根据我所看到的 在 Spring Cloud Dataflow SCDF 中创建流将部署底层应用程序 绑定通信服务 如 RabbitMQ 设置 Spring Cloud Stream 环境变量并启动应用程序 这一切都可以使用 cf Push
  • 在 msvc 2010 中构建 boost MPI 时出错

    我已将 openmpi 安装在 C Program Files OpenMPI v1 5 4 win32 中 并希望编译 boost 以生成图形并行库 但出现以下错误 The system cannot find the path spec
  • 如何在 React JSX 中调用 Web API?

    我正在使用 React 和 Electron 编写一个音乐播放器 并希望添加音频元数据 以便获得 MPRIS 支持 所以我做了一些搜索并发现媒体会话API是我所需要的 为了测试它 我将上述链接包含的示例代码中的代码复制到我的项目中的函数中
  • JPA Query.getResultList() - 以通用方式使用

    我正在创建一个包含多个表的复杂查询 并且需要列出结果 通常 我使用EntityManager并将结果映射到 JPA Representation UserEntity user em find UserEntity class 5 然后我可
  • 设置和禁用 JToggleButton 的图标

    你好 我正在尝试制作一个使用 JToggleButton 的匹配记忆游戏 最重要的是 当我按下按钮时 它必须显示一张图片 并且我必须找到另一张相同的图片 所以问题是当我创建一个没有任何图标的按钮时我不能使用其他方法 setRollOverI
  • 过滤 elmah 中的异常文本

    有没有办法使用异常消息过滤 elma 中的异常 例子 System Web HttpException 请求超时 我不想过滤掉所有的 HttpException 而只想过滤掉超时的请求 System Web HttpException 超出
  • 如何读取带有空格的 cin 直到换行符?

    我希望从 C 中的 cin 读取当前位置直到换行符到字符串中 要读取的字符可能包含空格 我的第一遍失败 因为它停在第一个空格上 string result cin gt gt result 如果给出 cin cd my dir doSome
  • R:当情况并非如此时,LIME 在不同的特征编号上返回错误

    我正在构建克林顿和特朗普推文的文本分类器 数据可以在Kaggle 我正在使用 EDA 和建模quanteda包裹 library dplyr library stringr library quanteda library lime dat