《人工智能》 机器学习 胡鹤
机器学习软件WEKA使用介绍 1. 简介 2. 数据格式 3.数据准备 4. 关联规则(购物篮分析) 5. 分类与回归 6. 聚类分析
机器学习软件WEKA使用介绍 1. 简介 WEKA的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),它的源代码可通过http://www.cs.waikato.ac.nz/ml/weka得到。同时weka也是新西兰的一种鸟名,而WEKA的主要开发者来自新西兰。 WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。如果想自己实现数据挖掘算法的话,可以看一看weka的接口文档。在weka中集成自己的算法甚至借鉴它的方法自己实现可视化工具并不是件很困难的事情。
机器学习软件WEKA使用介绍 2005年8月,在第11届ACM SIGKDD国际会议上,怀卡托大学的Weka小组荣获了数据挖掘和知识探索领域的最高服务奖,Weka系统得到了广泛的认可,被誉为数据挖掘和机器学习历史上的里程碑,是现今最完备的数据挖掘工具之一(已有11年的发展历史)。Weka的每月下载次数已超过万次。
2. 数据格式 巧妇难为无米之炊。首先我们来看看WEKA所用的数据应是什么样的格式。 跟Excel一样,WEKA所处理的数据集是一个二维的表格。
机器学习软件WEKA使用介绍 这里我们要介绍一下WEKA中的术语。表格里的一个横行称作一个实例(Instance),相当于统计学中的一个样本,或者数据库中的一条记录。竖行称作一个属性(Attrbute),相当于统计学中的一个变量,或者数据库中的一个字段。这样一个表格,或者叫数据集,在WEKA看来,呈现了属性之间的一种关系(Relation)。图1中一共有14个实例,5个属性,关系名称为“weather”。 WEKA存储数据的格式是ARFF(Attribute-Relation File Format)文件,这是一种ASCII文本文件。图1所示的二维表格存储在如下的ARFF文件中。这也就是WEKA自带的“weather.arff”文件,在WEKA安装目录的“data”子目录下可以找到。
机器学习软件WEKA使用介绍 下面我们来对这个文件的内容进行说明。 识别ARFF文件的重要依据是分行,因此不能在这种文件里随意的断行。空行(或全是空格的行)将被忽略。 以“%”开始的行是注释,WEKA将忽略这些行。如果你看到的“weather.arff”文件多了或少了些“%”开始的行,是没有影响的。 除去注释后,整个ARFF文件可以分为两个部分。第一部分给出了头信息(Head information),包括了对关系的声明和对属性的声明。第二部分给出了数据信息(Data information),即数据集中给出的数据。从“@data”标记开始,后面的就是数据信息了。
机器学习软件WEKA使用介绍 关系声明 关系名称在ARFF文件的第一个有效行来定义,格式为 @relation <relation-name> <relation-name>是一个字符串。如果这个字符串包含空格,它必须加上引号(指英文标点的单引号或双引号)。
机器学习软件WEKA使用介绍 属性声明 属性声明用一列以“@attribute”开头的语句表示。数据集中的每一个属性都有它对应的“@attribute”语句,来定义它的属性名称和数据类型。 这些声明语句的顺序很重要。首先它表明了该项属性在数据部分的位置。例如,“humidity”是第三个被声明的属性,这说明数据部分那些被逗号分开的列中,第三列数据 85 90 86 96 ... 是相应的“humidity”值。其次,最后一个声明的属性被称作class属性,在分类或回归任务中,它是默认的目标变量。 属性声明的格式为 @attribute <attribute-name> <datatype> 其中<attribute-name>是必须以字母开头的字符串。和关系名称一样,如果这个字符串包含空格,它必须加上引号。
机器学习软件WEKA使用介绍 WEKA支持的<datatype>有四种,分别是 numeric-------------------------数值型 <nominal-specification>-----分类(nominal)型 string----------------------------字符串型 date [<date-format>]--------日期和时间型 其中<nominal-specification> 和<date-format> 将在下面说明。还可以使用两个类型“integer”和“real”,但是WEKA把它们都当作“numeric”看待。注意“integer”,“real”,“numeric”,“date”,“string”这些关键字是区分大小写的,而“relation”“attribute ”和“date”则不区分。
机器学习软件WEKA使用介绍 数值属性 数值型属性可以是整数或者实数,但WEKA把它们都当作实数看待。 分类属性 分类属性由<nominal-specification>列出一系列可能的类别名称并放在花括号中:{<nominal-name1>, <nominal-name2>, <nominal-name3>, ...} 。数据集中该属性的值只能是其中一种类别。 例如如下的属性声明说明“outlook”属性有三种类别:“sunny”,“ overcast”和“rainy”。而数据集中每个实例对应的“outlook”值必是这三者之一。 @attribute outlook {sunny, overcast, rainy} 如果类别名称带有空格,仍需要将之放入引号中。
机器学习软件WEKA使用介绍 字符串属性 字符串属性中可以包含任意的文本。这种类型的属性在文本挖掘中非常有用。 示例: @ATTRIBUTE LCC string 日期和时间属性 日期和时间属性统一用“date”类型表示,它的格式是 @attribute <name> date [<date-format>] 其中<name>是这个属性的名称,<date-format>是一个字符串,来规定该怎样解析和显示日期或时间的格式,默认的字符串是ISO-8601所给的日期时间组合格式“yyyy-MM-ddTHH:mm:ss”。 数据信息部分表达日期的字符串必须符合声明中规定的格式要求(下文有例子)。
机器学习软件WEKA使用介绍 数据信息 数据信息中“@data”标记独占一行,剩下的是各个实例的数据。 每个实例占一行。实例的各属性值用逗号“,”隔开。如果某个属性的值是缺失值(missing value),用问号“?”表示,且这个问号不能省略。例如: @data sunny,85,85,FALSE,no ?,78,90,?,yes
机器学习软件WEKA使用介绍 字符串属性和分类属性的值是区分大小写的。若值中含有空格,必须被引号括起来。例如: @relation LCCvsLCSH @attribute LCC string @attribute LCSH string @data AG5, 'Encyclopedias and dictionaries.;Twentieth century.' AS262, 'Science -- Soviet Union -- History.'
机器学习软件WEKA使用介绍 日期属性的值必须与属性声明中给定的相一致。例如: @RELATION Timestamps @ATTRIBUTE timestamp DATE "yyyy-MM-dd HH:mm:ss" @DATA "2001-04-03 12:12:12" "2001-05-03 12:59:55"
机器学习软件WEKA使用介绍 3.数据准备 使用WEKA作数据挖掘,面临的第一个问题往往是我们的数据不是ARFF格式的。幸好,WEKA还提供了对CSV文件的支持,而这种格式是被很多其他软件所支持的。此外,WEKA还提供了通过JDBC访问数据库的功能。 在这一节里,我们先以Excel和Matlab为例,说明如何获得CSV文件。然后我们将知道CSV文件如何转化成ARFF文件,毕竟后者才是WEKA支持得最好的文件格式。面对一个ARFF文件,我们仍有一些预处理要做,才能进行挖掘任务。
“Exploer”界面 我们应该注意到,“Exploer”还提供了很多功能,实际上可以说这是WEKA使用最多的模块。现在我们先来熟悉它的界面,然后利用它对数据进行预处理。
机器学习软件WEKA使用介绍 图2显示的是使用3.5版“Exploer”打开“bank-data.csv”的情况。我们根据不同的功能把这个界面分成8个区域。 区域1的几个选项卡是用来切换不同的挖掘任务面板。这一节用到的只有“Preprocess”,其他面板的功能将在以后介绍。 区域2是一些常用按钮。包括打开数据,保存及编辑功能。我们可以在这里把"bank-data.csv"另存为"bank-data.arff"。 在区域3中“Choose”某个“Filter”,可以实现筛选数据或者对数据进行某种变换。数据预处理主要就利用它来实现。 区域4展示了数据集的一些基本情况。
机器学习软件WEKA使用介绍 区域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”。将新的数据集保存一次,并用UltraEdit打开这个ARFF文件。我们发现,在属性声明部分,WEKA已经为每个属性选好了合适的类型。 我们知道,有些算法,只能处理所有的属性都是分类型的情况。这时候我们就需要对数值型的属性进行离散化。在这个数据集中有3个变量是数值型的,分别是“age”,“income”和“children”。 其中“children”只有4个取值:0,1,2,3。这时我们直接修改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”,点击。 现在“Choose”旁边的文本框应该显示“Discretize -B 10 -M -0.1 -R first-last”。 点击这个文本框会弹出新窗口以修改离散化的参数。 我们不打算对所有的属性离散化,只是针对对第1个和第4个属性(见区域5属性名左边的数字),故把attributeIndices右边改成“1,4”。计划把这两个属性都分成3段,于是把“bins”改成“3”。其它框里不用更改。点“OK”回到“Explorer”,可以看到“age”和“income”已经被离散化成分类型的属性。若想放弃离散化可以点区域2的“Undo”。 经过上述操作得到的数据集我们保存为bank-data-final.arff。
4. 关联规则(购物篮分析) 我们打算对前面的“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(提升度?): P(L,R)/(P(L)P(R)) Lift=1时表示L和R独立。这个数越大,越表明L和R存在在一个购物篮中不是偶然现象。
参数设置 现在我们计划挖掘出支持度在10%到100%之间,并且lift值超过1 参数设置 现在我们计划挖掘出支持度在10%到100%之间,并且lift值超过1.5且lift值排在前100位的那些关联规则。我们把“lowerBoundMinSupport”和“upperBoundMinSupport”分别设为0.1和1,“metricType”设为lift,“minMetric”设为1.5,“numRules”设为100。其他选项保持默认即可。“OK” 之后在“Explorer”中点击“Start”开始运行算法,在右边窗口显示数据集摘要和挖掘结果。
下面是挖掘出来的lift排前5的规则。 Best rules found: 1 下面是挖掘出来的lift排前5的规则。 Best rules found: 1. age=52_max save_act=YES current_act=YES 113 ==> income=43759_max 61 conf:(0.54) < lift:(4.05)> lev:(0.0 [45] conv:(1.85) 2. income=43759_max 80 ==> age=52_max save_act=YES current_act=YES 61 conf:(0.76) < lift:(4.05)> lev:(0.0 [45] conv:(3.25) 3. income=43759_max current_act=YES 63 ==> age=52_max save_act=YES 61 conf:(0.97) < lift:(3.85)> lev:(0.0 [45] conv:(15.72) 4. age=52_max save_act=YES 151 ==> income=43759_max current_act=YES 61 conf:(0.4) < lift:(3.85)> lev:(0.0 [45] conv:(1.49) 5. age=52_max save_act=YES 151 ==> income=43759_max 76 conf:(0.5) < lift:(3.77)> lev:(0.09) [55] conv:(1.72) 对于挖掘出的每条规则,WEKA列出了它们关联程度的四项指标。
5. 分类与回归 。。。
小 结 本部分只对机器学习作个入门介绍。 机器学习在过去十多年中获得较大发展。今后机器学习将在理论概念、计算机理、综合技术和推广应用等方面开展新的研究。其中,对结构模型、计算理论、算法和混合学习的开发尤为重要。在这些方面,有许多事要做,有许多新问题需要人们去解决。
重要性 …… 工业过程控制 信息安全 遥感信 息处理 机器人 …… 生物 信息学 计算 金融学 分子 生物学 行星 地质学 机 器 学 习 美国航空航天局JPL实验室的科学家在《Science》(2001年9月)上撰文指出:机器学习对科学研究的整个过程正起到越来越大的支持作用,……,该领域在今后的若干年内将取得稳定而快速的发展
重要性:例子—网络安全 如何检测? 入侵检测: …… …… 历史数据:以往的正常访问模式及其表现、以往的入侵模式及其表现…… 对当前访问模式分类 入侵检测: 是否是入侵?是何种入侵? 这是一个典型的预测型机器学习问题 常用技术: 神经网络 决策树 支持向量机 k近邻 序列分析 聚类 …… ……
重要性:例子—生物信息学 常用技术: 神经网络 支持向量机 隐马尔可夫模型 k近邻 决策树 序列分析 聚类 …… ……
重要性(续) 计算机科学在过去十年中发展极为迅速,今后会快速稳定地发展、对科学做出更大贡献的领域 [E.Mjolsness & D. DesCoste, Science 01] 人工智能中最活跃、应用潜力最明显的领域(之一) [T.G. Dietterich, AIMag 97] 美国、欧洲各国都投入了大量人力物力 大型公司如波音、微软、通用电器等都有研究课题 已有一些研究成果进入产品
机器学习角色的转变 机器学习现在似乎已经发展到一个新阶段 如果我们想做出重要的贡献,首先需要把握住该领域发展的脉搏 机器学习现在似乎已经发展到一个新阶段 机器学习起源于人工智能对人类学习能力的追求,上一阶段的研究几乎完全局限在人工智能这一领域中(学习本身是目的) 而现在,机器学习已经开始进入了计算机科学的不同领域,甚至其他学科,成为一种支持技术、服务技术(学习本身是手段)
机器学习角色的转变(续) 现阶段对机器学习的研究可能不应再过多地强调模拟人的学习能力 可能应该把机器学习真正当成一种支持技术(手段而非目的),考虑不同领域甚至不同学科对机器学习的需求,找出其中具有共性的、必须解决的问题,并进而着手研究 我们暂且把这种视角下的机器学习称为: “普适机器学习”(Pervasive ML)
挑战问题(1):泛化能力 提高泛化能力是永远的追求 共性问题: 几乎所有的领域,都希望越准越好 目前泛化能力最强的技术: 支持向量机(SVM)产生途径:理论->实践 集成学习(ensemble learning) 产生途径:实践->理论
挑战问题(1):泛化能力(续) 第一个挑战问题: 今后10年 能否更“准”? 如果能,会从哪儿来?
挑战问题(2):速度 加快速度也是永远的追求 共性问题: 几乎所有的领域,都希望越快越好 “训练速度” vs. “测试速度 训练速度快的往往测试速度慢:k近邻 测试速度快的往往训练速度慢:神经网络
挑战问题(2):速度(续) 第二个挑战问题: 今后10年 能否更“快”? 能做到“训练快”、“测试也快”吗? 如果能,如何做?
挑战问题(3):可理解性 “黑盒子”能满足需要吗? 共性问题: 绝大多数领域都希望有“可理解性” 例子:医疗诊断 地震预测 目前强大的技术几乎都是(或基本上是) “黑盒子” 神经网络、支持向量机、集成学习 “黑盒子”能满足需要吗?
挑战问题(3):可理解性(续) 第三个挑战问题: 今后10年 能否产生“白盒子”? 是和“黑盒子”完全不同的东西, 还是从“黑盒子”变出来?
挑战问题(4):数据利用能力 没有标记的数据是没用的吗? 共性问题: 传统的机器学习技术 —> 对有标记数据进行学习 “标记” ——> 事件所对应的结果 共性问题: 随着数据收集能力飞速提高、Internet的出现,在大多数领域中都可以很容易地获得大量未标记数据 例子:医学图象分析 垃圾邮件过滤 没有标记的数据是没用的吗?
挑战问题(4):数据利用能力(续) “坏”数据一点用也没有吗? 共性问题: 传统的“坏”数据处理方式 —> “扔掉” 在绝大多数领域中都会遇到“坏”数据,有时甚至只有“坏”数据 例子: Web “坏”数据 ——> 大量噪音、属性缺失、不一致、…… 传统的“坏”数据处理方式 —> “扔掉” “坏”数据一点用也没有吗?
挑战问题(4):数据利用能力(续) 第四个挑战问题: 今后10年 能否“数据通吃”? 如何“吃”?
挑战问题(5):代价敏感 “错误”是没有区别的吗? 目前的机器学习技术 —> 降低错误率 共性问题: 大多数领域中的错误代价都不一样 把“好”当成“坏” 把“坏”当成“好” 共性问题: 大多数领域中的错误代价都不一样 例子:入侵检测 癌症诊断 一样吗?
挑战问题(5):代价敏感(续) 第五个挑战问题: 今后10年 能否“趋利避害”? 在达到较低的总错误率的基础上, 如何“趋”、如何“避”?
挑战问题:…… More …… 在任何一个挑战问题上取得突破性进展,都可能成为对机器学习的重要贡献