R语言做文本挖掘 Part4文本分类

发布时间:2022-06-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了R语言做文本挖掘 Part4文本分类脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Part4文本分类

【发现有人转载,决定把格式什么重新整理一遍,有时间做个进阶版文本挖掘,恩!原文地址:CSDN-R语言做文本挖掘 Part4文本分类】Part3文本聚类里讲到过,分类跟聚类的简单差异。所以要做分类我们需要先整理出一个训练集,也就是已经有明确分类的文本;测试集,可以就用训练集来替代;预测集,就是未分类的文本,是分类方法最后的应用实现。

1. 数据准备

训练集准备是一个很繁琐的功能,暂时没发现什么省力的办法,根据文本内容去手动整理。这里还是使用的某品牌的官微数据,根据微博内容,我将它微博的主要内容分为了:促销资讯(promotion)、产品推介(product)、公益信息(publicWelfare)、生活鸡汤(life)、时尚资讯(fashionNews)、影视娱乐(showbiz),每个分类有20-50条数据,如下可看到训练集下每个分类的文本数目,训练集分类名为中文也没问题。

训练集为hlzj.train,后面也会被用作测试集。

预测集就是Part2里面的hlzj。

 

R语言做文本挖掘 Part4文本分类

hlzj.train <-read.csv("hlzj_train.csv",header=T,stringsAsFactors=F)length(hlzj.train)[1] 2table(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)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] <- hlzjTrainTemp2hlzjAll[203:1841] <- hlzjTemp2length(hlzjAll)[1] 1841corpusAll <-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$typerownames(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] 1639hlzj_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_knnClassifyfashionNews 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)

R语言做文本挖掘 Part4文本分类

Knn分类算法算是最简单的一种,后面尝试使用神经网络算法(nnet())、支持向量机算法(svm())、随机森林算法(randomForest())时,都出现了电脑内存不够的问题,我的电脑是4G的,看内存监控时能看到最高使用达到3.92G。看样子要换台给力点的电脑了╮(╯▽╰)╭

在硬件条件能达到时,应该实现分类没有问题。相关的算法可以用:??方法名,的方式来查看其说明文档。

5. 分类效果

上面没有讲到测试的过程,对上面的例子来说,就是knn前两个参数都用train,因为使用数据集相同,所以得到的结果也是正确率能达到100%。在训练集比较多的情况下,可以将其随机按7:3或者是8:2分配成两部分,前者做训练后者做测试就好。这里就不再细述了。

在分类效果不理想的情况下,改进分类效果需要丰富训练集,让训练集特征尽量明显,这个在实际问题是一个很繁琐却不能敷衍的过程。

有什么可以改进的地方欢迎指正,转载请注明来源,谢谢!————————————————版权声明:本文为CSDN博主「EchoCaiCai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/cl1143015961/article/details/44413631

脚本宝典总结

以上是脚本宝典为你收集整理的R语言做文本挖掘 Part4文本分类全部内容,希望文章能够帮你解决R语言做文本挖掘 Part4文本分类所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: