您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页Weka平台使用方法 关联+分聚类

Weka平台使用方法 关联+分聚类

来源:华佗小知识
目录

1

第一章................................................................................................................................................................1 1.1 知识获取平台— Weka简介 ..........................................................................................................................1 1.2第二节 Weka中的数据准备 ...........................................................................................................................4 1.3第三节 Weka运行演示..................................................................................................................................6 2 第二章 关联规则(购物篮分析) ......................................................................................................................... 10

2.1第一节 关联规则与相关概念 ....................................................................................................................... 10 2.2第二节 关联规则基本模型........................................................................................................................... 11 2.3第三节 关联挖掘......................................................................................................................................... 12 3. 第三章 聚类方法 ................................................................................................................................................ 15

3.1第一节 聚类分析方法.................................................................................................................................. 15 3.2 聚类分析中的数据类型及数据结构 ............................................................................................................. 15 3.3 聚类分析中孤立点 ...................................................................................................................................... 16 3.4 聚类算法的分析 ......................................................................................................................................... 17 4. 第四章 分类与回归 ............................................................................................................................................. 20

4.1 选择算法 .................................................................................................................................................... 20 4.2 建模结果 .................................................................................................................................................... 22 4.3 模型应用 .................................................................................................................................................... 23 4.4 使用命令行(推荐) .................................................................................................................................. 24 第一节 通过分类挖掘进行信息获取 .................................................................................................................. 26 第二节 贝叶斯分类方法简介 ............................................................................................................................ 27 第三节 在Weka中使用贝叶斯算法对bank-data建立分类模型........................................................................... 28

1 第一章

1.1 知识获取平台— Weka简介

◆Weka简介

Weka是由新西兰怀卡托大学开发的智能分析系统(Waikato Environment for Knowledge Analysis) 。在怀卡托大学以外的地方,Weka通常按谐音念成Mecca,是一种现今仅存活于新西兰岛的,健壮的棕色鸟, 非常害羞,好奇心很强,但不会飞 。

Weka是用Java写成的,它可以运行于几乎所有的操作平台,包括Linux,Windows等操作系统。

Weka平台提供一个统一界面,汇集了当今最经典的机器学习算法及数据预处理工具。做为知识获取的完整系统,包括了数据输入、预处理、知识获取、模式评估等环节,以及对数据及学习结果的可视化操作。并且可以通过对不同的学习方法所得出的结果进行比较,找出解决当前问题的最佳算法。

2005年8月,在第11届ACM SIGKDD国际会议上,怀卡托大学的Weka小组荣获了数据挖掘和知识探索领域的最高服务奖,Weka系统得到了广泛的认可,被誉为数据挖掘和机器学习历史上的里程碑,是现今最完备的数据挖掘工具之一(已有11年的发展历史)。Weka的每月下载次数已超过万次。

◆Weka平台在哪里下载?如何安装?

用户可到 http://www.cs.waikato.ac.nz/ml/weka/index_downloading.html上下载与具体操作系统相匹配的安装文件,然后在已安装了Java的机器上以通常的方式运行weka 3.5.5.exe 。

https://liulizhen.ie.cnu.edu.cn 用户名:liulizhen 口令:2001123

◆Weka包含了什么?

Weka提供了许多用于数据可视化及预处理的工具(也称作过滤器),包括种类繁多的用于数据集转换的工具等。所有机器学习算法对输入数据都要求其采用ARFF格式。

Weka作为一个公开的知识过去的工作平台,集合了大量能承担数据(知识)挖掘任务的机器学习算法,包括分类,回归、聚类、关联规则等。

如果想实现自己提出或改进的数据挖掘算法,可以根据Weka的接口文档,在Weka中集成自己的算法。 ◆Weka的使用方法

一、是将一种学习方法应用于一个数据集,然后分析其输出,从而更多地了解这些数据(分析数 据集的潜在知识)。

二、是使用已学习到的模型对新的实例做出分类预测

三、是应用几种不同的学习器,再根据它们的性能表现选择其中一种用来做预测。

在Weka中将学习方法又称作分类器或学习器,用户可在Weka互动式界面的菜单中选择一种想要的分类器。许多分类器带有可调节的参数,这些参数可通过属性列表或对象编辑器进行更改。所有学习器的性能都是通过一个共同的评估模块进行衡量。

与选择学习器一样,用户也要从菜单中选择能满足或对应该学习器的过滤器(进行数据预处理)。不同的过滤器具有不同的参数。

Weka与许多数据分析软件一样,Weka所处理的数据集是一个二维的表格

这里我们要介绍一下Weka中的术语。表格里的一个横行称作一个实例(Instance),相当于统计学中的一个样本,或者数据库中的一条记录。竖行称作一个属性(Attrbute),相当于统计学中的一个变量,或者数据库中的一个字段。

这样一个表格叫做数据集,在Weka看来,呈现了属性之间的一种关系(Relation)。图中一共有14个实例,5个属

性,关系名称为“weather”。 Weka存储数据的格式是ARFF(Attribute-Relation File Format)文件,这是一种ASCII文本文件。

图1所示的二维表格存储在如下的ARFF文件中。这也就是Weka自带的“weather.arff”文件,在Weka安装目录的“data”子目录下可以找到。

简单说明

在第三列数据 85 90 86 96 ... 是相应的“humidity”值。其次,最后一个声明的属性被称作class属性,在分类或回归任务中,它是默认的目标变量。 \\都是以字母开头的字符串

每个实例占一行。实例的各属性值用逗号“,”隔开。如果某个属性的值是缺失值(missing value),用问号“?”表示. 如:@data sunny,85,85,FALSE,no ?,78,90,?,yes „„„„„„„„ 识别ARFF文件的重要依据 ◆Weka中的属性介绍

数据集中的每一个属性都有它对应的“@attribute”语句,来定义它的属性名称和数据类型。 Weka支持的有四种,分别是

numeric-------------------------数值型

nominal-specification-----------分类(nominal)型 string----------------------------字符串型

date []--------日期和时间型

数值属性:是整数或者实数,但Weka把它们都当作实数看待。

字符串属性:可以包含任意的文本。这种类型的属性在文本挖掘中非常有用。如:@ATTRIBUTE LC string 分类属性:由列出所有可能的类别名称并放在花括号中,如:

@attribute outlook {sunny, overcast, rainy} 。每个实例对应的“outlook”值必是这三者之一。

日期和时间属性:统一用“date”类型表示,它的格式是:@attribute date [] 其中是这个属性的名称,是一个字符串,来规定该怎样解析和显示日期或时间的格式,

默认的字符串是ISO-8601所给的日期时间组合格式“yyyy-mm-dd hh:mm:ss”。

数据信息部分表达日期的字符串必须符合声明中规定的格式要求 ◆Weka中的属性举例

日期属性的值必须与属性声明中给定的相一致。例如:

@RELATION Timestamps @ATTRIBUTE timestamp DATE \"yyyy-mm-dd hh:mm:ss \"是分行,因此不能在这种文件里随意的断行。空行(或全是空格的行)将被忽略。

需要注意的是,在Windows记事本打开“weather.arff”文件时,可能会因为回车符定义不一致而导致分行不正常。推荐使用UltraEdit这样的字符编辑软件察看ARFF文件的内容。

@DATA

\"2001-04-03 12:12:12\" \"2001-05-03 12:59:55\" ◆Weka中的属性举例

日期属性的值必须与属性声明中给定的相一致。例如:

@RELATION Timestamps @ATTRIBUTE timestamp DATE \"yyyy-mm-dd hh:mm:ss \"

字符串属性和分类属性的值是区分大小写的。若值中含有空格,必须被引号括起来。例如: @relation LCCvsLCSH

@attribute LCC string @attribute LCSH string @data

AG5, 'Encyclopedias and dictionaries.;Twentieth century. ' AS262, 'Science -- Soviet Union -- History.'

1.2第二节 Weka中的数据准备

◆稀疏数据

有的时候数据集中含有大量的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开始计;是属性值。属性值之间仍用逗号隔开。

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

使用Weka作知识获取,面临的第一个问题往往是我们的数据不是ARFF格式的。Weka提供了对CSV(Comma Separate Values )文件的支持,而这种格式是被很多其他软件所支持的,经常用来作为不同程序之间的数据交互的格式。具体文件格式为:

第一条记录,可以是字段名

每条记录占一行 以逗号为分隔符

逗号前后的空格会被忽略

字段中包含有逗号,该字段必须用双引号括起来 字段中包含有换行符,该字段必须用双引号括起来 字段前后包含有空格,该字段必须用双引号括起来 字段中的双引号用两个双引号表示 例如:

John,Doe,120 jefferson st.,Riverside, NJ, 08075 Jack,McGinnis,220 hobo Av.,Phila, PA,09119

\"John \"\"Da Man\"\"\

Stephen,Tyler,\"7452 Terrace \"\"At the Plaza\"\" road\,Blankman,,SomeTown, SD, 00298

\"Joan \"\"the bone\"\

在这里,我们以Excel和Matlab为例,说明如何获得CSV文件。然后我们将知道CSV文件如何转化成ARFF文件,面对一个ARFF文件,我们仍有一些预处理要做,才能进行挖掘任务。

MATLAB是由美国MathWorks公司推出的用于数值计算和图形处理计算系统环境,除了具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能.

MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言简捷得多.MATLAB是国际公认的优秀数学应用软件之一.

MATLAB是英文MATrix LABoratory(矩阵实验室)的缩写.20世纪80年代初期,Cleve Moler与John Little等利用C语言开发了新一代的MATLAB语言,此时的MATLAB语言已同时具备了数值计算功能和简单的图形处理功能.1984年,Cleve Moler与John Little等正式成立了Mathworks公司,把MATLAB语言推向市场,并开始了对MATLAB工具箱等的开发设计.1993年,Mathworks公司推出了基于个人计算机的MATLAB 4.0版本,到了1997年又推出了MATLAB 5.X版本(Release 11),并在2000年推出MATLAB 6版本(Release 12),2004年6月份正式推出MATLAB 7.0版本(Release 14). 在Matlab中的二维表格是一个矩阵,我们通过这条命令把一个矩阵存成CSV格式。 csvwrite('filename',matrixname)

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

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

或者是在notepad中将下列数据

https://code.google.com/p/scalable-data-mining-framework/source/browse/trunk/SeedMinerExecutable/bank-data.csv?r=176&spec=svn176 放入进来,保存为 CSV类型,使用 Excel打开就变成了二维表格式。 下面是bank-data.xls(是含600条实例的数据集)通过”另存为”转换成.csv的例题 ◆在Ultraedit或者Notepad++中打开的bank-data.csv

id,age,sex,region,income,married,children,car,save_act,current_act,mortgage,pep ID12101,48,FEMALE,INNER_CITY,17546,NO,1,NO,NO,NO,NO,YES ID12102,40,MALE,TOWN,30085.1,YES,3,YES,NO,YES,YES,NO ID12103,51,FEMALE,INNER_CITY,16575.4,YES,0,YES,YES,YES,NO,NO ID12104,23,FEMALE,TOWN,20375.4,YES,3,NO,NO,YES,NO,NO ID12105,57,FEMALE,RURAL,50576.3,YES,0,NO,YES,NO,NO,NO ID12106,57,FEMALE,TOWN,37869.6,YES,2,NO,YES,YES,NO,YES ID12107,22,MALE,RURAL,8877.07,NO,0,NO,NO,YES,NO,YES ID12108,58,MALE,TOWN,24946.6,YES,0,YES,YES,YES,NO,NO ID12109,37,FEMALE,SUBURBAN,25304.3,YES,2,YES,NO,NO,NO,NO ID12110,54,MALE,TOWN,24212.1,YES,2,YES,YES,YES,NO,NO ID12111,66,FEMALE,TOWN,59803.9,YES,0,NO,YES,YES,NO,NO ID12112,52,FEMALE,INNER_CITY,26658.8,NO,0,YES,YES,YES,YES,NO ID12113,44,FEMALE,TOWN,15735.8,YES,1,NO,YES,YES,YES,YES ID12114,66,FEMALE,TOWN,55204.7,YES,1,YES,YES,YES,YES,YES ID12115,36,MALE,RURAL,19474.6,YES,0,NO,YES,YES,YES,NO

◆将CSV转换为ARFF

将CSV转换为ARFF可以使用Weka所带的命令行工具。

运行Weka的主程序,出现GUI后可以点击下方按钮进入相应的模块。我们点击进入“Simple CLI”模块提供的命令行功能。在新窗口的最下方(上方是不能写字的)输入框写上 java Weka.core.converters.CSVLoader filename.csv > filename.arff 即可完成转换。

在Weka 3.5以上版本中提供了一个“Arff Viewer”模块,进入“Exploer”界面,从上方的按钮中打开CSV文件然后另存为ARFF文件亦可。

1.3第三节 Weka运行演示

图2

图2显示的是使用3.5版\"Exploer\"打开\"bank-data.csv\"的情况。我们根据不同的功能把这个界面分成8个区域。 区域1的几个选项卡是用来切换不同的挖掘任务面板。这一节用到的只有“Preprocess”,其他面板的功能将在以后介绍。

区域2是一些常用按钮。包括打开数据,保存及编辑功能。我们在这里把\"bank-data.csv\"另存为\"bank-data.arff\"。

在区域3中“Choose”某个“Filter”,可以实现筛选数据或者对数据进行某种变换。数据预处理主要就利用它来实现。 区域4展示了数据集的一些基本情况。

区域5中列出了数据集的所有属性。勾选一些属性并“Remove”就可以删除它们,删除后还可以利用区域2的“Undo”按钮找回。区域5上方的一排按钮是用来实现快速勾选的。

在区域5中选中某个属性,则区域6中有关于这个属性的摘要。注意对于数值属性和分类属性,摘要的方式是不一样的。图中显示的是对数值属性“income”的摘要。

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

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

bank-data数据各属性的含义如下: id a unique identification number age age of customer in years (numeric) sex MALE / FEMALE

region inner_city/rural/suburban/town income income of customer (numeric) married is the customer married (YES/NO)

children number of children (numeric)

car does the customer own a car (YES/NO)

save_acct does the customer have a saving account (YES/NO) current_acct does the customer have a current account (YES/NO)

mortgage does the customer have a mortgage (YES/NO)

pep did the customer buy a PEP (Personal Equity Plan私人股权计划) after the last mailing (YES/NO)

◆预处理及数据离散化

通常对于知识获取任务来说,ID这样的信息是无用的,我们将之删除。在区域5勾选属性“id”,并点击“Remove”, 将新的数据集保存一次。

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

如何离散化呢?

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

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

@attribute children {0,1,2,3} 就可以了。 在“Explorer”中重新打开“bank-data.arff”,看看选中“children”属性后,区域6那里显示的“Type”是不是变成“Nominal”了?

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

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

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

如果对“\"(-inf-34.333333]\"”这样晦涩的标识不满,我们可以用UltraEdit打开保存后的ARFF文件,把所有的“'\\'(-inf-34.333333]\\''”替换成“0_34”。其它标识做类似地手动替换。 经过上述操作得到的数据集我们保存为bank-data-final.arff。

2 第二章 关联规则(购物篮分析)

2.1第一节 关联规则与相关概念

◆关联规则

关联规则是通过分析数据信息的相关性进行知识获取的方法.

关联规则反映了一个事物与其它事物之间的相互依存性和关联性。如果两个或者多个事物之间存在一定的关联关系,那么,其中一个事物的相关资料就能够通过与其相关联事物的信息进行预测分析。

关联规则的形式如 “在购买面包顾客中,有70%的人同时也买了黄油”,可以表示成:面包à黄油,也就是说面包与黄油关联。

那么我们如何发现这些关联规则呢?

对超市中的货篮数据(Market-Basket Data)进行分析。具体为:零售部门可以利用前端收款机收集存储大量的售货数据,发现顾客放入货篮中的不同商品之间的关系(指普遍存在的具有一定规律的关系,例如卓越购物网会提示你购买某商品的顾客同时也购买了什么商品就是关联挖掘的结果),则可获取顾客的购买行为习惯(Profile)等极有价值的关联规则(知识),并指导部门制定相应的经销策略。

例如,可以帮助如何摆放货架上的商品(如把顾客经常同时买的商品放在一起),帮助如何规划市场(怎样相互搭配进货)。

用于关联规则发现的主要对象是针对事务型数据库中的数据,如:购物事务数据库中的货篮数据。一个购物事务一般由如下几个部分组成:购物事务发生的时间(圣诞节的巧克力、情人节的玫瑰等) ,顾客购买的物品名称, 顾客标识号(如信用卡号、积分卡号等信息)。

IBM公司Almaden研究中心的R.Agrawal首先提出了关联规则模型,并给出求解算法AIS。随后又出现了SETM和Apriori等算法。其中,Apriori是关联规则模型中的经典算法。 ◆关联规则的相关概念

支持度(统计概率) 1000个顾客购物,其中200个顾客购买了面包(物品集A),面包(物品集A)的支持度为: P(A)=20%(200/1000)。

总结:物品集(项集)A的支持度:如果物品集A 的支持度为s%,则P(A)称物品集A在事务数据集W中具有大小为s%的支持度。

1000个顾客购物,100个顾客购买了面包和黄油,则我们认为蕴涵关系:面包→黄油的支持度为: P(A∪B)=10%(100/1000)

总结:蕴涵关系A→B的支持度:如果物品集(A+B)的支持度为s%,则P(A∪B)表示蕴涵关系A→B在事务数据库W中具有大小为s%的支持度。

可信度(条件概率)

实际上就是表示在购买物品A的前提下又购买物品B的概率,求蕴涵关系A→B的可信度就是求:P(B|A) 例如:1000个顾客购物,200个顾客购买了面包,其中140个买了黄油,则面包→黄油的可信度是: P(B|A) = P(A∪B)/ P(A)= 140/1000/200/1000= 70%。

若项集A的支持度记为support(A),可信度记为confidence(A) 则: support(A→B)=P(A∪B)(A→B的支持度) confidence(A→B)=P(B|A)=P(A∪B)/P(A)

=support(A→B)/support(A) (A→B的可信度)

最小支持度minsup的定义: 用户规定的关联规则必须满足的最小支持度。 最小可信度minconf的定义: 用户规定的关联规则必须满足的最小可信度。 关联规则就是支持度和信任度分别满足用户给定阈值的那些蕴涵关系(A→B) 。

2.2第二节 关联规则基本模型

大项集(频繁项集大物品集large item set)的定义: 支持度≥最小支持度minsup的物品集 发现关联规则需要经历如下两个步骤:

1找出所有频繁项集或大项集(也就是满足最小支持度的项集)。 2由频繁项集或大项集生成满足最小信任度阈值的关联规则。

由于可信度为: support (A∪B)/support (A) 显然第二步骤不是难题,目前大多数研究集中在第一个问题上,即如何高效地求出大项集。 ◆思路的正确性

大项集的特点:

显然大项集具有向下封闭性,即大项集A的任意子集一定也是大项集(如:{牛奶、面包、黄油}是大项集,显然{牛奶、黄油}、{面包、牛奶}、{黄油、面包}都是大项集)。

反过来说,如果A有一子集不是大项集,则A肯定不是大项集。(如:{牛奶、面包、黄油、袜子}中,显然{牛奶、袜子} 不是大项集,所以{牛奶、面包、黄油、袜子} 不是大项集)。 利用大项集的特点求大项集的方法如下:

◆求大项集的基本思路

1、首先找寻长度为1的大项集L[1] (即单个物品),记为L[1](通过看它是否大于最小支持度来判断); 2、在L[k]的基础上生成候选物品集C[k+1],候选物品集C[k+1]必须保证包括所有的L[k]大项集

3、用事务数据库D中的事务对所有C[k+1]进行支持度测试以找寻长度为k+1的大项集L[k+1],计算每个候选物品集的支持度,如果大于minsup,则加入到L[k+1]

4、如果L[k+1]为空集,则结束,L[1]∪L[2]∪„即为结果;否则转(2),继续。

◆Apriori算法—实例:

假设:minsup=2,求所有大项集或频繁项集 顾客号 购买物品 A 1,3,4 B 2,3,5 C 1,2,3,5 D 2,5

顾客号 购买单个物品集

A {1},{3},{4}{支持度1/4} B {2},{3},{5} C {1},{2},{3},{5} D {2},{5}

C[k]必须保证联合(Join)所有的 L[k-1]的大项集

L1 support C2 support {1} 2 {1,2} 1 {2} 3 {1,3} 2 {3} 3 {1,5} 1 {5} 3 {2,3} 2 {2,5} 3

{3,5} 2

从C[k]中除去(Prune)大小为k-1且不在L[k-1]中的子集,找出支持度大于minsup=2的L[k],当然在本例的C2中没有这样的不在L1中的子集,但支持度有小于minsup=2的集合: {1,2}和{1,5}

先通过join 所有的L[k-1]大项集找出C[k],然后再从C[k]中除去大小为k-1且不在L[k-1]中的子集,找出支持度大于minsup=2的L[k]

L2 support C3 support 事务号 购买物品号 {1,3} 2 {1,2,3} 1 1 1,3,4 {2,3} 2 {1,2,5} 1 2 2,3,5 {2,5} 3 {1,3,5} 1 3 1,2,3,5 {3,5} 2 {2,3,5} 2 4 2,5 L3 support L4 support {2,3,5} 2 空集

最大项集为: L1∪L2∪L3 {1} {5} {1,3} {2} {2,3} {2,5} {3} {3,5} {2,3,5} (1) L[1]={large 1-itemsets};

(2) for (k=2; L[k-1]不为空; k++) do begin (3) C[k]=apriori-gen(L[k-1]); // 新候选物品集 (4) For all transactions t∈D do begin (5) C=subset(C[k],t); // t中的候选物品集 (6) For all candidates c∈C do (7) c.count++;

(8) end;

(9) L[k]={c∈C[k]|c.count>=minsup}; (10) end;

(11) Answer = L[1]∪L[2]∪„

apriori-gen(L[k-1]) 分成两步:

join算法:从任意两个L[k-1]最大项集生成候选物品集C[k]

insert into C[k]

select p.item1,p.item2,...,p.item(k-1), q.item(k-1) from L[k-1] p, L[k-1] q

where p.item1=q.item1, ...,p.item(k-2)=q.item(k-2), p.item(k-1)小于q.item(k-1) Prune算法:从C[k]中除去大小为k-1且不在L[k-1]中的子集 (1) For all itemsets c∈C[k] do (2) For all (k-1)-subsets s of c do (3) if (sÏL[k-1]) (4) then delete c from C[k]

2.3第三节 关联挖掘

◆bank-data实例关联挖掘

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

我们打算对前面的“bank-data”数据作关联规则的分析。

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

首先我们来温习一下Apriori的有关知识。对于一条关联规则L->R,我们常用支持度(Support)和置信度(Confidence)来衡量它的重要性。规则的支持度是用来估计在一个购物篮中同时观察到L和R的概率P(L,R),而规则的置信度是估计购物栏中出现了L时也出会现R的条件概率P(R|L)。关联规则的目标一般是产生支持度和置信度都较高的规则。 有几个类似的度量代替置信度来衡量规则的关联程度,它们分别是 Lift(提升度):是一种简单的相关度量,定义如下:项集A的出现于项集B的出现,如果P(AB)=P(A)P(B),否则作为事件项集A和B是依赖的(dependent)和相关的(correlated)。 E.G: lift(A,B)P(AB)P(A)P(B)

Lift<1时表示A的出现和B的出现是负相关(A发生的时实际上减少了B的可能性)的。 Lift>1时表示A的出现和B的出现是正相关的,意味着一个的出现蕴涵另一个出现。

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则不然。

◆以confidence作为minMetric,分析挖掘出来的confidence排前5的规则。 Best rules found:

1. income='(43758.136667-inf)' 80 ==> save_act=YES 80 conf:(1)

2. age='(50.666667-inf)' income='(43758.136667-inf)' 76 ==> save_act=YES 76 conf:(1) 3. income='(43758.136667-inf)' current_act=YES 63 ==> save_act=YES 63 conf:(1) 4. age='(50.666667-inf)' income='(43758.136667-inf)' current_act=YES 61 ==> save_act=YES 61 conf:(1)

5. income='(43758.136667-inf)' current_act=YES 63 ==> age='(50.666667-inf)' 61 conf: (0.97)

6. income='(43758.136667-inf)' save_act=YES current_act=YES 63 ==> age='(50.666667- inf)' 61 conf:(0.97)

◆下面分析挖掘出来的lift排前5的规则。

Best rules found:

1. income='(43758-max)' 80 ==> age='(51-max)' save_act=YES current_act=YES 61 conf: (0.76) < lift:(4.05)> lev:(0.08) [45] conv:(3.25)

2. age='(51-max)' save_act=YES current_act=YES 113 ==> income='(43758-max)' 61 conf: (0.54) < lift:(4.05)> lev:(0.08) [45] conv:(1.85)

3. age='(51-max)' save_act=YES 151 ==> income='(43758-max)' current_act=YES 61 conf: (0.4) < lift:(3.85)> lev:(0.08) [45] conv:(1.49)

4. income='(43758-max)' current_act=YES 63 ==> age='(51-max)' save_act=YES 61 conf: (0.97) < lift:(3.85)> lev:(0.08) [45] conv:(15.72)

5. income='(43758-max)' 80 ==> age='(51-max)' save_act=YES 76 conf:(0.95) < lift: (3.77)> lev:(0.09) [55] conv:(11.97)

命令行方式

我们也可以利用命令行来完成挖掘任务,在“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:\\weka\\bank-data-final.arff 挖掘结果在上方显示,应是这个文件的样子。

3. 第三章 聚类方法

3.1第一节 聚类分析方法

◆通过聚类分析方法进行信息获取

机器学习中聚类是一种无指导、无监督的归纳学习(机器学习中的称谓),相比于分类,聚类的例子无类别标记,而分类有,所以聚类要通过算法来自动确定其类别。

在电子商务中,聚类能帮助市场分析人员从客户基本库中发现不同的客户群(簇),并且以购买模式来刻画这些不同的客户群的特征(profile),以制定相应的销售策略。

聚类分析是数据分析中的一种重要技术,能作为一个的工具来获得知识分布的情况,它的应用极为广泛。许多领域中都会涉及聚类分析方法的应用与研究工作,如机器学习、信息获取、统计学、模式识别、生物学、空间数据库技术、电子商务等。

◆使用聚类分析方法进行信息获取

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

在聚类分析中,基于K-means(k-均值)、K-medoids(k-中心点)等算法已被加入到许多著名的统计分析软件包中,如Weka、SPSS、SAS等。

3.2 聚类分析中的数据类型及数据结构

聚类分析主要针对的数据类型包括:

区间标度变量(如:重量、高度、工资) 二元变量(如:0,1,或Yes,No)

标称变量(如:traffic light具有红、黄、绿三种状态/停、看、行三种状态)

序数型变量(如:教授、副教授、讲师、助教;或者:总经理、部门经理、科长、职员)、 以及由这些变量类型构成的复合类型。

一些基本的聚类算法通常采用数据矩阵和相异度矩阵两种典型的数据结构。

◆数据结构:数据矩阵(Data Matrix)

设有n个数据对象,可用p个属性来描述每个对象,则n*p矩阵

称为数据矩阵。数据矩阵是对象-属性结构的数据表达方式。 ◆数据结构:相异度矩阵(Dissimilarity Matrix)

按n个数据对象两两间的相异度构建n阶矩阵(因为相异度矩阵是对称的,只需写出上三角或下三角即可):

d(i,j)表示数据对象i与j的相异度,是一个非负的数值。当对象i和j越相似或“接近”时,d(i,j)值越接近0; 而对象i和j越不相同或相距“越远”时,d(i,j)值越大。显然,d(i,j)=d(j,i),d(i,i)=0。

相异度矩阵是对象-对象结构的一种数据表达方式。 ◆对象间距离的计算

设两个p维向量xi = (xi1, xi2,„, xip) 和xj=(xj1, xj2,„, xj p) 分别表示两个对象,有多种形式的距离度量可以采用。 闵可夫斯基(Minkowski)距离: 曼哈坦(Manhattan)距离:

欧几里得(Euclidean)距离(欧氏距离): 切比雪夫(Chebyshev)距离: 马哈拉诺比斯(Mahalanobis)距离:

3.3 聚类分析中孤立点

◆聚类分析中孤立点数据的处理 孤立点(Outlier)是指数据集合中不符合数据一般特性或一

般模型的数据对象。可能是由于度量或执行错误产生的,也有可能是由于固有数据的变异产生的。

很多信息获取算法尽量减少孤立点对信息获取结果的影响,或者在信息获取过程中排除孤立点。

但是要注意,有时孤立点可能是非常重要的知识。一味地排除孤立点或降低孤立点的影响,将有可能导致丢

失隐藏的重要信息。所以对孤立点的处理要具体问题具体分析.

◆聚类分析中孤立点探测方法

统计学方法假定数据服从一定的概率分布或概率模型,然后根据模型采用不一致性检验来识别孤立点。 基于距离的孤立点检测中,将孤立点看作是那些没有足够数量邻居的对象。常见的基于距离的孤立点检测方法有基于索引的算法、嵌套-循环算法、基于单元的算法等。

基于偏离的孤立点检测,将孤立点定义为与给定的描述偏离的对象。序列异常技术和OLAP数据立方体技术是两种常见的基于偏离的孤立点探测技术。

3.4 聚类算法的分析

主要的聚类算法可以分为:

划分方法 层次方法

基于密度的方法 基于网格的方法

基于模型的方法

◆划分方法(partitioning method)

对于一个给定的n个对象或元组的数据集,采用目标函数最小化的策略,通过迭代把数据分成k个划分块,每个划分块为一个簇,这就是划分方法

迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量(事先确定的迭代变量)的原值推出它的一个新值。

迭代举例:

一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,问到第 12 个月时,该饲养场共有兔子多少只?

分析: 这是一个典型的递推问题。我们不妨假设第 1 个月时兔子的只数为 u1,第 2 个月时兔子的只数为 u2 ,第 3 个月时兔子的只数为 u3 ,„据题意,“这种兔子从出生的下一个月开始,每月新生一只兔子”,则有 u1 = 1 , u2 = u1 + u1 × 1 = 2 , u3 = u2 + u2 × 1 = 4 ,„„

根据这个规律,归纳出下面的递推公式:un= u(n-1)× 2 (n ≥ 2) 对应 un 和 u(n - 1) ,定义两个迭代变量 y 和 x ,可将上面的递推公式转换成如下迭代关系:y=x*2; x=y.让计算机对这个迭代关系重复执行 11 次,就算出第 12 个月时的兔子数。

◆k-均值算法介绍

划分方法满足两个条件:

(1)每个分组至少包含一个对象;

(2)每个对象必属于且仅属于某一个分组。

常见的划分方法有k-均值方法和k-中心点方法。其它方法大都是这两种方法的变形。

k-均值聚类算法的核心思想是通过迭代把数据对象划分到不同的簇中,以求目标函数最小化(如:平方误差准则函数),从而使生成的簇尽可能地紧凑和,每个簇用该簇中对象的平均值来表示。

步骤如下:

首先,随机选取k个对象作为初始的k个簇的质心;

然后,将其余对象根据其与各个簇质心的距离分配到最近的簇然后重新计算每个簇的平均值 通过对象在划分间移动来改进划分,这个迭代重定位过程不断重复直到目标函数最小化为止 ◆k-均值算法分析

输入:期望得到的簇的数目k,n个对象的数据集。

输出:使得平方误差准则函数最小化的k个簇。

该算法力图找出平方误差函数值最小的K个划分。平方误差准则函数为:

其中x为数据对象,vi为簇ci平均值。该方法的缺点是必须事先给出要生成簇的个数K而且只有在簇的平均值被定义的情况下才能使用 ◆k-均值方法的扩展

在初始的k个均值选择、对象相异度计算(目标函数,如前面提到的平方误差函数)、簇均值的计算等方面采取不同

的策略将得到k-均值算法的很多变形。

聚类分析的数据挖掘技术能够很好地应用于电信目标市场营销,为电信部门解决客户分群的难题。

通过对客户消费模式进行聚类分析,得到客户分群,使得客户按照行为差异被分成若干个群落,同一群体中的客户具有相近的行为特征,不同群体间的客户具有相差很远的行为特征。对消费行为特征相对近似的若干种客户分群,向其推荐最适合的一类产品,以提高客户的购买率,增加销售收入。

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

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

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

结果解释

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

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

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

4. 第四章 分类与回归

背景知识

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

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

4.1 选择算法

这一节中,我们使用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)来选择和评估模型。若不明白交叉验证的含义可以百度一下。

4.2 建模结果

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”,可以把这个树看清楚些。看完后截图或者关掉:P

这里我们解释一下“Confusion Matrix”的含义。 === Confusion Matrix === a b <-- classified as 74 | a = YES

30 132 | b = NO

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

4.3 模型应用

现在我们要用生成的模型对那些待预测的数据集进行预测了。注意待预测数据集和训练用数据集各个属性的设置必须是一致的。即使你没有待预测数据集的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),这个属性上的值就是模型对每个实例的预测值。

4.4 使用命令行(推荐)

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

打开“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.88135593220338 ?

4 NO 0.84210526315747 ? ...

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

75%的把握说它的“pep”的值会是“YES”,对实例4我们有84.2%的把握说它的“pep”值会是“NO”。

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

第一节 通过分类挖掘进行信息获取

◆分类问题的提出

分类是我们在实际生活和工作中经常遇到的问题。例如:许多搜索引擎都是目录型搜索引擎:这类引擎的特点是:将收集到的信息进行了系统地分类处理,经过人工整理后形成庞大而有序的分类目录体系。用户可以在目录体系的导引下通过逐级浏览,发现、检索到有关的信息。Sohu 、新浪、Yahoo都提供了分类目录型导航服务,其特点是检索的

信息比较准确。

◆通过分类挖掘进行信息获取

分类(Classification)是智能信息获取技术中一项非常重要的任务,是一种有指导的学习(机器学习中的称谓),目的在于构造出一个分类器 Classifier(分类函数或分类模型),将数据集中的数据项映射到给定类别中,实际应用于未来数据的预测分析(例如,利用当前的病历数据建立起各种疾病的分类规则,那么当新的病人到来时,就可以根据其症状及分类规则来决定所患疾病的种类及制定相应的治疗方案)。

所谓的分类就是根据样本(Weka中称作实例)的特征属性(输入变量),通过分类器对目标进行预测,关键在于分类器的构造。因此:

需要有一个训练数据集,每个训练样本都是一个记录,是由字段(属性&特征)值组成的特征向量,其中还有一个类别标记(v1 , v2, „ vn ; c),其中vi是字段值,c是类别。同时选择分类模型。

观察学习训练集的实例,训练分类预测模型(训练或学习的过程)。

衡量模型的好坏就在于预测的准确程度(模型评估)。

根据训练好的分类预测模型,对新输入的未知类别的实例进行预测了。

Weka实验平台中将分类(Classification)和回归(Regression)都放在了“Classify”选项中,因为在这两个任务中,都有一个目标属性(输出变量),这个待预测的目标(输出)被称作Class属性,若Class属性是分类型时的任务称为分类,Class属性是数值型时的任务称为回归。

分类和回归是两类主要的预测问题。分类是预测离散的值(计算属于A类的概率,属于B类的概率,概率大的类为其归属类),回归是预测连续值。

第二节 贝叶斯分类方法简介

贝叶斯(Reverend Thomas Bayes 1702-1761)学派奠基性的工作是贝叶斯的论文“关于几率性问题求解的评论”。或许是他自己感觉到它的学说还有不完善的地方,这一论文在他生前并没有发表,而是在他死后,由他的朋友发表的。著名的数学家拉普拉斯(Laplace P. S.)用贝叶斯的方法导出了重要的“相继律”,贝叶斯的方法和理论逐渐被人理解和重视起来。但由于当时贝叶斯方法在理论和实际应用中还存在很多不完善的地方,因而在十九世纪未被普遍接受。

随着人工智能的发展,尤其是机器学习、信息获取的兴起,为贝叶斯理论的发展和应用提供了更为广阔的空间。贝叶斯理论的内涵也比以前有了很大的变化。

80年代贝叶斯理论用于专家系统的知识表示。

90年代以后,进一步研究可学习的贝叶斯理论,用于信息获取和机器学习。

近年来,贝叶斯学习理论方面的文章更是层出不穷,内容涵盖了人工智能的大部分领域,包括因果推理、不确定性知识表达、模式识别和聚类分析等。并且出现了专门研究贝叶斯理论的组织和学术刊物ISBA

贝叶斯方法提供了一种概率手段进行因果推理,该方法基于如下的假定:待考察的量遵循某概率分布,且可根据这些概率及已观察到的数据进行推理,以作出最优的决策。

贝叶斯方法以其独特的不确定性知识表达形式、丰富的概率表达能力、综合先验知识的增量学习特性等成为当前信息获取众多方法中最为引人注目的焦点之一。

研究难度之一:需要概率的初始知识(先验概率),当概率预先未知时,可以基于背景知识、预先准备好的数据以及基准分布的假定来估计这些概率。

研究难度之二:一般情况下,确定贝叶斯最优假设的计算代价比较大。 ◆先验概率

先验概率是指根据历史的资料或主观判断所确定的各事件发生的概率,该类概率没能经过实验证实,属于检验前的概率,所以称之为先验概率。

先验概率一般分为两类,

一是客观先验概率,是指利用过去的历史资料计算得到的概率;

二是主观先验概率,是指在无历史资料或历史资料不全的时候,只能凭借人们的主观经验来判断取得的概率。 ◆后验概率

后验概率一般是指利用贝叶斯公式,结合调查等方式获取了新的附加信息,对先验概率进行修正后得到的更符合实际的概率。

◆统计概率(无条件概率)

统计概率:若在大量重复试验中(如:掷硬币),事件A发生的频率稳定地接近于一个固定的常数p,它表明事件A出现的可能性的大小,则称此常数p为事件A发生的概率,记为P(A),

即: p=P(A)

可见统计概率就是频率的稳定中心。任何事件A的概率为不大于1的非负实数, 即: 0<P(A)<1

◆条件概率

条件概率:我们把事件B已经出现的条件下,事件A发生的概率记做为P(A|B)。并称之为在B出现的条件下A出现的条件概率,而称P(A)为无条件概率。

若事件A与B中的任一个出现,并不影响另一事件出现的概率,

即当P(A)=P(A|B)或P(B)=P(B|A)时, 则称A与B是相互的事件。 ◆概率的加法定理

两个不相容(互斥)事件之和的概率,等于两个事件概率之和,即 P(A+B)= P(A)+P(B) ◆概率的乘法定理(联合概率)

设A、B为两个任意的非零事件,则其乘积的概率等于A(或B)的概率与在A(或B)出现的条件下B(或A)出现的条件概率的乘积。 P(A·B)=P(A)·P(B|A) 或 P(A·B)=P(B)·P(A|B)

联合概率也叫乘法公式,是指两个任意事件的乘积的概率,或称之为交事件的概率。 ◆全概率公式

设A1,A2,„,An是两两互斥的事件,且P(Ai)>0, i=1,2,„,n, A1+A2+„+An=Ω 另有一事件B= BA1+BA2+„,+BAn

第三节 在Weka中使用贝叶斯算法对bank-data建立分类模型

数据预处理:

在“bank-data.xls”文件中, 取数据集实例的一半,也就是前300个实例作为训练集。 将后300个样本作为待测样本,并将该测试集中的“pep”属性(用来作为分类的目标类别)都设为缺失值“?”。 将这两个集合都转成csv文件,并通过weka再转成arff文件. 用“Explorer”先打开训练集“bank.arff”,“ID”属性肯定是不需要的。观察一下它是不是按照前面的要求处理好了。

◆打开bank-data(测试).xls

◆在Weka中打开bank-data(测试).arff观察属性pep

◆打开bank-data(训练).arff对比测试集married属性

◆模型的建立--算法选择

对于基本处理好的样本数据,在weka中要进行分类,还需要进一步过滤掉相对分类不合适的特性属性。 切换到“Classify”选项卡,点击“Filter...” 按钮可以根据数据集的特性过滤掉不合适的属性。

由于我们数据集的Class变量是“Binary”的(即只有两个类的分类型 );于是我们勾选“Binary attributes”“Numeric attributes”和“Binary class”。

点“OK”后回到树形图,可以发现一些算法名称变红了,说明它们不能用。如果“NaïveBayesSimple”也变红了,说明你处理的数据不正确,要重新处理.如果没变红,选择“NaïveBayesSimple” 为了保证生成的模型的准确性而不至于出现过拟合(overfitting)的现象,采用10折交叉验证(10-fold cross validation)来选择和评估模型。

◆模型训练完毕后,进行实例测试

用生成的模型对这些待预测的数据集进行预测,注意待预测数据集和训练用数据集各个属性的设置必须是一致的。

在“Test Opion”中选择“Supplied test set”, 将预先处理的300条待测数据打开,点击“Start”

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务