R语言社区主题检测算法应用案例

简介: R语言社区主题检测算法应用案例

使用R检测相关主题的社区


创建主题网络

对于Project Mosaic,我正在通过分析抽象文本和共同作者社交网络来研究UNCC在社会科学和计算机和信息学方面的出版物。

我遇到的一个问题是:如何衡量主题之间的关系(相关性)?特别是,我想创建一个连接类似主题的网络可视化,并帮助用户更轻松地浏览大量主题(在本例中为100个主题)。


数据准备

我们的第一步是加载作为LDA输出的主题矩阵。LDA有两个输出:字主题矩阵和文档主题矩阵。

作为加载平面文件的替代方法,您可以使用topicmodels包lda函数的输出来创建任何单词主题和文档主题矩阵。

# 读取作者主题矩阵
author.topic <- read.csv("./author_topics.csv", stringsAsFactors = F)
#

top.words <- word.topics[order(-word.topic[,i])]
name$topic_name[i] <- paste(top.words[1:5], collapse = " + ")
}
# 
colnames(author.topic) <- c("author_name",name$topic_name)

与摘要是文档的标准LDA不同,我运行了一个“以作者为中心”的LDA,其中所有作者的摘要被合并并被视为每个作者的一个文档。我跑这是因为我的最终目标是使用主题建模作为信息检索过程来确定研究人员的专业知识。


创建静态网络

在下一步中,我使用每个主题的单词概率之间的相关性创建一个网络。

首先,我决定只保留具有显着相关性(20%+相关性)的关系(边缘)。我使用20%,因为它对于100个观察维基百科的样本具有0.05的统计显着性水平。


cor_threshold <- .2
接下来,我们使用相关矩阵来创建igraph数据结构,删除所有具有小于20%最小阈值相关性的边。


library(igraph)
让我们绘制一个简单的igraph网络。


par(mar=c(0, 0, 3, 0))y30")title("Strength Between Topics Based On Word Probabilities", cex.main=.8)


每个数字代表一个主题,每个主题都有编号以识别它。

使用社区检测,特别是igraph中的标签传播算法来确定网络中的群集。

clp <- cluster_label_prop(graph)class(clp)title("Community Detection in Topic Network", cex.main=.8)

社区检测发现了13个社区,以及每个孤立主题的多个额外社区(即没有任何联系的主题)。

与我最初的观察结果类似,该算法找到了我们在第一个图中识别的三个主要聚类,但也添加了其他较小的聚类,这些聚类似乎不适合三个主要聚类中的任何一个。

V(graph)$community <- clp$membershipV(graph)$degree <- degree(graph, v = V(graph))

动态可视化

在本节中,我们将使用visNetwork允许R中的交互式网络图的包。

首先,让我们调用库并运行visIgraph一个交互式网络,但是使用igraph图形设置在igraph结构(图形)上运行。

library(visNetwork)


这是一个良好的开端,但我们需要有关网络的更多详细信息。

让我们通过创建visNetwork数据结构走另一条路。为此,我们将igraph结构转换为visNetwork数据结构,然后将列表分成两个数据帧:节点和边缘。

data <- toVisNetworkData(graph)nodes <- data[[1]]


删除没有连接的节点(主题)(度= 0)。

nodes <- nodes[nodes$degree != 0,]


让我们添加颜色和其他网络参数来改善我们的网络。

library(RColorBrewer)col <- brewer.pal(12, "Set3")[as.factor(nodes$community)]nodes$shape <- "dot"s$betweenness))+.2)*20 # Node sizenodes$color.highlight.background <- "orange"


最后,让我们用交互式情节创建我们的网络。您可以使用鼠标滚轮进行缩放。


visNetwork(nodes, edges) %>%visOptions(highlightNearest = TRUE, selectedBy = "community", nodesIdSelection = TRUE)


首先,有两个下拉菜单。第一个下拉列表允许您按名称查找任何主题(按单词概率排名前五个单词)。

第二个下拉列表突出显示了我们算法中检测到的社区。

最大的三个似乎是:

  • 计算(灰色,簇4)
  • 社交(绿蓝,簇1)
  • 健康(黄色,簇2)

检测到的较小社区有什么独特之处?你能解释一下吗?


目录
打赏
0
0
0
0
111
分享
相关文章
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
83 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
基于反光衣和检测算法的应用探索
本文探讨了利用机器学习和计算机视觉技术进行反光衣检测的方法,涵盖图像预处理、目标检测与分类、特征提取等关键技术。通过YOLOv5等模型的训练与优化,展示了实现高效反光衣识别的完整流程,旨在提升智能检测系统的性能,应用于交通安全、工地监控等领域。
基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真
本项目基于MATLAB 2022a,展示了SVM、PSO、GA-PSO-SVM在混沌背景下微弱信号检测中的性能对比。核心程序包含详细中文注释和操作步骤视频。GA-PSO-SVM算法通过遗传算法和粒子群优化算法优化SVM参数,提高信号检测的准确性和鲁棒性,尤其适用于低信噪比环境。
基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF
本项目基于MATLAB2022A实现IEKF迭代扩展卡尔曼滤波算法的数据跟踪仿真,对比EKF和UKF的性能。通过仿真输出误差收敛曲线和误差协方差收敛曲线,展示三种滤波器的精度差异。核心程序包括数据处理、误差计算及可视化展示。IEKF通过多次迭代线性化过程,增强非线性处理能力;UKF避免线性化,使用sigma点直接处理非线性问题;EKF则通过一次线性化简化处理。
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真
本程序基于二次规划优化的OFDM系统PAPR抑制算法,旨在降低OFDM信号的高峰均功率比(PAPR),以减少射频放大器的非线性失真并提高电源效率。通过MATLAB2022A仿真验证,核心算法通过对原始OFDM信号进行预编码,最小化最大瞬时功率,同时约束信号重构误差,确保数据完整性。完整程序运行后无水印,展示优化后的PAPR性能提升效果。
基于Adaboost的数据分类算法matlab仿真
本程序基于Adaboost算法进行数据分类的Matlab仿真,对比线性与非线性分类效果。使用MATLAB2022A版本运行,展示完整无水印结果。AdaBoost通过迭代训练弱分类器并赋予错分样本更高权重,最终组合成强分类器,显著提升预测准确率。随着弱分类器数量增加,训练误差逐渐减小。核心代码实现详细,适合研究和教学使用。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等