• weka 文本分类(1)


    一、初始化设置

    1 jvm out of memory 解决方案:

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

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

    配置文件是在Weka安装后的目录下,比如我的是在C:Program FilesWeka-3-7RunWeka.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:zlestudyccfcodeArchivedict_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

     
  • 相关阅读:
    正则表达式中/i,/g,/ig,/gi,/m的区别和含义
    Git 使用中显示“Another git process seems to be running in this repository...”问题解决
    MySQL数据库中varchar与char类型的区别
    上传本地代码到gitHub过程详解
    PHP实现四种基本排序算法
    最优秀的5个Linux文本编辑器 狼人:
    11款有用的Web开发在线工具 狼人:
    Java.net网站新改版上线 狼人:
    WebMatrix进阶教程(3):如何实现某种样式 狼人:
    新界面新功能Firefox 4.0 RC重磅登场 狼人:
  • 原文地址:https://www.cnblogs.com/zle1992/p/5954687.html
Copyright © 2020-2023  润新知