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

Part4文本分类

Part3文本聚类提到过。与聚类分类的简单差异。

那么,我们需要理清训练集的分类,有明白分类的文本;測试集,能够就用训练集来替代。预測集,就是未分类的文本。是分类方法最后的应用实现。

1.       数据准备

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

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

预測集就是Part2里面的hlzj。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2wxMTQzMDE1OTYx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

> 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分配成两部分,前者做训练后者做測试就好。这里就不再细述了。

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

有什么能够改进的地方欢迎更正,转载请注明出处,谢谢!

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-11-01 20:56:33

R语言做文本挖掘 Part4文本分类的相关文章

R语言做文本挖掘Part4

Part4文本分类 Part3文本聚类里讲到过,分类跟聚类的简单差异.所以要做分类我们需要先整理出一个训练集,也就是已经有明确分类的文本:测试集,可以就用训练集来替代:预测集,就是未分类的文本,是分类方法最后的应用实现. 1.       数据准备 训练集准备是一个很繁琐的功能,暂时没发现什么省力的办法,根据文本内容去手动整理.这里还是使用的某品牌的官微数据,根据微博内容,我将它微博的主要内容分为了:促销资讯(promotion).产品推介(product).公益信息(publicWelfare

R语言做文本挖掘 Part3文本聚类

Part3文本聚类 分类和聚类算法,都是数据挖掘中最常接触到的算法,分类聚类算法分别有很多种.可以看下下面两篇文章对常见的分类聚类算法的简介: 分类算法:http://blog.csdn.net/chl033/article/details/5204220 聚类算法:http://blog.chinaunix.net/uid-10289334-id-3758310.html 文本分类聚类会要用到这些算法去实现,暂时不用深究算法细节,R中已经有成熟的可以直接调用的这些算法了.大概说下分类和聚类的差

R语言做文本挖掘 Part2分词处理

Part2分词处理 在RStudio中安装完相关软件包之后,才能做相关分词处理,请参照Part1部分安装需要软件包.参考文档:玩玩文本挖掘,这篇文章讲用R做文本挖掘很详尽,并且有一些相关资料的下载,值得看看! 1.       RWordseg功能 说明文档可在http://download.csdn.net/detail/cl1143015961/8436741下载,这里只做简单介绍. 分词 > segmentCN(c("如果你因为错过太阳而流泪", "你也会错过星星

R语言做文本挖掘 Part1

Part1安装依赖包 R语言中中文分析的软件包是Rwordseg,Rwordseg软件包依赖rJava包,rJava需要本机中有安装Java.   第一步是安装Java,请安装JDK,JRE不行.请对应机型,下载安装32位的JDK.机器里已经有JDK的也请改成32位的,不然没办法使用Rwordseg,尝试使用过64位的,不可行. 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151

R语言做文本挖掘Part5

Part5情感分析 这是这个系列里面最后一篇文章了,其实这里文本挖掘每一个部分单拎出来都是值得深究和仔细研究的,我还处于初级研究阶段,用R里面现成的算法,来实现自己的需求,当然还参考了众多网友的智慧结晶,所以也想把我的收获总结出来分享给大家,希望也能像我一样在看大家的分享时得到自己的启发. 网上翻了下中文文本情感分析的一些文章,再回想了一下我自己做情感分析的方法,觉得我的想法真的是简单粗暴直接.这是一篇介绍中文文本情感分析倾向的论文.http://wenku.baidu.com/link?url

R语言csv与txt文本读入区分(sep参数)

R语言csv与txt文本读入区分 R语言用来处理数据很方便,而处理数据的第一步是把数据读入内存空间,平时最常用的文本数据储存格式有两种: 一种是CSV(逗号分隔符文本)另一种是TXT(Tab分隔符或空格分隔符),有时候读这两种文件格式读入容易混淆. 1,我们读入数据的时候,一般写文件名有两种方式: (1)将储存数据的文件所在的目录设置为工作目录(setwd("file path")),读文件时只需要写文件名即可 1 setwd('C:/Data/mydata') 2 data <

R语言与数据分析之三:分类算法2

上期与大家分享的传统分类算法都是建立在判别函数的基础上,通过判别函数值来确定目标样本所属的分类,这类算法有个最基本的假设:线性假设.今天继续和大家分享下比较现代的分类算法:决策树和神经网络.这两个算法都来源于人工智能和机器学习学科. 首先和小伙伴介绍下数据挖掘领域比较经典的Knn(nearest neighbor)算法(最近邻算法) 算法基本思想: Step1:计算出待测样本与学习集中所有点的距离(欧式距离或马氏距离),按距离大小排序,选择出距离最近的K个学习点: Step2:统计被筛选出来的K

[译]用R语言做挖掘数据《一》

介绍 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器3. R:在命令行输入‘R’即可进入交互式环境,下面的代码都是在交互式环境运行. 3. 环境使用 使用R语言交互式环境输入

[译]用R语言做挖掘数据《七》

时间序列与数据挖掘 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器3. R:在命令行输入‘R’进入交互式环境,下面的代码都是在交互式环境运行4. 数据:在命令行终端输入以下命令: