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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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] 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)

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

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

看样子要换台给力点的电脑了╮(╯▽╰)╭

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

 

5.       分类效果

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117093.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 5 个流行的用于远程工作和在线会议的开源视频会议工具

    5 个流行的用于远程工作和在线会议的开源视频会议工具5个流行的用于远程工作和在线会议的开源视频会议工具作者: <spanclass=”textcut”><ahref=”https://itsfoss.com/open-source-video-conferencing-tools/”target=”_blank”>AnkushDas</a></span> <span>译者:LCTT this-is-name-right…

  • C#的封装_封装元器件

    C#的封装_封装元器件封装:即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的作用:封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作封装的优点:1.良好的封装能够减少

  • vagrant系列三:vagrant搭建的php7环境

    vagrant系列三:vagrant搭建的php7环境

  • pytest接口自动化测试框架_什么模块需要做接口自动化

    pytest接口自动化测试框架_什么模块需要做接口自动化pytest接口自动化完整框架思维导图

  • 基于单片机的智能交通灯控制系统的设计实验_单片机控制系统红绿灯设计

    基于单片机的智能交通灯控制系统的设计实验_单片机控制系统红绿灯设计本设计采用了一套可用于智能交通灯的方案。该套设计方案采用51单片机作为系统的主控芯片,使用LED数码管,红黄绿三种颜色的发光二极管。通过对定时器的设置和中断的控制,实现交通信号灯的功能。本设计引入了车流量检测,通过在地面铺设环形线圈传感器,测量车辆通过数量,检测车流量的大小,来自动调节红绿灯的显示时间。还设置了按键模块,在紧急情况时可通过按键模块实现任一方向的可持续通行的效果,经过仿真对本文方案进行验证。测试结果表明,所设计的智能信号交通灯微机控制系统符合设计要求。……

  • C语言中fprintf函数的使用介绍

    C语言中fprintf函数的使用介绍C语言中fprintf函数的使用介绍fprint函数的原型://fp为文件指针,format是输出控制字符串intfprintf(FILE*fp,char*format,…)下面是使用fscanf和fprintf函数实现一个学生信息输入和输出的demo#include<stdio.h>#include<stdlib.h>#include<st…

    2022年10月18日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号