tm.package:findAssocs 与 Cosine

2024-02-02

我是新来的,我的问题是数学问题而不是编程性质,我想就我的方法是否有意义获得第二意见。

我试图使用该函数在我的语料库中找到单词之间的关联findAssocs, 来自tm包裹。尽管它在通过该包提供的数据(例如《纽约时报》和美国国会)上表现得相当不错,但我对其在我自己的不太整洁的数据集上的表现感到失望。它似乎很容易被罕见的文档所扭曲,这些文档包含相同单词的多次重复,这似乎在它们之间建立了很强的关联。我发现余弦度量可以更好地描述术语的相关程度,尽管基于文献,它仅倾向于用于衡量文档而不是术语的相似性。让我们使用美国国会的数据RTextTools包来证明我的意思:

首先,我将设置一切...

data(USCongress)

text = as.character(USCongress$text)

corp = Corpus(VectorSource(text)) 

parameters = list(minDocFreq        = 1, 
                  wordLengths       = c(2,Inf), 
                  tolower           = TRUE, 
                  stripWhitespace   = TRUE, 
                  removeNumbers     = TRUE, 
                  removePunctuation = TRUE, 
                  stemming          = TRUE, 
                  stopwords         = TRUE, 
                  tokenize          = NULL, 
                  weighting         = function(x) weightSMART(x,spec="ltn"))

tdm = TermDocumentMatrix(corp,control=parameters)

假设我们有兴趣调查“政府”和“外国”之间的关系:

# Government: appears in 37 docs and between then it appears 43 times
length(which(text %like% " government"))
sum(str_count(text,"government"))

# Foreign: appears in 49 document and between then it appears 56 times
length(which(text %like% "foreign"))
sum(str_count(text,"foreign"))

length(which(text[which(text %like% "government")] %like% "foreign"))
# together they appear 3 times

# looking for "foreign" and "government"
head(as.data.frame(findAssocs(tdm,"foreign",0.1)),n=10)

             findAssocs(tdm, "foreign", 0.1)
countri                                 0.34
lookthru                                0.30
tuberculosi                             0.26
carryforward                            0.24
cor                                     0.24
malaria                                 0.23
hivaid                                  0.20
assist                                  0.19
coo                                     0.19
corrupt                                 0.19

# they do not appear to be associated

现在让我们添加另一个包含重复 50 次的“外国政府”的文档:

text[4450] = gsub("(.*)",paste(rep("\\1",50),collapse=" "),"foreign government")
corp = Corpus(VectorSource(text)) 
tdm = TermDocumentMatrix(corp,control=parameters)

#running the association again:
head(as.data.frame(findAssocs(tdm,"foreign",0.1)),n=10)

             findAssocs(tdm, "foreign", 0.1)
govern                                  0.30
countri                                 0.29
lookthru                                0.26
tuberculosi                             0.22
cor                                     0.21
carryforward                            0.20
malaria                                 0.19
hivaid                                  0.17
assist                                  0.16
coo                                     0.16

正如您所看到的,现在情况不同了,一切都归结为一个文档。

在这里,我想做一些非常规的事情:使用余弦来查找文档空间中术语之间的相似性。该度量往往用于查找文档之间的相似性而不是术语之间的相似性,但我认为没有理由不能使用它来查找单词之间的相似性。在传统意义上,文档是向量,术语是轴,我们可以根据这些文档之间的角度来检测它们的相似度。但是术语文档矩阵是文档术语矩阵的转置,类似地,我们可以在文档空间中投影术语,即让您的文档作为轴,让术语作为向量,您可以测量它们之间的角度。它似乎没有遇到与简单相关性相同的缺点:

cosine(as.vector(tdm["government",]),as.vector(tdm["foreign",]))
     [,1]
[1,]    0

除此之外,这两项措施似乎非常相似:

tdm.reduced = removeSparseTerms(tdm,0.98)

Proximity = function(tdm){ 
  d = dim(tdm)[1] 
  r = matrix(0,d,d,dimnames=list(rownames(tdm),rownames(tdm))) 
  for(i in 1:d){ 
    s = seq(1:d)[-c(1:(i-1))] 
    for(j in 1:length(s)){ 
      r[i,s[j]] = cosine(as.vector(tdm[i,]),as.vector(tdm[s[j],])) 
      r[s[j],i] = r[i,s[j]] 
    } 
  } 
  diag(r) = 0 
  return(r) 
}

rmat = Proximity(tdm.reduced)

# findAssocs method
head(as.data.frame(sort(findAssocs(tdm.reduced,"fund",0),decreasing=T)),n=10)

        sort(findAssocs(tdm.reduced, "fund", 0), decreasing = T)
use                                                         0.11
feder                                                       0.10
insur                                                       0.09
author                                                      0.07
project                                                     0.05
provid                                                      0.05
fiscal                                                      0.04
govern                                                      0.04
secur                                                       0.04
depart                                                      0.03

# cosine method
head(as.data.frame(round(sort(rmat[,"fund"],decreasing=T),2)),n=10)

       round(sort(rmat[, "fund"], decreasing = T), 2)
use                                              0.15
feder                                            0.14
bill                                             0.14
provid                                           0.13
author                                           0.12
insur                                            0.11
state                                            0.10
secur                                            0.09
purpos                                           0.09
amend                                            0.09

但令人惊讶的是,我还没有看到余弦被用来检测术语之间的相似性,这让我想知道我是否错过了一些重要的事情。也许这个方法有我没有想到的缺陷。因此,如果您对我所做的事情有任何想法,我们将不胜感激。

如果您已经做到了这一点,感谢您的阅读!

Cheers


如果我理解你的查询(我认为应该在堆栈交换上)。我认为问题在于术语距离findAssocs使用欧几里得测量。因此,只要是单词的两倍的文档就会成为异常值,并且在距离测量中被认为有很大不同。
改用余弦作为文档的度量被广泛使用,所以我怀疑术语也可以。我喜欢skmeans通过余弦对文档进行聚类的包。 Spherical K-Means 将直接接受 TDM 并计算单位长度的余弦距离。

This video https://www.youtube.com/watch?v=ZEkO8QSlynY如果您还不知道的话,在 ~11m 处会显示它。 希望这有点帮助......最后我相信余弦是可以接受的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tm.package:findAssocs 与 Cosine 的相关文章

  • 从 n,k 维矩阵数组中减去 n,k 维矩阵

    如果我有一个数组A A lt array 0 c 4 3 5 for i in 1 5 set seed i A i lt matrix rnorm 12 4 3 如果我有矩阵 B set seed 6 B lt matrix rnorm
  • 将字符串列拆分为多个虚拟变量

    作为 R 中 data table 包的相对缺乏经验的用户 我一直在尝试将一个文本列处理为大量指示符列 虚拟变量 每列中的 1 表示特定的子字符串是在字符串列中找到 例如我想处理这个 ID String 1 a b 2 b c 3 c 进入
  • R 可以创建带有可单击条形图的条形图图像以插入网页吗?

    我知道如何创建条形图 以及如何将其粘贴在网页上 例如 使用hwriteImage in the 作家包 http www embl de gpau hwriter 我想要的是每个栏都是一个在鼠标悬停时突出显示的区域 并且每个栏在单击时都有不
  • 列出 R 数据文件的内容而不加载

    我有时用print load myDataFile RData 当我加载数据文件时列出它的内容 有没有办法列出内容而不加载数据文件中包含的对象 我认为如果不加载对象就无法做到这一点 解决方案可能是使用包装器将 R 对象保存到save 该函数
  • purrr::可能函数可能无法与map2_chr函数一起使用

    我怀疑这是 purrr 包中的错误 但想先在 StackOverflow 中检查我的逻辑 在我看来 possibly功能在内部不起作用map2 chr功能 我正在使用 purrr 版本 0 2 5 考虑这个例子 library dplyr
  • R 中两个时间戳之间的左连接

    我的目标是执行左连接intervals哪里的bike id比赛和created at时间戳在records在 之间start and end in the intervals table gt class records 1 data ta
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何在 data.table 中分组后使用条件计算行数

    我有以下数据框 dat lt read csv s1 s2 v1 v2 a b 10 20 a b 22 NA a b 13 33 c d 3 NA c d 4 5 NA c d 10 20 dat gt A tibble 6 x 4 gt
  • 如何按用户定义(例如非字母顺序)对数据框进行排序[重复]

    这个问题在这里已经有答案了 给定一个数据框dna gt dna chrom start chr2 39482 chr1 203918 chr1 198282 chrX 7839028 chr17 3874 以下代码重新排序dna by ch
  • 如何纠正 data.frame 上的字符编码

    我有一个像这样的数据框 data names lt data frame DATA c 1 5 rownames data names lt c IV xc1N JOS xc9 LUC xcdA RAM xd3N TO xd1O data
  • 将列表中的每个元素转换为数据框中的一列

    假设我有以下列表 d library combinat d permn c a b c 这看起来如下 1 1 a b c 2 1 a c b 3 1 c a b 4 1 c b a 5 1 b c a 6 1 b a c 是否可以将此列表的
  • 为什么 sapply 的缩放速度比样本大小的 for 循环慢?

    假设我想采用向量 X 2 1 N 并将 e 计算为每个元 素的指数 是的 我认识到最好的方法就是通过向量化 exp X 但这样做的目的是将 for 循环与 sapply 进行比较 我通过逐步尝试三种方法 一种使用 for 循环 两种以不同方
  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • `as.matrix` 和 `as.data.frame` S3 方法与 S4 方法

    我注意到定义as matrix or as data frame作为 S4 类的 S3 方法 使例如lm formula objS4 and prcomp object 开箱即用 如果它们被定义为 S4 方法 则这不起作用 为什么将方法定义
  • 在 Shiny 中显示反应式 htmlTable 表格

    我正在制作我的第一个 Shiny 应用程序 但找不到任何有关如何显示使用 htmlTable 包创建的表格的示例 我基本上想在按下按钮时创建一个表格并显示它 Shiny 显示 html 代码而不是表格 我不知道用什么替换服务器部分中的 re
  • 使用选定因子水平的值向 ggplot-barchart 添加水平线

    在这个情节中 df lt data frame factor as factor c rep A 3 rep B 3 Treatment c rep c A B C 2 values runif 6 0 1 ggplot df aes Tr
  • 矩阵乘法 - 视图/投影、世界/投影等

    在 HLSL 中有很多矩阵乘法 虽然我了解如何以及在何处使用它们 但我不确定它们是如何导出的或它们的实际目标是什么 所以我想知道是否有在线资源可以解释这一点 我特别好奇将世界矩阵乘以视图矩阵以及世界 视图矩阵乘以投影矩阵背后的目的是什么 您
  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used
  • 需要在R中跳过不同数量的行

    我正在使用以下代码来处理我的数据 但最近我意识到使用skip 27 在数据开始之前跳过存储在我的文件中的信息 不是一个好的选择 因为每个文件中要跳过的行数不同我的目标是读取存储在多个文件夹中的各种txt文件 并非所有文件都有相同的列数 列的

随机推荐

  • 创建 tf.keras 回调以保存 tf 2.0 训练期间每批的模型预测和目标

    在tensorflow 2中 不再支持获取和分配 按照 中提供的答案 可以在自定义 keras 回调中访问 tf 1 x 中的批处理结果https stackoverflow com a 47081613 9949099 https sta
  • 如何摆脱波动性?

    如何摆脱波动性 我应该使用哪种 C 风格转换 Use const cast 例如 volatile sample pvs new sample sample ps const cast
  • 限制CursorLoader中的查询

    我正在尝试通过 CursorLoader 从 sqlite db 查询数据 当我浏览 Android 开发者网站中的文档时 我找不到限制查询 CursorLoader Context context Uri uri String proje
  • python 3.7 urllib.request 不遵循重定向 URL

    我正在使用带有 urllib 的 Python 3 7 一切工作正常 但当它收到 http 重定向请求 307 时 它似乎没有自动重定向 这是我得到的错误 ERROR 2020 06 15 10 25 06 968 HTTP Error 3
  • 23/12/2013 是用 MM/dd/yyyy 格式映射的,为什么,为什么不是 ParseException

    有人可以帮忙吗 public void dateCalender throws ParseException System out println new SimpleDateFormat MM dd yyyy Locale ENGLISH
  • 使用代码禁用对讲

    我为盲人构建了一个应用程序 它以文本到语音的方式运行 当我打开对讲时 我的应用程序不运行 锁定在徽标屏幕上 我寻找的是当我的应用程序运行时对讲会停止 除非您已获得系统权限 否则无法在您的应用内打开或关闭 TalkBackWRITE SECU
  • USPS API 返回 80040B19 错误代码并且帐户处于生产状态

    所以我的问题是根据文档 这非常薄 而且不是最好的 我拥有的 xml 是所需的一切 但我得到了这个错误代码
  • 如何计算斜边和方位角

    我通过此链接从 DanS 获得了以下代码如何显示带有移动当前位置的地图静止图像文件 https stackoverflow com questions 7062115 android how to display a map still i
  • 调整图像大小并更改其深度

    我需要调整 IplImage 的大小并将其转换为不同深度的 CvMat 这是我到目前为止编写的代码 void cvResize2 IplImage imgSrc IplImage imgDst IplImage imgTemp imgTem
  • 选择如何使用 JSF 将参数传递到目标 bean/页面

    我已经使用 JSF 几年了 但在决定如何将参数传递到目标页面 bean 时我仍然心存疑虑 我确实认为这个问题有点复杂 有些人可能会告诉我将其分解为更小的问题 但是 我还认为以下所有问题的答案都是相关的 并且它解决了当您希望 JSF 做的只是
  • 如何在 UWP 中打印 PDF 且光栅化为 PNG 后不损失质量

    在对 UWP 中的打印进行一些调查之后 我强调了 如果不将此任务重定向到 Edge 或其他类似程序 则没有直接从应用程序打印 PDF 文档的本机方法 有一种方法可以使用打印 XAML 元素 例如图像 打印文档 有一种将 PDF 渲染为 PN
  • 设置 ant bootclasspath:JDK 1.7 有一个新的 javac 警告,用于设置没有 bootclasspath 的旧源

    如何将 ant bootclasspath 与 source 1 5 target 1 5 结合使用 这怎么可能不是 1 5 JDK 的硬编码路径呢 我可以将环境变量设置为 bootclasspath 类似于从 ant 使用 JAVA HO
  • 套接字连接被中止 - WCF

    我有一个简单的客户端服务器应用程序 当我启动服务器并通过客户端发送消息时 它使用 WCF netTcpBinding 一切正常 但是当我手动关闭服务器并再次打开它时 无需在以下位置关闭客户端应用程序 所有 下次客户端尝试向服务器发送消息时
  • Objective-C 中的 AES 字符串加密

    我的 Objective C 应用程序需要做string加密 特别是nsstring questions tagged nsstring 我发现 AES 是可供消费者使用的最安全的加密方法 我也了解如何将字符串转换为NSData然后回来 只
  • 如何为类本身(而不是类的实例)选择自定义字符串表示形式?

    考虑这个类 class foo object pass 默认的字符串表示形式如下所示 gt gt gt str foo
  • 如何使用 UI-Router 仅更新命名视图

    我正在创建一个网络应用程序来帮助学生学习科学 历史和数学 当您第一次登陆该网站时 我有一个主页 登陆页面 当您单击 开始 时 我会转到 exam instructions 我的每个步骤都说明了我加载到的模板中的数学和科学ui view ex
  • IBAction、IBOutlet 等中的 IB 是什么意思?

    我对 iPhone 开发非常陌生 我经常遇到IBAction IBOutlet阅读 Objective C 和 Swift 代码时等等 什么是IB代表 界面生成器 在 Xcode 4 之前 接口文件 XIB 和 NIB 是在名为 Inter
  • 尽管没有使用布尔值,但我得到“类型不匹配无法从 int 转换为布尔值”

    我正在 Java如何编程 一书中做练习 我应该制作一个模拟抛硬币的应用程序 我应该创建一个方法 翻转 它随机返回硬币的一面 我决定让该方法返回 1 或 2 并且在主方法中我将这些值 转换 为硬币的一面 问题是我收到一条错误消息 类型不匹配
  • TextView 中的链接

    我需要将链接放在TextView 我有一个包含标签的字符串 a href link Text for link a 和一些其他文字 问题是 如果我运行该项目 我可以看到文本 但不可单击 我尝试过 b 也标记一下看看是否有效 但似乎也不起作用
  • tm.package:findAssocs 与 Cosine

    我是新来的 我的问题是数学问题而不是编程性质 我想就我的方法是否有意义获得第二意见 我试图使用该函数在我的语料库中找到单词之间的关联findAssocs 来自tm包裹 尽管它在通过该包提供的数据 例如 纽约时报 和美国国会 上表现得相当不错