当前位置:网站首页>R语言做文本挖掘 Part4文本分类
R语言做文本挖掘 Part4文本分类
2022-07-06 12:55:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
Part4文本分类
Part3文本聚类提到过。与聚类分类的简单差异。
那么,我们需要理清训练集的分类,有明白分类的文本;測试集,能够就用训练集来替代。预測集,就是未分类的文本。是分类方法最后的应用实现。
1. 数据准备
训练集准备是一个非常繁琐的功能,临时没发现什么省力的办法,依据文本内容去手动整理。这里还是使用的某品牌的官微数据,依据微博内容。我将它微博的主要内容分为了:促销资讯(promotion)、产品推介(product)、公益信息(publicWelfare)、生活鸡汤(life)、时尚资讯(fashionNews)、影视娱乐(showbiz)。每一个分类有20-50条数据。例如以下可看到训练集下每一个分类的文本数目,训练集分类名为中文也没问题。
训练集为hlzj.train,后面也会被用作測试集。
预測集就是Part2里面的hlzj。
> hlzj.train <-read.csv(“hlzj_train.csv”,header=T,stringsAsFactors=F)
> length(hlzj.train)
[1] 2
> table(hlzj.train$type)
fashionNews life product
27 34 38
promotion publicWelfare showbiz
45 22 36
> length(hlzj)
[1] 1639
2. 分词处理
训练集、測试集、预測集都须要做分词处理后才干进行兴许的分类过程。
这里不再具体说明,过程类似于Part2中讲到的。
训练集做完分词后hlzjTrainTemp。之前对hlzj文件做过分词处理后是hlzjTemp。
然后分别将hlzjTrainTemp和hlzjTemp去除停词。
> library(Rwordseg)
加载须要的程辑包:rJava
# Version: 0.2-1
> hlzjTrainTemp <- gsub(“[0-90123456789 < > ~]”,””,hlzj.train$text)
> hlzjTrainTemp <-segmentCN(hlzjTrainTemp)
> hlzjTrainTemp2 <-lapply(hlzjTrainTemp,removeStopWords,stopwords)
>hlzjTemp2 <-lapply(hlzjTemp,removeStopWords,stopwords)
3. 得到矩阵
在Part3中讲到了。做聚类时要先将文本转换为矩阵,做分类相同须要这个过程。用到tm软件包。先将训练集和预測集去除停词后的结果合并为hlzjAll,记住前202(1:202)条数据是训练集,后1639(203:1841)条是预測集。获取hlzjAll的语料库,而且得到文档-词条矩阵。将其转换为普通矩阵。
> hlzjAll <- character(0)
> hlzjAll[1:202] <- hlzjTrainTemp2
> hlzjAll[203:1841] <- hlzjTemp2
> length(hlzjAll)
[1] 1841
> corpusAll <-Corpus(VectorSource(hlzjAll))
> (hlzjAll.dtm <-DocumentTermMatrix(corpusAll,control=list(wordLengths = c(2,Inf))))
<<DocumentTermMatrix(documents: 1841, terms: 10973)>>
Non-/sparse entries: 33663/20167630
Sparsity : 100%
Maximal term length: 47
Weighting : term frequency (tf)
> dtmAll_matrix <-as.matrix(hlzjAll.dtm)
4. 分类
用到knn算法(K近邻算法)。这个算法在class软件包里。
矩阵的前202行数据是训练集,已经有分类了,后面的1639条数据没有分类。要依据训练集得到分类模型再为其做分类的预測。
将分类后的结果和原微博放在一起。用fix()查看,能够看到分类结果,效果还是挺明显的。
> rownames(dtmAll_matrix)[1:202] <-hlzj.train$type
> rownames(dtmAll_matrix)[203:1841]<- c(“”)
> train <- dtmAll_matrix[1:202,]
> predict <-dtmAll_matrix[203:1841,]
> trainClass <-as.factor(rownames(train))
> library(class)
> hlzj_knnClassify <-knn(train,predict,trainClass)
> length(hlzj_knnClassify)
[1] 1639
> hlzj_knnClassify[1:10]
[1] product product product promotion product fashionNews life
[8] product product fashionNews
Levels: fashionNews life productpromotion publicWelfare showbiz
> table(hlzj_knnClassify)
hlzj_knnClassify
fashionNews life product promotion publicWelfare showbiz
40 869 88 535 28 79
> hlzj.knnResult <-list(type=hlzj_knnClassify,text=hlzj)
> hlzj.knnResult <-as.data.frame(hlzj.knnResult)
> fix(hlzj.knnResult)
Knn分类算法算是最简单的一种。后面尝试使用神经网络算法(nnet())、支持向量机算法(svm())、随机森林算法(randomForest())时。都出现了电脑内存不够的问题,我的电脑是4G的,看内存监控时能看到最高使用达到3.92G。
看样子要换台给力点的电脑了╮(╯▽╰)╭
在硬件条件能达到时,应该实现分类没有问题。相关的算法能够用:??方法名,的方式来查看其说明文档。
5. 分类效果
上面没有讲到測试的过程,对上面的样例来说,就是knn前两个參数都用train,由于使用数据集同样。所以得到的结果也是正确率能达到100%。在训练集比較多的情况下。能够将其随机按7:3或者是8:2分配成两部分,前者做训练后者做測试就好。这里就不再细述了。
在分类效果不理想的情况下。改进分类效果须要丰富训练集。让训练集特征尽量明显。这个在实际问题是一个非常繁琐却不能敷衍的过程。
有什么能够改进的地方欢迎更正,转载请注明出处,谢谢!
版权声明:本文博主原创文章,博客,未经同意不得转载。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117093.html原文链接:https://javaforall.cn
边栏推荐
- Mtcnn face detection
- Infrared thermometer based on STM32 single chip microcomputer (with face detection)
- Laravel笔记-自定义登录中新增登录5次失败锁账户功能(提高系统安全性)
- 拼多多败诉,砍价始终差0.9%一案宣判;微信内测同一手机号可注册两个账号功能;2022年度菲尔兹奖公布|极客头条
- 【mysql】游标的基本使用
- 基于STM32单片机设计的红外测温仪(带人脸检测)
- Web开发小妙招:巧用ThreadLocal规避层层传值
- 1_ Introduction to go language
- 【OpenCV 例程200篇】220.对图像进行马赛克处理
- How to implement common frameworks
猜你喜欢
Detailed explanation of knowledge map construction process steps
[asp.net core] set the format of Web API response data -- formatfilter feature
039. (2.8) thoughts in the ward
全网最全的新型数据库、多维表格平台盘点 Notion、FlowUs、Airtable、SeaTable、维格表 Vika、飞书多维表格、黑帕云、织信 Informat、语雀
【滑动窗口】第九届蓝桥杯省赛B组:日志统计
OAI 5g nr+usrp b210 installation and construction
2022菲尔兹奖揭晓!首位韩裔许埈珥上榜,四位80后得奖,乌克兰女数学家成史上唯二获奖女性
1_ Introduction to go language
Hardware development notes (10): basic process of hardware development, making a USB to RS232 module (9): create ch340g/max232 package library sop-16 and associate principle primitive devices
【论文解读】用于白内障分级/分类的机器学习技术
随机推荐
el-table表格——sortable排序 & 出现小数、%时排序错乱
Entity alignment two of knowledge map
Statistical inference: maximum likelihood estimation, Bayesian estimation and variance deviation decomposition
Pat 1085 perfect sequence (25 points) perfect sequence
Introduction to the use of SAP Fiori application index tool and SAP Fiori tools
js中,字符串和数组互转(二)——数组转为字符串的方法
Chris LATTNER, the father of llvm: why should we rebuild AI infrastructure software
Reference frame generation based on deep learning
7. Data permission annotation
ICML 2022 | Flowformer: 任务通用的线性复杂度Transformer
性能测试过程和计划
15million employees are easy to manage, and the cloud native database gaussdb makes HR office more efficient
3D face reconstruction: from basic knowledge to recognition / reconstruction methods!
Redis insert data garbled solution
Yyds dry goods count re comb this of arrow function
@PathVariable
Pinduoduo lost the lawsuit, and the case of bargain price difference of 0.9% was sentenced; Wechat internal test, the same mobile phone number can register two account functions; 2022 fields Awards an
How to turn a multi digit number into a digital list
Infrared thermometer based on STM32 single chip microcomputer (with face detection)
【深度学习】PyTorch 1.12发布,正式支持苹果M1芯片GPU加速,修复众多Bug