一、初始化设置

1 jvm out of memory 解决方案:

在weka SimpleCLI窗口依次输入
java -Xmx 1024m

2 修改配置文件,使其支持中文:

配置文件是在Weka安装后的目录下,比如我的是在C:\Program Files\Weka-3-7\RunWeka.ini,打开这个文件,找到fileEncoding=Cp1252这一行,改成fileEncoding=utf-8即可。如下:

# The file encoding; use "utf-8" instead of "Cp1252" to display UTF-8 characters in the
# GUI, e.g., the Explorer
fileEncoding=utf-8

如果是在C盘,可能会提示没有权限保存,这时可以把这个配置文件复制到桌面,修改完了再替换回去。

有些同学,改完配置文件,中文依然乱码,可能因为源文件不是utf8编码格式的,可以用notepad++把arff文件打开,然后选择格式->转为UTF-8编码格式,保存。

二、数据格式:

Weka使用的数据格式是它自己规定的,arff格式,大概就是这个样子:

@relation F__zle_study_ccf_code_Archive_text3

@attribute text string
@attribute @@class@@ {text006,text010,text013,text014,text015,text016,text020,text023,text024,text026,text100,text103,text104,text105,text106,text110,text113,text114,text115,text116,text120,text121,text122,text123,text124,text125,text126,text200,text203,text204,text205,text206,text210,text211,text212,text213,text214,text215,text216,text220,text222,text223,text224,text225,text226,text300,text302,text303,text304,text305,text306,text310,text311,text312,text313,text314,text315,text316,text320,text321,text322,text323,text324,text325,text326,text400,text403,text404,text405,text406,text410,text411,text412,text413,text414,text415,text416,text420,text421,text422,text423,text424,text425,text426,text500,text510,text511,text512,text513,text514,text515,text520,text521,text522,text523,text524,text525,text526,text600,text610,text612,text613,text614,text616,text620,text623,text624}

@data
'地图 中国 完整版 电影 秘密 官网 乔丹 2016 超载 超限 规定 最高 现在 中国 电影 超轻型',text006

'货运 远洋 秘密 版大图 世界地图 高清 顺德 版大图 高清 唐朝',text014

1 将文件转换成ARFF文件:

TextDirectoryLoader

java weka.core.converters.TextDirectoryLoader -dir text_example > text_example.arff

该方法只能通过命令行实现。如果是在windows下,要首先在环境变量里加入weka.jar的位置,再在cmd里敲入命令行。

该类的作用是把输入目录转化成ARFF文件,但是转化之后的ARFF文件里的属性是string型的,依然是大多数分类器不能处理的,需要做进一步处理。该类的作用相当于把每个文本表示一行的string格式。

输入的文件目录的格式应为图1所示:

图1 文件目录格式

一个生成图1格式的代码

import os
re_base='F:\zle\study\ccf\code\Archive\dict_keywords.txt'#文件读取目录
wr_base="F:/zle/study/ccf/code/Archive/text3/text" #文件生成目录
with open(re_base,'r') as f:
line=f.readlines() for x in range(107):#一共有107类
catalog=line.pop(0).split(':')[0]
file_name=wr_base+str(catalog)
if not os.path.exists(file_name):
os.path.join(wr_base,str(catalog))
os.mkdir(file_name)
else:
pass
with open(file_name+'/'+str(catalog)+'.txt','w') as f:
f.write(line.pop(0).replace(',',' '))

2.StringToWordVector

由TextDirectoryLoader转化成的arff还不能直接用来分类,还需StringToWordVector类的进一步处理。这步在命令行和GUI上都能操作,但建议直接转到GUI上来操作更清楚、方便。

在打开的WEKA界面中选择打开已经上一步处理过的文件,然后选择StringToWordVector,该类位于weka.filters.unsupervised.attribute.StringToWordVector中,然后点击可以配置参数。这也是GUI的好处之一,可以配置更加详细的参数。

GUI步骤:

    1. 进入Weka的Explorer页面,Open file..选中这个e:/data.arff文件
    2. 在Filter中点击Choose 
      选择 weka->filters->unsupervised->attribute->StringToWordVector 
      点击Apply之后,Weka将自动统计词频,将词转成特征。

      在StringToWordVector中可以配置是否使用TFIDF特征,词频是否只使用0,1统计(outputWordCounts=false)

参数介绍

这里简要介绍一下StringToWordVector可能需要自己做调整的参数:

-W 需要保留的单词个数,默认为1000。这不是最终的特征维数,但是维数跟此参数是正相关的

-stopwords <file> 输入停词文件,文件格式为每一个词一行。在读文件到转化特征时会自动去掉这些常用词,系统自带有一套停用词。

-tokenizer <spec> 自定义所要去除的符号,一般为标点符号。默认有常用的标点符号,但往往是不够的,所以需自己添加

其他参数只需默认值即可。在GUI当中,还有一些参数设置需要介绍:

lowerCaseTokens 是否区分大小写,默认为false不区分,这里一般要设置为ture,因为同一个词就会有大小写的区别

三.特征选择与训练

提取完ARFF文件之后,可以按上方的按钮保存文件。在Attribute一栏中也会显示所有的特征,此时也可以自己观察一下所提取的单词是否合理,然后再在去停词、符号等等方面做改进,当然若至于少部分的有问题,也可以手动剔除。

此步进行完之后,可以使用降维方法(例如PCA)对特征进行降维,当然这不是必须的。

接下来就可以按照一般ARFF文件进行训练了。

进入Classify面板,在Start按钮上面的下拉框中,选中(Nom)@@class@@ 这个表示分类的标签属性列

点Choose按钮选择trees中的J48,然后点击Start,Weka便开始进行训练。只要数据格式正确了,可以使用这里面的各个分类器进行训练,比如RandomForest,NaiveBayes,比较分类效果。

四 Weka输出结果的简单说明

=== Summary ===(总结)

Correctly Classified Instances(正确分类的实例)          45               90      %
Incorrectly Classified Instances (错误分类的实例)        5               10      %
Kappa statistic(Kappa统计量)                               0.792 
Mean absolute error(均值绝对误差)                           0.1   
Root mean squared error(均方根误差)                   0.3162
Relative absolute error(相对绝对误差)                    20.7954 %
Root relative squared error(相对均方根误差)             62.4666 %
Coverage of cases (0.95 level)          90      %
Mean rel. region size (0.95 level)      50      %
Total Number of Instances(实验的实例总数)               50

=== Detailed Accuracy By Class ===

  TP Rate(真阳性率) FP Rate(假阳性率) Precision(查准率)   Recall(查全率)  F-Measure  MCC(Matthews相关系数)    ROC Area  PRC Area  Class(类别)
                     0.773           0                1               0.773       0.872         0.81            0.886      0.873     true
                      1               0.227           0.848            1          0.918         0.81            0.886      0.848     false
Weighted Avg.       0.9            0.127           0.915            0.9       0.898         0.81            0.886      0.859

 

weka 文本分类(1)的更多相关文章

  1. 基于weka的文本分类实现

    weka介绍 参见 1)百度百科:http://baike.baidu.com/link?url=V9GKiFxiAoFkaUvPULJ7gK_xoEDnSfUNR1woed0YTmo20Wjo0wY ...

  2. Tensorflow二分类处理dense或者sparse(文本分类)的输入数据

    这里做了一些小的修改,感谢谷歌rd的帮助,使得能够统一处理dense的数据,或者类似文本分类这样sparse的输入数据.后续会做进一步学习优化,比如如何多线程处理. 具体如何处理sparse 主要是使 ...

  3. Atitti 文本分类  以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案

    Atitti 文本分类  以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案 1.1. 七.什么是贝叶斯过滤器?1 1.2. 八.建立历史资料库2 1.3. 十.联合概率的计算3 1.4. 十一. ...

  4. LingPipe-TextClassification(文本分类)

    What is Text Classification? Text classification typically involves assigning a document to a catego ...

  5. 文本分类之特征描述vsm和bow

    当我们尝试使用统计机器学习方法解决文本的有关问题时,第一个需要的解决的问题是,如果在计算机中表示出一个文本样本.一种经典而且被广泛运用的文本表示方法,即向量空间模型(VSM),俗称“词袋模型”. 我们 ...

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

    Part4文本分类 Part3文本聚类提到过.与聚类分类的简单差异. 那么,我们需要理清训练集的分类,有明白分类的文本:測试集,能够就用训练集来替代.预測集,就是未分类的文本.是分类方法最后的应用实现 ...

  7. Spark ML下实现的多分类adaboost+naivebayes算法在文本分类上的应用

    1. Naive Bayes算法 朴素贝叶斯算法算是生成模型中一个最经典的分类算法之一了,常用的有Bernoulli和Multinomial两种.在文本分类上经常会用到这两种方法.在词袋模型中,对于一 ...

  8. 文本分类学习(三) 特征权重(TF/IDF)和特征提取

    上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...

  9. 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)

    前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...

随机推荐

  1. background和background-size

    今天偶遇一个小问题. 添加logo图片时, 由于不需要重新定位图片位置,就准备偷懒在间歇属性中省略background-position的属性,然而很不幸的是,结果却是酱紫的(谷歌浏览器): 不能加载 ...

  2. Qt窗体内控件自适应调整大小

    http://stackoverflow.com/questions/3492739/auto-expanding-layout-with-qt-designer After creating you ...

  3. JS中注意原型链的“指向”

    昨天压缩Js文件时发现了项目中的一个prototype的问题代码如下所示: 1. <script> var XXX = function(){ }; var x1 = new XXX(); ...

  4. Android笔记:java 中的枚举

    部分数据使用枚举比较方便,java中的enmu不如c#中使用方便 记录备忘 以c#中的代码为例 public enum PlayState { /// <summary> /// 关闭 / ...

  5. SQL Server 2008 R2[ALTER]列属性修改

    1:向表中添加字段 Alter table [表名] add [列名] 类型 2:  删除字段 Alter table [表名]  drop column [列名] 3:  修改表中字段类型 (可以修 ...

  6. mysql导入导出

    1.导入整个库 进入数据库,source 进去的语句等同于直接连接数据库后数据的语句 >source /var/www/test.sql 或者 sy$ mysql -uroot -p 数据库名( ...

  7. mongoDB命令

    . getLastError db.runCommand({getLastError:}) . buildInfo //返回mongoDB的服务器版本号和操作系统类型 db.runCommand({} ...

  8. 【转】(转)【Android】Paint的效果研究

    转自:http://wpf814533631.iteye.com/blog/1847661 (转)[Android]Paint的效果研究 博客分类: android   在Paint中有很多的属性可以 ...

  9. 关于action script与js相互调用的Security Error问题

    大家都知道,as和js相互调用可以通过ExternalInterface.call和ExternalInterface.addCallback来进行. 比较好的做法是使用之前通过ExternalInt ...

  10. @MyBatis中的if...else...

    <select id="selectSelective" resultMap="xxx" parameterType="xxx"> ...