WEKA使用(基础配置+垃圾邮件过滤+聚类分析+关联挖掘)

本文详细介绍了如何在Ubuntu和Windows环境下配置WEKA,包括下载、解压、环境变量设置及运行。此外,文章详细探讨了WEKA在分类挖掘(垃圾邮件过滤)、聚类分析和Apriori关联挖掘中的应用,提供了数据预处理、参数调整和结果分析的过程。内容涵盖WEKA的Classifier、SimpleKMeans和Apriori算法,以及WEKA的二次开发准备工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:

1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究。

2)本小实验工作环境为Windows系统下的WEKA,实验内容主要有三部分,第一是分类挖掘(垃圾邮件过滤),第二是聚类分析,第三是关联挖掘。

  3)本文由于过长,且实验报告内的评估观点有时不一定正确,希望抛砖引玉。

(一)WEKA在Ubuntu下的配置

下载解压

  • 下载和解压weka

    。下载:

    创建目录:sudo mkdir /usr/weka。

    解压weka到该目录:unzip weka-3-6-10.zip -d /usr/weka。

配置Ubuntu的环境变量

  • 配置环境变量。还是使用vim 在/etc/environment 中配置。(新增WEKAROOT,修改CLASSPATH)

    export WEKAROOT=/usr/weka/weka-3-6-10

    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$WEKAROOT/weka.jar

    最后别忘了 source /etc/environment,加载新的配置文件。

    当然了WEKAROOT换成别的名字也可以的,如WEKA_PATH等,切记如果想换名字的话,首先用echo命令查看环境变量参数,指令如下:

    echo $WEKAROOT

    然后使用unset命令删除掉,指令为unset WEKAROOT

    最后新建一个WEKA_PATH环境,新建方法仍然是往environment文件里写入并更新。

运行WEKA

  • 运行WEKA,运行命令:cd $WEKAROOT(或者cd $WEKA_PATH

    运行命令:java -Xmx1000M -jar weka.jar(或者java -jar weka.jar

    Java虚拟机进程能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时候,没有添加-Xmx参数,那么就是64兆,这是java虚拟机默认情况下能从操作系统那里挖到的最大的内存。如果添加了-Xmx参数,将以这个参数后面的值为准,例如本指令下最大内存就是1000兆。

快速启动WEKA

  • 更加快捷的运行weka,输入以下命令:
    sudo touch /usr/bin/weka
    sudo chmod 775 /usr/bin/weka
    sudo vi /usr/bin/weka


    输入以下代码:
    #!/bin/bash
    cd $WEKAROOT
cd $WEKA_PATH
    java -Xmx1000M -jar weka.jar

    保存退出vim
    以后要运行weka,只要在命令行里直接键入命令 weka 就可以了。这里附上vim编辑的一些经验:

    1)vi 的进入

    在 shell 模式下,键入vi 及需要编辑的文件名,即可进入vi。

    例如:

        vi example.txt

    即可编辑 example.txt 文件。如果该文件存在,则编辑界面中会显示该文件的内容,并将光标定位在文件的第一行;如果文件不存在,则编辑界面中无任何内容。如果需要在进入vi 编辑界面后,将光标置于文件的第n 行,则在vi命令后面加上+n 参数即可。例如需要从example.txt 文件的第5 行开始显示,则使用如下命令:

        vi +5 example.txt

    2)退出 vi

    退出 vi 时,需要在末行模式中输入退出命令q。

    如果在文本输入模式下,首先按ESC 键进入命令模式,然后输入": "进入末行模式。在末行模式下,可使用如下退出命令:

    :q             直接退出如果在文本输入模式下修改了文档内容则不能退出

    :wq             保存后退出

    :x              wq

    :q!             不保存内容强制退出

 

(二)WEKA在Windows下的配置

安装WEKA的EXE程序包

  • 下载weka在Windows下的可执行包

    官方网站提供两类Windows下的可执行包,一类是OS直接运行的,另一类是在JVM里运行的,我下载的是基于JVM运行的类型的可执行包。

    安装过程没有什么可说的,Windows下的安装过程非常简单易懂。

运行WEKA

  • 运行Weka

    运行Weka有两类方式,一类是通过OS的操作方式运行,如双击运行或调用exe等等。还有一类是通过Java命令运行。

    OS操作下运行Weka感觉上是没有什么问题,注意是"感觉上"没有问题!事实上通过OS运行,由于什么错误也没有,可能发觉不到Weka的一些Warning。直到你需要某项Weka读取数据库的功能操作时,才发现怎么也运行不通,而却不知道为什么。

    在调用Java命令运行的过程中就发现,几个关于数据库读取的Warning!处理需要一定时间。相关Warning如下:

>java –Xmx1024M –jar weka.jar

    Trying to add database driver (JDBC): RmiJdbc.RJDriver - Error, not in CLASSPATH?

    Trying to add database driver (JDBC): jdbc.idbDriver - Error, not in CLASSPATH?

    Trying to add database driver (JDBC): org.gjt.mm.mysql.Driver - Error, not in CLASSPATH?

    Trying to add database driver (JDBC): com.mckoi.JDBCDriver - Error, not in CLASSPATH?

    Trying to add database driver (JDBC): org.hsqldb.jdbcDriver - Error, not in CLASSPATH?

WEKA启动的驱动报错

  • 弥补数据库连接的问题方法(Ubuntu和Windows皆出现)

    查询网络论坛,说linux和windows均会出现此类问题,我在Ubunntu和Win8都配置过了,确实都会出现这些Warning。

    查询网络论坛的一些大神的实验记录与心得,两大OS的解决办法基本相同,先说说Ubuntu

    1)Ubuntu解决方法

    第一步、下载相关数据驱动包,大约有5个jar包,注意Weka3-6对应的这5个jar包版本各自不同,一定要找对版本的这5个jar包。例如:对于Weka(version 3.5.5) 对于RmiJdbc,一定选择版本3.05或2.5。

    名字分别为:hsqldb.jaridb.jarmkjdbc.jarmysql-connector-java-5.1.6-bin.jarRmiJdbc.jar

    我的Weka版本为3-6-11,使用3-6-8版本的此5个jar包,没有问题。

    

    第二步、解压后把这5个jar包拷贝到/usr/lib/jvm/jdk1.7.0_25 /jre/lib/ext目录下,你的路径可能和我的不一样,记着是你的jdk安装路径就行了。(吐个槽,在这一点上,Ubuntu比Windows好使多了,复制一下这几个jar包就行了,就不会报错了。可是Windows你懂的,修改环境变量起来好累。)

 

    第三步、修改weka数据类型和数据库数据类型的映射。

    (对于这步骤操作,Weka官方wiki提供相关文档操作方法http://weka.wikispaces.com/Properties+file)

    在weka.jar里面有一个文件/weka/experiment/DatabaseUtils.props,记录了数据库操作的相关参数。还有很多文件DatabaseUtils.props.msaccess,DatabaseUtils.props.mssqlserver等,分别对应了各个数据库的操作参数,

    如果你使用msaccess,可以把DatabaseUtils.props.msaccess的内容覆盖DatabaseUtils.props。

    如果不对DatabaseUtils.props修改,可能在连接数据库时一切顺利,但在将数据装入准备预处理时,却出现找不到数据类型(can not read from database,unknown data type)之类错误。

    没关系,在DatabaseUtils.props加入类型映射就OK了。文件中一般有下面的内容(这里是我用mysql对应的文件覆盖了):

# JDBC driver (comma-separated list)

jdbcDriver=com.mysql.jdbc.Driver

# database URL

jdbcURL=jdbc:mysql://server_name:3306/database_name

# specific data types

string, getString() = 0; --> nominal

boolean, getBoolean() = 1; --> nominal

double, getDouble() = 2; --> numeric

byte, getByte() = 3; --> numeric

short, getByte()= 4; --> numeric

int, getInteger() = 5; --> numeric

long, getLong() = 6; --> numeric

float, getFloat() = 7; --> numeric

date, getDate() = 8; --> date

text, getString() = 9; --> string

time, getTime() = 10; --> date

BigDecimal,getBigDecimal()=11; -->nominal

#mysql-conversion

CHAR=0

TEXT=0

    #mysql-conversion下提供的类型一般是不够的,比如int unsigned就找不到,

所以要加入int是如何映射到weka类型的。

    在# specific data types下找到Int对应的java类型,这里是

int, getInteger() = 5; --> numeric

    所以在#mysql-conversion下新增INT=5

    再加上UNSIGNED类型,INT_UNSIGNED=6(因为unsigned比signed多一倍的数,为防止截断,要取大的类型)

    其他类型的映射依次类推。

    注意INT和UNSIGNED之间的下划线,缺了的话错误解决不了,我就在这里搞了好久。(Note: in case database types have blanks, one needs to replace those blanks with an underscore, e.g., DOUBLE PRECISION must be listed like this:DOUBLE_PRECISION=2. Notes from http://weka.wikispaces.com/weka_experiment_DatabaseUtils.props#toc4)

 

    第四步,最后最重要的是,把DatabaseUtils.props放到home目录下,重启Weka后生效。并请注意:不同的数据库,书写方法与格式不同,上面是MySql类型,还有SQL Server2000或Oracle等等,格式是不同的,可百度参考相关格式或论坛博客。

 

    2)Windows解决方法

    对于找不到jdbc驱动的问题,主要是修改RunWeka.ini,因为屡次修改classpath都不成功。干脆将jar文件的地址加到weka指定的运行时classpath中。RunWeka.ini的位置在Weka总目录下,与Weka.jar是平行目录。打开后内容底部有如下内容:

# The classpath placeholder. Add any environment variables or jars to it that

# you need for your Weka environment.

# Example with an enviroment variable (e.g., THIRD_PARTY_LIBS):

# cp=%CLASSPATH%;%THIRD_PARTY_LIBS%

# Example with an extra jar (located at D:\libraries\libsvm.jar):

# cp=%CLASSPATH%;D:\\\\libraries\\\\libsvm.jar

# Or in order to avoid quadrupled backslashes, you can also use slashes "/":

# cp=%CLASSPATH%;D:/libraries/libsvm.jar

cp=%CLASSPATH%

    根据提示,将jdbc驱动jar文件地址附加到cp变量。

    比如mysql jdbc驱动(mysql-connector.jar)在E:/jars/下,则加入下面这句:

    cp=%CLASSPATH%;E:/jars/mysql-connector.jar

    同时把cp=%CLASSPATH%注释掉,

    结果像

    cp=%CLASSPATH%;E:/jars/mysql-connector.jar

    #cp=%CLASSPATH%

    也就是说如果有5个jar包,需要在一行里一个一个写进,而不能用写一个5个jar包所在的总目录来省事。(网上有人说把那5个Jar包解压到weka路径下,然后修改CLASSPATH也能解决,我试过很多次,都不可行。)

    至于数据类型映射,参见上面Linux环境下的配置。

    最后将DatabaseUtils.props文件放在跟Weka.jar同一目录下即可。

 

    3)Windows下若上述方法失败,仍然报JDBC错误。

    解决方法有以下几种:

    一、设置系统里环境变量,因为你在RunWeka.ini内设置了classpath,结果仍然不识别,我想应该为系统里的classpath添加路径。

    二、使用java命令行,利用临时权限添加classpath的方法

    上面两方法,第一种我试了很多遍没有成功,第二种java命令会有问题,但最终成功。

    第二种方法方法细节:

    一、使用如下命令格式,但是中途出现一些问题

    java -classpath E:/Weka-3-6/jars/RmiJdbc.jar -jar weka.jar

    依然报5个错误,如下图。

    查询相关知识,java的此classpath命令会被-jar屏蔽掉,意思就是说如果java命令里有-jar参数,则会自动屏蔽-classpath添加参数

    二、我们尝试修改指令

    java -Xbootclasspath/a:/E:/Weka-3-6/jars/Rmijdbc.jar: -jar Weka.jar

    运行后发现少了一个错误,我们添加的是Rmijdbc驱动包,减少的错误恰好是RJDriverError,说明我们的目前指令成功,如果需要添加多个jar包,则在路径后面使用分号,逐步添加五个jar包。不要企图使用目录,使用目录仍然不识别。所以添加五个jar包的java指令确实很长。唯一欣慰的是,指令最后成功了,没有错误。不过请注意一点:由上述的分析我们知道它只是不报驱动错误了,以后我们使用数据库,它无法读取识别数据库的类型又是另外一码事。(下面有两张图,第一个图第一个指令是展示企图使用目录添加classpath是不正确的,第一个图第二个指令表明添加具体某一个jar包,成功减少了错误。第二个图第二个指令,一口气写了五个jar包,最后是成功的零错误,正确通过!。)

(三)WEKA使用的准备工作

WEKA数据格式中的数据属性

  • 数据格式中的数据属性

    1)二元属性(定性的)

    二元属性的英文为"binary attribute",比较好理解。可以认为它是一种特殊的标称属性,只有两个类别或状态:0或1,其中0通常表示该属性不出现,而1表示出现。二元属性又称布尔属性,如果两种状态对应于true和false的话。

    2)标称属性(定性的)

    标称属性的英文为"nominal attribute",有时候感到不好理解。标称属性值既不是具有有意义的顺序,也不是定量的。每个值代表某种类别、编码或状态,因此标称属性又被看做是分类的(categorical),所以有时候看到顾客的ID或者鞋码尺寸SIZE等,总会误认为是序号属性。所以标称属性要抓住核心概念:标称只是一种分类,即标称数值的数学运算毫无意义。顾客ID有时候会是数值属性,但注意应用的时候,如果顾客ID之间的数值加减乘除没有任何意义,则我们不认为它是数值属性,认为其为标称属性更为恰当。以年龄为例,年龄之间常常涉及到加减,所以年龄总认为是数值属性,鞋码大小不太涉及到加减意义,故认为标称的。

    3)数值属性(定量的)

    数值属性的英文为"numericattribute",它是定量的,它是可度量的量。抓住这个概念,也就是说它的数值是有意义的,可以参与加减乘除运算的,其值进行数学运算的结果常常是有意义的。

    4)序数属性(定性的)

    序数属性的英文单词为"ordinal attribute",也是不太好理解的一个属性。但是切记序数属性可以通过数值属性离散化得到,并且序数属性往往携带一种重要意义,就是具有有意义的先后次序。以快餐店售卖可乐大小杯为例,0表示小杯,1表示中杯,2表示大杯。它们既可以认为是序数属性,也可以认为是间接的标称属性。或以顾客满意度调查为例,0是很不满意,1是不太满意,2是一般,3是满意,4是非常满意。

WEKA数据集格式属性

  • 数据集格式问题

    WEKA可识别ARFF格式,也可识别CSV电子数据表格式。虽然我们知道WEKA-Explorer对于两者格式都能够读取,但对于CSV格式与ARFF格式比较感兴趣。

    1)CSV和ARFF格式

    这里写出CSV的格式,以weather.csv为例,其内容如下表所示。至于其arff格式的规范,我们通过看后续部分,就发现两者实际上通过手动改写。ARFF格式实际上就是统计了CSV格式的属性分类,并加强规范。

outlook,temperature,humidity,windy,play

sunny,85,85,FALSE,no

sunny,80,90,TRUE,no

overcast,83,86,FALSE,yes

rainy,70,96,FALSE,yes

rainy,68,80,FALSE,yes

rainy,65,70,TRUE,no

overcast,64,65,TRUE,yes

sunny,72,95,FALSE,no

sunny,69,70,FALSE,yes

rainy,75,80,FALSE,yes

sunny,75,70,TRUE,yes

overcast,72,90,TRUE,yes

overcast,81,75,FALSE,yes

rainy,71,91,TRUE,no

    2)两者转化

    一、我们知道WEKA读取时会自动转化

    二、如果需要人为干预,需要处理两个格式的内容,那么这就是比较有意思的事情了

    ARFF文件是Weka默认的储存数据集文件。每个ARFF文件对应一个二维表格。表格的各行是数据集的各实例,各列是数据集的各个属性。

    下面是Weka自带的"weather.arff"文件,在Weka安装目录的"data"子目录下可以找到。 需要注意的是,在Windows记事本打开这个文件时,可能会因为回车符定义不一致而导致分行不正常。推荐使用UltraEdit这样的字符编辑软件察看ARFF文件的内容。

%ARFF file for the weather data with some numric features

%

@relation weather

@attribute outlook {sunny, overcast, rainy}

@attribute temperature real

@attribute humidity real @attribute windy {TRUE, FALSE} @attribute play {yes, no}

@data

%

% 14 instances

%

sunny,85,85,FALSE,no

sunny,80,90,TRUE,no

overcast,83,86,FALSE,yes

rainy,70,96,FALSE,yes

rainy,68,80,FALSE,yes

rainy,65,70,TRUE,no

overcast,64,65,TRUE,yes

sunny,72,95,FALSE,no

sunny,69,70,FALSE,yes

rainy,75,80,FALSE,yes

sunny,75,70,TRUE,yes

overcast,72,90,TRUE,yes

overcast,81,75,FALSE,yes

rainy,71,91,TRUE,no

    识别ARFF文件的重要依据是分行,因此不能在这种文件里随意的断行。空行(或全是空格的行)将被忽略。

    以"%"开始的行是注释,WEKA将忽略这些行。如果你看到的"weather.arff"文件多了或少了些"%"开始的行,是没有影响的。

    除去注释后,整个ARFF文件可以分为两个部分。第一部分给出了头信息(Head information),包括了对关系的声明和对属性的声明。第二部分给出了数据信息(Data information),即数据集中给出的数据。虽然Weka也支持其他一些格式的文件,但是ARFF格式是支持的最好的。因此有必要在数据处理之前把CSV数据集的格式转换成ARFF。

    将CSV转换为ARFF最迅捷的办法是使用WEKA所带的命令行工具。运行WEKA的主程序,在菜单中找到"Simple CLI"模块,它可提供命令行功能。在新窗口的最下方(上方是不能写字的)的输入框写上

java weka.core.converters.CSVLoader filename.csv > filename.arff

    即可完成转换。

    在WEKA 3.6中提供了一个"Arff Viewer"模块(在Tools里),我们可以用它打开一个CSV文件将进行浏览,然后另存为ARFF文件。 进入"Exploer"模块,从上方的按钮中打开CSV文件然后另存为ARFF文件亦可。

    Excel的XLS文件可以让多个二维表格放到不同的工作表(Sheet)中,我们只能把每个工作表存成不同的CSV文件。打开一个XLS文件并切换到需要转换的工作表,另存为CSV类型,点"确定"、"是"忽略提示即可完成操作。接下来把得到的CSV文件按照前述步骤转换为ARFF即可。

WEKA分类挖掘的评估标准

  • 分类挖掘算法的评估性能标准

    Confusion Matrix是混淆矩阵,提供的评估标准,如下表所示。

Predicted

 

C1

¬ C1

ALL

Actual

C1

True Positives (TP)

False Negatives (FN)

P

¬ C1

False Positives (FP)

True Negatives (TN)

N

1)TP/FN/FP/TN

    对于C1事件来说,可将其看成事件中的正面事件,或称为真事件,或称为阳事件。由于预测结果为C1事件,既然结果为阳事件,正事件。说明实际过程可能由正到正,由负到正,都可成为真正,假正,说明预测都是正的。故TP可称为判正得正或真阳率或真正率,FP则为判负为正或假阳率或假正率。同理FN可推理成为判正得负或真阴率或真反率,TN顺理为判负得负或真阴率或假反率。

2)各评估率

    准确率(识别率)

    召回率(灵敏度)

    精度

     3)ROC曲线

    反映的是分类器的真正例率(TPR,灵敏度)和假正例率(FPR)之间的权衡,简而言之就说观察"真判正"占据"判真"的比率。如下图所示。

WEKA软件Explorer之Classifier

  • Classifier菜单面板区域模块介绍

1)Classifier

    点击choose按钮,可以选择weka提供的分类器。常用的分类器有:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值