Weka学习记录

目录

 

0x01 简介

1.安装

2.使用weka进行数据挖掘

0x02 相关介绍

1.界面介绍

2.简单教程

3.数据格式

4.数据准备

5.数据预处理

0x03  实例使用

实例1  关联规则

实例2  分类与回归

实例3  聚类

实例4  weka连接mysql数据库

实例5  在myeclipse中使用weka

0x04 参考


0x01 简介

Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的、非商业化(与之对应的是SPSS公司商业数据挖掘产品--Clementine )的,基于JAVA环境下开源的机器学习(machine learning)以及数据挖掘(data mining)软件。它和它的源代码可在其官方网站下载。有趣的是,该软件的缩写WEKA也是新西兰独有的一种鸟名,而Weka的主要开发者同时恰好来自新西兰的the University of Waikato。

Weka学习记录_第1张图片

1.安装

下载与安装:链接:https://pan.baidu.com/s/14GMxr1mss_bm0bUoLNJnIw 密码:fvby (64位)

weka下载地址为http://www.cs.waikato.ac.nz/ml/weka/downloading.html

Windows版本有两种,一个带Java虚拟机,一个不带。

直接双击运行安装即可。

添加WEKA环境变量,在path中添加C:\Weka-3-6\weka.jar即可(根据自己的安装路径)

2.使用weka进行数据挖掘

一般用于特征选择、聚类、分类、数据处理、回归、关联规则、可视化

使用weka进行数据挖掘的流程如下图:

Weka学习记录_第2张图片

 

                        weka流程图

 

其中,在weka内进行的是数据预处理,训练,验证这三个步骤。

1)数据预处理:数据预处理包括特征选择,特征值处理(比如归一化),样本选择等操作。

2)训练:训练包括算法选择,参数调整,模型训练。

3)验证:对模型结果进行验证。

 

0x02 相关介绍

1.界面介绍

打开显示如图:

Weka学习记录_第3张图片

Explorer:用来进行数据实验、挖掘的环境,它提供了分类,聚类,关联规则,特征选择,数据可视化的功能。

Experimentor:用来进行实验,对不同学习方案进行数据测试的环境。

KnowledgeFlow:功能和Explorer差不多,不过提供的接口不同,用户可以使用拖拽的方式去建立实验方案。另外,它支持增量学习。

SimpleCLI:简单的命令行界面。

介绍一下主界面: 

Weka学习记录_第4张图片

1——切换不同数据挖掘任务的面板。以下介绍是对“Preprocess”面板的介绍

2——数据源操作面板,包含一些常用按钮:打开数据,保存及编辑功能。可以通过它将csv 转 arff。

3——数据过滤(预处理)面板,“Choose”某个“Filter”,可以实现筛选数据或者对数据进行某种变换。一般用于数据预处理。

4——当前关系面板,展示数据集的一些基本情况。

5——当前属性信息面板,列出数据集的所有属性。可以通过勾选“Remove”和““Undo””记性删除和找回。区域5上方的一排按钮是用来实现快速勾选的。

6——属性选择面板,有关于5中的选中的某个属性的摘要。注意对于数值属性和分类属性,摘要的方式是不一样的。图中显示的是对数值属性“outlook”的摘要。

7——当前属性可视化面板,是5中选中属性的直方图。若数据集的最后一个属性(我们说过这是分类或回归任务的默认目标变量)是分类变量(这里的“pep”正好是),直方图中的每个长方形就会按照该变量的比例分成不同颜色的段。要想换个分段的依据,在区域7上方的下拉框中选个不同的分类属性就可以了。下拉框里选上“No Class”或者一个数值属性会变成黑白的直方图。

8——状态栏,可以查看Log以判断是否有错。右边的weka鸟在动的话说明EKA正在执行挖掘任务。右键点击状态栏还可以执行JAVA内存的垃圾回收。

Weka学习记录_第5张图片 

 

2.简单教程

Weka学习记录_第6张图片

Weka学习记录_第7张图片

Weka学习记录_第8张图片 

 

3.数据格式

Weka支持很多种文件格式,包括arff、xrff、csv,甚至有libsvm的格式。其中,arff是最常用的格式,我们在这里仅介绍这一种。

Arff全称是Attribute-Relation File Format,以下是一个arff格式的文件的例子。

这里以UltraEdit打开weather.nominal.arff为例,如图:

Weka学习记录_第9张图片

Weka中打开格式如图:

Weka学习记录_第10张图片

 

图1中一共有14个实例,5个属性,关系名称为“weather.symbolic”。

WEKA存储数据的格式是ARFF(Attribute-Relation File Format)文件,这是一种ASCII文本文件。上图所示的二维表格是存储在weka安装目录data文件下的weather.nominal.arff文件。需要注意的是,在Windows记事本打开这个文件时,可能会因为回车符定义不一致而导致分行不正常。推荐使用UltraEdit这样的字符编辑软件查看ARFF文件的内容。

解释一下内容部分:

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

以“%”开始的行是注释,WEKA将忽略这些行。 除去注释后,整个ARFF文件可以分为两个部分。

第一部分给出了头信息(Head information),包括了对关系的声明和对属性的声明。

关系声明在头信息中,“@relation”开头的行代表关系名称,在整个文件的第一行(除去注释)。格式是@relation 是一个字符串。如果这个字符串包含空格,它必须加上引号(指英文标点的单引号或双引号)。

属性声明用一列以“@attribute”开头的语句表示。数据集中的每一个属性都有它对应的“@attribute”语句,来定义它的属性名称和数据类型。 这些声明语句的顺序很重要。属性声明的格式为 @attribute ,其中是必须以字母开头的字符串。和关系名称一样,如果这个字符串包含空格,它必须加上引号。

WEKA支持的有四种,分别是:

  • numeric,数字类型,包括integer(整数)和real(实数)
  • nominal,可以认为是枚举类型,即特征值是有限的集合,可以是字符串或数字。分类属性由列出一系列可能的类别名称并放在花括号中:{, , , ...} 。数据集中该属性的值只能是其中一种类别。例如本例的属性声明说明“outlook”属性有三种类别:“sunny”,“ overcast”和“rainy”。而数据集中每个实例对应的“outlook”值必是这三者之一。
@attribute outlook {sunny, overcast, rainy}
  • string,字符串类型,值可以是任意的字符串。字符串属性中可以包含任意的文本。这种类型的属性在文本挖掘中非常有用。 示例:
@ATTRIBUTE LCC string
  • Date,日期和时间属性统一用“date”类型表示,它的格式是 @attribute date [],其中是这个属性的名称,是一个字符串,来规定该怎样解析和显示日期或时间的格式,默认的字符串是ISO-8601所给的日期时间组合格式“yyyy-MM-ddTHH:mm:ss”。数据信息部分表达日期的字符串必须符合声明中规定的格式要求。

注意“integer”,“real”,“numeric”,“date”,“string”这些关键字是区分大小写的,而“relation”、“attribute ”和“date”则不区分。

第二部分给出了数据信息(Data information),即数据集中给出的数据。从“@data”标记开始,后面的就是数据信息了。每个实例占一行。实例的各属性值用逗号“,”隔开。如果某个属性的值是缺失值(missing value),用问号“?”表示,且这个问号不能省略。

@data

sunny,85,85,FALSE,no

?,78,90,?,yes

每一行代表一个实例,可以认为是一个特征向量。各个特征的顺序与头信息中的attribute逐个应,特征值之间用逗号分割。在有监督分类中,最后一列是标注的结果。

为了方便理解:

Weka学习记录_第11张图片

表格里的一个横行称作一个实例(Instance),相当于统计学中的一个样本,或者数据库中的一条记录。竖行称作一个属性(Attribute),相当于统计学中的一个变量,或者数据库中的一个字段。这样一个表格,或者叫数据集,在WEKA看来,呈现了属性之间的一种关系(Relation)。

稀疏数据

有的时候数据集中含有大量的0值(比如购物篮分析),这个时候用稀疏格式的数据存贮更加省空间。 稀疏格式是针对数据信息中某个实例的表示而言,不需要修改ARFF文件的其它部分。看如下的数据:

@data

  0, X, 0, Y, "class A"

  0, 0, W, 0, "class B"

用稀疏格式表达的话就是

@data

  {1 X, 3 Y, 4 "class A"}

  {2 W, 4 "class B"}

每个实例用花括号括起来。实例中每一个非0的属性值用 <空格> 表示。是属性的序号,从0开始计;是属性值。属性值之间仍用逗号隔开。这里每个实例的数值必须按属性的顺序来写,如 {1 X, 3 Y, 4 "class A"},不能写成{3 Y, 1 X, 4 "class A"}。

注意在稀疏格式中没有注明的属性值不是缺失值,而是0值。若要表示缺失值必须显式的用问号表示出来。

 

Relational型属性

在WEKA 3.5版中增加了一种属性类型叫做Relational,有了这种类型我们可以像关系型数据库那样处理多个维度了。但是这种类型目前还不见广泛应用,暂不作介绍。

4.数据准备

使用WEKA作数据挖掘:

  1. 支持csv文件,可以转化为arff(WEKA支持得最好的文件格式);
  2. WEKA还提供通过JDBC访问数据库的功能。
  • 1.关于.* -> .csv 

以(iris.csv)为例。用UltraEdit打开它可以看到,这种格式也是一种逗号分割数据的文本文件,储存了一个二维表格。

Weka学习记录_第12张图片

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

在Matlab中的二维表格是一个矩阵,我们通过这条命令把一个矩阵存成CSV格式。 

csvwrite('filename',matrixname) 

需要注意的是,Matllab给出的CSV文件往往没有属性名(Excel给出的也有可能没有)。而WEKA必须从CSV文件的第一行读取属性名,否则就会把第一行的各属性值读成变量名。因此我们对于Matllab给出的CSV文件需要用UltraEdit打开,手工添加一行属性名。注意属性名的个数要跟数据属性的个数一致,仍用逗号隔开。

  • 2.关于.csv -> .arff 

①将CSV转换为ARFF最迅捷的办法是使用WEKA所带的命令行工具。 运行WEKA的主程序,出现GUI后可以点击下方按钮进入相应的模块。我们点击进入“Simple CLI”模块提供的命令行功能。在新窗口的最下方(上方是不能写字的)输入框写上java weka.core.converters.CSVLoader filename.csv > filename.arff即可完成转换。 

②在WEKA 3.5中提供了一个“Arff Viewer”模块,我们可以用它打开一个CSV文件将进行浏览,然后另存为ARFF文件。 

③图形界面方法:进入“Exploer”模块,从上方的按钮中打开CSV文件然后另存为ARFF文件亦可。 

5.数据预处理

以bank-data.arff【链接:https://pan.baidu.com/s/1dB2zGV7hjzyojlw69lIHuQ 提取码:ga46】为例,bank-data数据各属性的含义如下:

Weka学习记录_第13张图片 

5.1 删除无意义的属性

通常对于数据挖掘任务来说,ID这样的信息是无用的,我们将之删除。只需要在区域5勾选属性“id”,并点击“Remove”。将新的数据集保存一次,并用UltraEdit打开这个ARFF文件。我们发现,在属性声明部分,WEKA已经为每个属性选好了合适的类型。

Weka学习记录_第14张图片

5.2 属性的离散化

我们知道,有些算法,只能处理所有的属性都是分类型的情况。这时候我们就需要对数值型的属性进行离散化。在这个数据集中有3个变量是数值型的,分别是“age”,“income”和“children”。

(1)整型的离散化:接修改ARFF文件的属性定义即可

其中“children”只有4个取值:0,1,2,3。这时我们在UltraEdit中直接修改ARFF文件,把 @attribute children numeric 改为 @attribute children {0,1,2,3} 就可以了。 

Weka学习记录_第15张图片

在“Explorer”中重新打开“bank-data.arff”,看看选中“children”属性后,区域6那里显示的“Type”是不是变成“Nominal”了?

Weka学习记录_第16张图片

(2)浮点型的离散化:通过图形界面工具

“age”和“income”的离散化我们需要借助WEKA中名为“Discretize”的Filter来完成。在区域2中点“Choose”,出现一棵“Filter树”,逐级找到“weka.filters.unsupervised.attribute.Discretize”,点击。若无法关闭这个树,在树之外的地方点击“Explorer”面板即可。

Weka学习记录_第17张图片

现在“Choose”旁边的文本框应该显示“Discretize -B 10 -M -0.1 -R first-last”。 点击这个文本框会弹出新窗口以修改离散化的参数。

Weka学习记录_第18张图片

我们不打算对所有的属性离散化,只是针对第1个和第4个属性(见区域5属性名左边的数字),故把attributeIndices右边改成“1,4”。计划把这两个属性都分成3段,于是把“bins”改成“3”。其它框里不用更改,关于它们的意思可以点“More”查看。

Weka学习记录_第19张图片

点“OK”回到“Explorer”,可以看到“age”和“income”已经被离散化成分类型的属性。若想放弃离散化可以点区域2的“Undo”。

如果对“"(-inf-34.333333]"”这样晦涩的标识不满,我们可以用UltraEdit打开保存后的ARFF文件,把所有的“'\'(-inf-34.333333]\''”替换成“0_34”。其它标识做类似地手动替换。

经过上述操作得到的数据集我们保存为bank-data-final.arff。

0x03  实例使用

 

实例1  关联规则

 

注意:目前,WEKA的关联规则分析功能仅能用来作示范,不适合用来挖掘大型数据集。 

我们打算对前面的“bank-data”数据作关联规则的分析。用“Explorer”打开“bank-data-final.arff”后,切换到“Associate”选项卡。默认关联规则分析是用Apriori算法,我们就用这个算法,但是点“Choose”右边的文本框修改默认的参数,弹出的窗口中点“More”可以看到各参数的说明。

Weka学习记录_第20张图片

背景知识  

首先我们来温习一下Apriori的有关知识。对于一条关联规则L->R,我们常用支持度(Support)和置信度(Confidence)来衡量它的重要性。规则的支持度是用来估计在一个购物篮中同时观察到L和R的概率P(L,R),而规则的置信度是估计购物栏中出现了L时也出会现R的条件概率P(R|L)。关联规则的目标一般是产生支持度和置信度都较高的规则。

有几个类似的度量代替置信度来衡量规则的关联程度,它们分别是 

Lift(提升度?): P(L,R)/(P(L)P(R)) 

Lift=1时表示L和R独立。这个数越大,越表明L和R存在在一个购物篮中不是偶然现象。 

Leverage(不知道怎么翻译):P(L,R)-P(L)P(R) 

它和Lift的含义差不多。Leverage=0时L和R独立,Leverage越大L和R的关系越密切。 

Conviction(更不知道译了):P(L)P(!R)/P(L,!R) (!R表示R没有发生)

Conviction也是用来衡量L和R的独立性。从它和lift的关系(对R取反,代入Lift公式后求倒数)可以看出,我们也希望这个值越大越好。 

值得注意的是,用Lift和Leverage作标准时,L和R是对称的,Confidence和Conviction则不然。 

 

参数设置 

现在我们计划挖掘出支持度在10%到100%之间,并且lift值超过1.5且lift值排在前100位的那些关联规则。

我们把“lowerBoundMinSupport”和“upperBoundMinSupport”分别设为0.1和1,“metricType”设为lift,“minMetric”设为1.5,“numRules”设为100。其他选项保持默认即可。“OK” 之后在“Explorer”中点击“Start”开始运行算法,在右边窗口显示数据集摘要和挖掘结果。

Weka学习记录_第21张图片

下面是挖掘出来的lift排在前面的一些规则。 

Weka学习记录_第22张图片

对于挖掘出的每条规则,WEKA列出了它们关联程度的四项指标。 

命令行方式 

我们也可以利用命令行来完成挖掘任务,在“Simlpe CLI”模块中输入如下格式的命令: 

java weka.associations.Apriori options -t directory-path\bank-data-final.arff
#注意修改文件路径

即可完成Apriori算法。注意,“-t”参数后的文件路径中不能含有空格。 

在前面我们使用的option为-N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 命令行中使用这些参数得到的结果和前面利用GUI得到的一样。 我们还可以加上“- I”参数,得到不同项数的频繁项集。我用的命令如下: 

java weka.associations.Apriori -N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -I -t d:\bank-data-final.arff

挖掘结果在上方显示,应是这个文件的样子。

Weka学习记录_第23张图片

输入运行之后报错,关于这个错误java - Weka exception: No source has been specified - Stack Overflow 的原因是路径中的/data/x.arff应该为data/x.arff。

我尝试将文件放在该目录下:C:\Weka-3-6\data

java weka.associations.Apriori -N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -I -t data/bank-data-final.arff

还是未能解决。 

实例2  分类与回归

 

背景知识 

WEKA把分类(Classification)和回归(Regression)都放在“Classify”选项卡中,这是有原因的。 

在这两个任务中,都有一个目标属性(输出变量)。我们希望根据一个样本(WEKA中称作实例)的一组特征(输入变量),对目标进行预测。为了实现这一目的,我们需要有一个训练数据集,这个数据集中每个实例的输入和输出都是已知的。观察训练集中的实例,可以建立起预测的模型。有了这个模型,我们就可以新的输出未知的实例进行预测了。衡量模型的好坏就在于预测的准确程度。

在WEKA中,待预测的目标(输出)被称作Class属性,这应该是来自分类任务的“类”。一般的,若Class属性是分类型时我们的任务才叫分类,Class属性是数值型时我们的任务叫回归。

 

选择算法 

这一节中,我们使用C4.5决策树算法对bank-data建立起分类模型。 

我们来看原来的“bank-data.csv”文件。“ID”属性肯定是不需要的。由于C4.5算法可以处理数值型的属性,我们不用像前面用关联规则那样把每个变量都离散化成分类型。尽管如此,我们还是把“Children”属性转换成分类型的两个值“YES”和“NO”。另外,我们的训练集仅取原来数据集实例的一半;而从另外一半中抽出若干条作为待预测的实例,它们的“pep”属性都设为缺失值。经过了这些处理的训练集数据在这里下载;待预测集数据在这里下载。

我们用“Explorer”打开训练集“bank.arff”,观察一下它是不是按照前面的要求处理好了。切换到“Classify”选项卡,点击“Choose”按钮后可以看到很多分类或者回归的算法分门别类的列在一个树型框里。3.5版的WEKA中,树型框下方有一个“Filter...”按钮,点击可以根据数据集的特性过滤掉不合适的算法。我们数据集的输入属性中有“Binary”型(即只有两个类的分类型)和数值型的属性,而Class变量是“Binary”的;于是我们勾选“Binary attributes”“Numeric attributes”和“Binary class”。点“OK”后回到树形图,可以发现一些算法名称变红了,说明它们不能用。选择“trees”下的“J48”,这就是我们需要的C4.5算法,还好它没有变红。

点击“Choose”右边的文本框,弹出新窗口为该算法设置各种参数。点“More”查看参数说明,点“Capabilities”是查看算法适用范围。这里我们把参数保持默认。

现在来看左中的“Test Option”。我们没有专门设置检验数据集,为了保证生成的模型的准确性而不至于出现过拟合(overfitting)的现象,我们有必要采用10折交叉验证(10-fold cross validation)来选择和评估模型。若不明白交叉验证的含义可以Google一下。

建模结果 

OK,选上“Cross-validation”并在“Folds”框填上“10”。点“Start”按钮开始让算法生成决策树模型。很快,用文本表示的一棵决策树,以及对这个决策树的误差分析等等结果出现在右边的“Classifier output”中。同时左下的“Results list”出现了一个项目显示刚才的时间和算法名称。如果换一个模型或者换个参数,重新“Start”一次,则“Results list”又会多出一项。

我们看到“J48”算法交叉验证的结果之一为Correctly Classified Instances 206 68.6667 % 

也就是说这个模型的准确度只有69%左右。也许我们需要对原属性进行处理,或者修改算法的参数来提高准确度。但这里我们不管它,继续用这个模型。 

右键点击“Results list”刚才出现的那一项,弹出菜单中选择“Visualize tree”,新窗口里可以看到图形模式的决策树。建议把这个新窗口最大化,然后点右键,选“Fit to screen”,可以把这个树看清楚些。看完后截图或者关掉。

这里我们解释一下“Confusion Matrix”的含义。 

=== Confusion Matrix === 

  a b <-- classified as 

  74 64 | a = YES 

  30 132 | b = NO 

这个矩阵是说,原本“pep”是“YES”的实例,有74个被正确的预测为“YES”,有64个错误的预测成了“NO”;原本“pep”是“NO”的实例,有30个被错误的预测为“YES”,有132个正确的预测成了“NO”。74+64+30+132 = 300是实例总数,而(74+132)/300 = 0.68667正好是正确分类的实例所占比例。这个矩阵对角线上的数字越大,说明预测得越好。

 

模型应用 

现在我们要用生成的模型对那些待预测的数据集进行预测了。注意待预测数据集和训练用数据集各个属性的设置必须是一致的。即使你没有待预测数据集的Class属性的值,你也要添加这个属性,可以将该属性在各实例上的值均设成缺失值。

在“Test Opion”中选择“Supplied test set”,并且“Set”成你要应用模型的数据集,这里是“bank-new.arff”文件。

现在,右键点击“Result list”中刚产生的那一项,选择“Re-evaluate model on current test set”。右边显示结果的区域中会增加一些内容,告诉你该模型应用在这个数据集上表现将如何。如果你的Class属性都是些缺失值,那这些内容是无意义的,我们关注的是模型在新数据集上的预测值。

现在点击右键菜单中的“Visualize classifier errors”,将弹出一个新窗口显示一些有关预测误差的散点图。点击这个新窗口中的“Save”按钮,保存一个Arff文件。打开这个文件可以看到在倒数第二个位置多了一个属性(predictedpep),这个属性上的值就是模型对每个实例的预测值。

 

使用命令行(推荐) 

虽然使用图形界面查看结果和设置参数很方便,但是最直接最灵活的建模及应用的办法仍是使用命令行。 

打开“Simple CLI”模块,像上面那样使用“J48”算法的命令格式为: 

java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path\bank.arff -d directory-path \bank.model

其中参数“ -C 0.25”和“-M 2”是和图形界面中所设的一样的。“-t ”后面跟着的是训练数据集的完整路径(包括目录和文件名),“-d ”后面跟着的是保存模型的完整路径。注意!这里我们可以把模型保存下来。

输入上述命令后,所得到树模型和误差分析会在“Simple CLI”上方显示,可以复制下来保存在文本文件里。误差是把模型应用到训练集上给出的。

把这个模型应用到“bank-new.arff”所用命令的格式为: 

java weka.classifiers.trees.J48 -p 9 -l directory-path\bank.model -T directory-path \bank-new.arff

其中“-p 9”说的是模型中的待预测属性的真实值存在第9个(也就是“pep”)属性中,这里它们全部未知因此全部用缺失值代替。“-l”后面是模型的完整路径。“-T”后面是待预测数据集的完整路径。

输入上述命令后,在“Simple CLI”上方会有这样一些结果: 

0 YES 0.75 ? 

1 NO 0.7272727272727273 ? 

2 YES 0.95 ? 

3 YES 0.8813559322033898 ? 

4 NO 0.8421052631578947 ? 

... 

这里的第一列就是我们提到过的“Instance_number”,第二列就是刚才的“predictedpep”,第四列则是“bank-new.arff”中原来的“pep”值(这里都是“?”缺失值)。第三列对预测结果的置信度(confidence )。比如说对于实例0,我们有75%的把握说它的“pep”的值会是“YES”,对实例4我们有84.2%的把握说它的“pep”值会是“NO”。

我们看到,使用命令行至少有两个好处。一个是可以把模型保存下来,这样有新的待预测数据出现时,不用每次重新建模,直接应用保存好的模型即可。另一个是对预测结果给出了置信度,我们可以有选择的采纳预测结果,例如,只考虑那些置信度在85%以上的结果。

 

实例3  聚类

原理与实现 

聚类分析中的“类”(cluster)和前面分类的“类”(class)是不同的,对cluster更加准确的翻译应该是“簇”。聚类的任务是把所有的实例分配到若干的簇,使得同一个簇的实例聚集在一个簇中心的周围,它们之间距离的比较近;而不同簇实例之间的距离比较远。对于由数值型属性刻画的实例来说,这个距离通常指欧氏距离。

现在我们对前面的“bank data”作聚类分析,使用最常见的K均值(K-means)算法。下面我们简单描述一下K均值聚类的步骤。

K均值算法首先随机的指定K个簇中心。然后:

1)将每个实例分配到距它最近的簇中心,得到K个簇;

2)计分别计算各簇中所有实例的均值,把它们作为各簇新的簇中心。

3)重复1)和2),直到K个簇中心的位置都固定,簇的分配也固定。

上述K均值算法只能处理数值型的属性,遇到分类型的属性时要把它变为若干个取值0和1的属性。WEKA将自动实施这个分类型到数值型的变换,而且WEKA会自动对数值型的数据作标准化。因此,对于原始数据“bank-data.csv”,我们所做的预处理只是删去属性“id”,保存为ARFF格式后,修改属性“children”为分类型[修改为@attribute children {0,1,2,3}即可]。这样得到的数据文件为“bank.arff”,含600条实例。

用“Explorer”打开刚才得到的“bank.arff”,并切换到“Cluster”。点“Choose”按钮选择“SimpleKMeans”,这是WEKA中实现K均值的算法。点击旁边的文本框,修改“numClusters”为6,说明我们希望把这600条实例聚成6类,即K=6。下面的“seed”参数是要设置一个随机种子,依此产生一个随机数,用来得到K均值算法中第一次给出的K个簇中心的位置。我们不妨暂时让它就为10。

Weka学习记录_第24张图片

选中“Cluster Mode”的“Use training set”,点击“Start”按钮,观察右边“Clusterer output”给出的聚类结果。也可以在左下角“Result list”中这次产生的结果上点右键,“View in separate window”在新窗口中浏览结果。

Weka学习记录_第25张图片

Weka学习记录_第26张图片

结果解释 

首先我们注意到结果中有这么一行: 

Within cluster sum of squared errors: 1604.7416693522332

这是评价聚类好坏的标准,数值越小说明同一簇实例之间的距离越小。也许你得到的数值会不一样;实际上如果把“seed”参数改一下,得到的这个数值就可能会不一样。我们应该多尝试几个seed,并采纳这个数值最小的那个结果。例如我让“seed”取100,就得到

Within cluster sum of squared errors: 1555.6241507629218

我应该取后面这个。当然再尝试几个seed,这个数值可能会更小。 

接下来“Cluster centroids:”之后列出了各个簇中心的位置。对于数值型的属性,簇中心就是它的均值(Mean);分类型的就是它的众数(Mode),也就是说这个属性上取值为众数值的实例最多。对于数值型的属性,还给出了它在各个簇里的标准差(Std Devs)。 最后的“Clustered Instances”是各个簇中实例的数目及百分比。 

 

为了观察可视化的聚类结果,我们在左下方“Result list”列出的结果上右击,点“Visualize cluster assignments”。

Weka学习记录_第27张图片

弹出的窗口给出了各实例的散点图。最上方的两个框是选择横坐标和纵坐标,第二行的“color”是散点图着色的依据,默认是根据不同的簇“Cluster”给实例标上不同的颜色。

Weka学习记录_第28张图片

可以在这里点“Save”把聚类结果保存成ARFF文件。在这个新的ARFF文件中,“instance_number”属性表示某实例的编号,“Cluster”属性表示聚类算法给出的该实例所在的簇。

实例4  weka连接mysql数据库

Weka学习记录_第29张图片

实例5  在myeclipse中使用weka

Weka学习记录_第30张图片

0x04 参考

weka介绍与安装 - lengwuqin的专栏 - CSDN博客

weka的基本使用 - RongT - 博客园

Weka软件使用教程(入门级) - dujidan的博客 - CSDN博客

Bamshad Mobasher

[图文]Weka的安装配置及使用 - 百度文库

你可能感兴趣的:(机器学习)