R实现及相关文本挖掘 English participle

  • 1 案例背景
  • 2 准备数据
  • 3 建立训练数据和测试数据
  • 4 生成词云图表
  • 5 选取频繁词为特征
  • 6 贝叶斯建模

1 案例背景

目前朴素贝叶斯已经成功运用于垃圾邮件的过滤,也可用于垃圾短信的过滤,但是会有额外的挑战
短信文本量减少了
短信口语化:缩写,新兴词汇
数据:网上收集的带有标签的中英文短信数据
英文数据(sms_spam.csv):5559条数据,垃圾短信标记为spam,非垃圾短信标记为ham

文本处理:将数据转化成一种词袋(bag-of-words)的表示方法,忽略词序,只提供简单的变量查看单词是否出现

2 准备数据

英文文本处理中,需要考虑去除数字和标点符号,去除没有意义的单词,将句子分解成单个的单词
中文文本处理中,需要考虑去掉非中文字符或者非中英文字符,利用结巴分词需要用到的包:jiebaR,tm

library(jiebaR,quietly = T)
##read and clean
sms1<-read.csv("sms_spam.csv",encoding = "UTF-8")
View(sms1)
sms1$type<-as.factor(sms1$type)
table(sms1$type)


加载包tm,创建一个语料库(文本文件的集合)
Corpus创建一个语料库存储文本文档,读入的格式是VectorSource函数生成的向量信息
使用inspect查看语料库前三条信息

##clean use tm
install.packages("tm")
install.packages("jiebaR")
install.packages("wordcloud")
library(tm)
smsC<-Corpus(VectorSource(sms1$text))
class(smsC)
# print(smsC)
inspect(smsC[1:10])

tm_map()提供了一种用来转换(处理)语料库的方法,可以使用一系列转换函数(?getTransformations查看)来清理语料库,也可以是自定义函数

# remove characters that not letters
remove_NP<-function(x){gsub("[^a-zA-Z]"," ",x)
}
corpus1<-tm_map(smsC,function(x) stripWhitespace(removeWords(tolower(remove_NP(x)),stopwords()))) #stopwords 把停用词去掉(默认英文) stripwhitespeace 去掉多余空格
inspect(corpus1[1:10])

3 建立训练数据和测试数据

set.seed(21)
index<-sample(1:nrow(sms1),nrow(sms1)*0.75)
sms1_tr<-sms1[index,]
sms1_te<-sms1[-index,]
prop.table(table(sms1_tr$type))
prop.table(table(sms1_te$type))
smscor_tr<-corpus1[index]
smscor_te<-corpus1[-index]

4 生成词云图表

需要用到的包wordcloud,也可以用wordcloud2(如用wordcloud2,一般需要装生成频数的包qdap)
min.freq:单词在语料库中出现的最小次数(一般为文档总数目的10%);random.order指明词云是否以随机的顺序排列;max.words指明最多出现多少单词,scale表示单词的最大和最小字体

##word cloud
library(wordcloud)
pal<-brewer.pal(6,"Dark2")
wordcloud(smscor_tr,min.freq=40,random.order=T,colors=pal)#min.freq最小频率,order排序
indsp<-sms1_tr$type=="spam"
wordcloud(smscor_tr[indsp],max.words=40,random.order=F,scale=c(4,0.5),colors=pal)#max.words词云最多出现多少单词,scale词云大小
wordcloud(smscor_tr[!indsp],max.words=40,random.order=F,scale=c(4,0.5),colors=pal)


5 选取频繁词为特征

创建文档词矩阵(行为文档,列为词,较大的稀疏矩阵):DocumentTermMatrix()
剔除训练数据中出现在少于10封邮件中或少于记录总数的0.1%的所有单词,即找出所有频繁词:findFreqTerms()
按照频繁词重新生成文档词矩阵
稀疏矩阵中的元素表示单词在文档中出现的次数,需要转化成因子变量:出现yes,没出现no

##freq words
smstr<-DocumentTermMatrix(smscor_tr)#语料库对象生成词文档矩阵
inspect(smstr)
dict<-findFreqTerms(smstr,10)#认为出现10以上的为高频词
smste<-DocumentTermMatrix(smscor_te,list(dictionary=dict))
inspect(smste)
train<-apply(smstr[,dict],2,function(x) ifelse(x,"yes","no"))#把1,0转换为yes,no,这步没什么意义,主要支持naiveBayes函数
test<-apply(smste,2,function(x) ifelse(x,"yes","no"))

6 贝叶斯建模

需要用到的包e1017,gmodels
建模,预测分类,评估
其中的参数:type值为class(预测的类别)和raw(原始的预测概率)

其中的参数:prop.chisq表卡方贡献值,prop.t表示表格占比,dnn表示行列总名称

##model
library(e1071)
library(gmodels)
smsclass<-naiveBayes(train,sms1_tr$type,laplace = 0)#laplace估计test_pre<-predict(smsclass,test,type="class")
CrossTable(sms1_te$type,test_pre,prop.chisq = F,prop.t=F,dnn=c("actual","predicted"))

77 R实现及相关文本挖掘 English participle相关推荐

  1. R包操作相关:安装、卸载、加载、移除、已经安装的包、包的路径、函数查看等

    R包操作相关:安装.卸载.加载.移除.已经安装的包.包的路径.函数查看等 查看已经加载的R包: (.packages()) 列出包所在的路径: .libPaths() 查看已经安装的包的详细信息: i ...

  2. r语言 线性回归 相关系数_R语言系列第四期:R语言简单相关与回归

    这一系列里前面的三个部分都是用于比较组间差异的各种方法. 在这个部分里,我们会为大家介绍如何使用R进行基础回归和相关分析,以及模型作图.置信区间的预估和展示. A. 简单线性回归 我们使用数据集thu ...

  3. 量化投资作业的R实现——收益率相关图形绘制

    Tushare ID:482621 Tushare是一个免费的大数据平台,你可以很方便地在上面获取各种各样的数据,包括但不限于股票数据(日度,月度,年度),公司财务数据(三大报表),新闻资讯等等.只需 ...

  4. 53 bays朴素贝叶斯文本挖掘English

    #setwd("D:/data/R") # setwd("./temp")eg=c("1.文本挖掘(Test Mining)"," ...

  5. 【R】神经网络相关的R包

    本科毕业设计涉及用机器学习的方法训练预测模型,线性回归.SVM.RF等方法表现均不理想,于是需要用简单的神经网络方法做对比实验.在对NN的优化没有深入理解的情况下,直接调用了R包提供的接口,在此略作记 ...

  6. Java笔记-读取资源文件应该注意的问题(大文件解析、\r\n分割相关的)

    目前在弄一个模拟程序,数据是从XXXXXXX里XXXXX获取的,也算是真实的把,将其放到资源文件中. 如下代码在IDEA开发环境里面是正常的: byte[] bytesxxx = new byte[i ...

  7. 笔记—R语言做相关气泡图

    library(corrplot) data <- read.table(file.choose(), header = T,sep = '\t') new_data <- data[,- ...

  8. R语言画相关系数矩阵图

    参考代码 data=read.csv("C:\\Users\\Desktop\\air.csv") //读取数据路径 library(corrplot) //加载corrplot包 ...

  9. 学习笔记(77):R语言入门基础-判断逻辑

    立即学习:https://edu.csdn.net/course/play/24913/285754?utm_source=blogtoedu 某元件的硬度单位应该在[6,16]之间,如果低于这个区间 ...

最新文章

  1. 解决docker push镜像到私有仓库时的报错【http: server gave HTTP response to HTTPS client】
  2. html css 画五角星,纯 CSS3 绘制图形(心形、五角星、六边形等)
  3. Android之在TextView里面部分文字变颜色并且可以点击
  4. bzoj2060[USACO2010,Nov]Visiting Cows拜访奶牛
  5. mysql主从复制排错
  6. wdcp找回mysql密码_wdcp忘记后台admin密码,重置MYSQL ROOT密码
  7. 找零兑换(递归解法)
  8. Unit1 Homework
  9. Matlab2018a安装包Linux版本
  10. 各种时频分析方法-不定期更新
  11. 对称函数、半正定矩阵(核函数涉及)
  12. JDBC部署到Tomcat驱动加载失败
  13. 海定计算机计算标准差,方差 标准差
  14. SDU程序设计思维Week5-作业 B-TT's Magic Cat
  15. mysql的索引缺点_Sqlite数据库中索引的使用、索引的优缺点
  16. [转]firefox浏览器油猴脚本-让网页背景成苹果蓝,保护眼睛
  17. Springboot毕业设计毕设作品,黑白图片和上色处理系统 开题报告
  18. 用AI取代SGD?无需训练ResNet-50,AI秒级预测全部2400万个参数,准确率60% | NeurIPS 2021...
  19. 春季瘦身燃烧脂肪14种妙法
  20. 画图神器-drawio(配合markdown使用更佳)

热门文章

  1. 搭建完菜单后运行不显示菜单的原因及其解决方法(拼图小游戏)
  2. Redis之消息队列的实现
  3. mysql多表关联left join_Mysql多表表关联查询 inner Join left join right join
  4. Win10最后免费升级路线被封
  5. 【小记】投影仪 横评
  6. 2022年有哪些平价好用蓝牙耳机?口碑好的国产蓝牙耳机盘点
  7. API安全接口安全设计
  8. react+umi 使用本地图片做菜单icon
  9. Spark 安装与启动
  10. Section与Segment间的区别