<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Information Retrieval Blog &#187; weka</title>
	<atom:link href="http://blog.zye.me/tag/weka/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.zye.me</link>
	<description>REAL TIME DATA PROCESSING, DISTRIBUTED COMPUTING, PATTERN DISCOVERY</description>
	<lastBuildDate>Wed, 08 Feb 2012 17:33:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>【转载】Weka入门教程</title>
		<link>http://blog.zye.me/2009/04/51335.html</link>
		<comments>http://blog.zye.me/2009/04/51335.html#comments</comments>
		<pubDate>Fri, 24 Apr 2009 23:18:04 +0000</pubDate>
		<dc:creator>yezheng</dc:creator>
				<category><![CDATA[machine learning]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[weka]]></category>

		<guid isPermaLink="false">http://blog.so8848.com/?p=51335</guid>
		<description><![CDATA[Source: http://forum.wekacn.org/viewtopic.php?f=2&#38;t=9&#38;sid=3e11f64d53cf134215bd69450412cdb9 1. 简介 WEKA的全名是怀卡托智能分析环境（Waikato Environment for Knowledge Analysis），它的源代码可通过http://www.cs.waikato.ac.nz/ml/weka得到。同时weka也是新西兰的一种鸟名，而WEKA的主要开发者来自新西兰。 详见 http://www.china-pub.com/computers/common/info.asp?id=29304 2. 数据格式 跟很多电子表格或数据分析软件一样，WEKA所处理的数据集是图1那样的一个二维的表格。 图1 新窗口打开 这里我们要介绍一下WEKA中的术语。表格里的一个横行称作一个实例（Instance），相当于统计学中的一个样本，或者数据库中的一条记录。 竖行称作一个属性（Attrbute），相当于统计学中的一个变量，或者数据库中的一个字段。这样一个表格，或者叫数据集，在WEKA看来，呈现了属性之 间的一种关系(Relation)。图1中一共有14个实例，5个属性，关系名称为“weather”。 WEKA存储数据的格式是ARFF（Attribute-Relation File Format）文件，这是一种ASCII文本文件。图1所示的二维表格存储在如下的ARFF文件中。这也就是WEKA自带的“weather.arff” 文件，在WEKA安装目录的“data”子目录下可以找到。 代码: % 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 <a href='http://blog.zye.me/2009/04/51335.html'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Source: <a tabindex="-1" href="http://forum.wekacn.org/viewtopic.php?f=2&amp;t=9&amp;sid=3e11f64d53cf134215bd69450412cdb9">http://forum.wekacn.org/viewtopic.php?f=2&amp;t=9&amp;sid=3e11f64d53cf134215bd69450412cdb9</a></p>
<p><span style="font-weight: bold;">1. 简介</span></p>
<p>WEKA的全名是怀卡托智能分析环境（Waikato Environment for Knowledge Analysis），它的源代码可通过<a href="http://www.cs.waikato.ac.nz/ml/weka">http://www.cs.waikato.ac.nz/ml/weka</a>得到。同时weka也是新西兰的一种鸟名，而WEKA的主要开发者来自新西兰。</p>
<p>详见 <a href="http://www.china-pub.com/computers/common/info.asp?id=29304">http://www.china-pub.com/computers/common/info.asp?id=29304</a><br />
<span style="font-weight: bold;"><br />
2. 数据格式</span></p>
<p>跟很多电子表格或数据分析软件一样，WEKA所处理的数据集是图1那样的一个二维的表格。<br />
<img src="http://www.wekacn.org/bbs-img/p1/f1.jpg" alt="图片" /><br />
图1 <a href="http://wekacn.b.lunqun.com/up/m145/45/78/45789//Mon_0609/5953_1300_678021321d6fe25.jpg">新窗口打开</a><br />
这里我们要介绍一下WEKA中的术语。表格里的一个横行称作一个实例（Instance），相当于统计学中的一个样本，或者数据库中的一条记录。 竖行称作一个属性（Attrbute），相当于统计学中的一个变量，或者数据库中的一个字段。这样一个表格，或者叫数据集，在WEKA看来，呈现了属性之 间的一种关系(Relation)。图1中一共有14个实例，5个属性，关系名称为“weather”。</p>
<p>WEKA存储数据的格式是ARFF（Attribute-Relation File Format）文件，这是一种ASCII文本文件。图1所示的二维表格存储在如下的ARFF文件中。这也就是WEKA自带的“weather.arff” 文件，在WEKA安装目录的“data”子目录下可以找到。</p>
<div><strong>代码:</strong></div>
<div>% ARFF file for the weather data with some numric features<br />
%<br />
@relation weather</p>
<p>@attribute outlook {sunny, overcast, rainy}<br />
@attribute temperature real<br />
@attribute humidity real<br />
@attribute windy {TRUE, FALSE}<br />
@attribute play {yes, no}</p>
<p>@data<br />
%<br />
% 14 instances<br />
%<br />
sunny,85,85,FALSE,no<br />
sunny,80,90,TRUE,no<br />
overcast,83,86,FALSE,yes<br />
rainy,70,96,FALSE,yes<br />
rainy,68,80,FALSE,yes<br />
rainy,65,70,TRUE,no<br />
overcast,64,65,TRUE,yes<br />
sunny,72,95,FALSE,no<br />
sunny,69,70,FALSE,yes<br />
rainy,75,80,FALSE,yes<br />
sunny,75,70,TRUE,yes<br />
overcast,72,90,TRUE,yes<br />
overcast,81,75,FALSE,yes<br />
rainy,71,91,TRUE,no</p></div>
<p>需要注意的是，在Windows记事本打开这个文件时，可能会因为回车符定义不一致而导致分行不正常。推荐使用UltraEdit这样的字符编辑软件察看ARFF文件的内容。</p>
<p>下面我们来对这个文件的内容进行说明。<br />
识别ARFF文件的重要依据是分行，因此不能在这种文件里随意的断行。空行（或全是空格的行）将被忽略。<br />
以“%”开始的行是注释，WEKA将忽略这些行。如果你看到的“weather.arff”文件多了或少了些“%”开始的行，是没有影响的。<br />
除去注释后，整个ARFF文件可以分为两个部分。第一部分给出了头信息（Head information），包括了对关系的声明和对属性的声明。第二部分给出了数据信息（Data information），即数据集中给出的数据。从“@data”标记开始，后面的就是数据信息了。</p>
<p><span style="color: blue;">关系声明</span><br />
关系名称在ARFF文件的第一个有效行来定义，格式为<br />
<span style="color: green;">@relation &lt;relation-name&gt;</span><br />
&lt;relation-name&gt;是一个字符串。如果这个字符串包含空格，它必须加上引号（指英文标点的单引号或双引号）。</p>
<p><span style="color: blue;">属性声明</span><br />
属性声明用一列以“@attribute”开头的语句表示。数据集中的每一个属性都有它对应的“@attribute”语句，来定义它的属性名称和数据类型。<br />
这些声明语句的顺序很重要。首先它表明了该项属性在数据部分的位置。例如，“humidity”是第三个被声明的属性，这说明数据部分那些被逗号 分开的列中，第三列数据 85 90 86 96 &#8230; 是相应的“humidity”值。其次，最后一个声明的属性被称作class属性，在分类或<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">回归</span>任务中，它是默认的目标变量。<br />
属性声明的格式为<br />
<span style="color: green;">@attribute &lt;attribute-name&gt; &lt;datatype&gt;</span><br />
其中&lt;attribute-name&gt;是必须以字母开头的字符串。和关系名称一样，如果这个字符串包含空格，它必须加上引号。<br />
WEKA支持的&lt;datatype&gt;有四种，分别是<br />
numeric&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-数值型<br />
&lt;nominal-specification&gt;&#8212;&#8211;分类（nominal）型<br />
string&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-字符串型<br />
date [&lt;date-format&gt;]&#8212;&#8212;&#8211;日期和时间型<br />
其中&lt;nominal-specification&gt; 和&lt;date-format&gt; 将在下面说明。还可以使用两个类型“integer”和“real”，但是WEKA把它们都当作“numeric”看待。注意 “integer”，“real”，“numeric”，“date”，“string”这些关键字是区分大小写的，而 “relation”“attribute ”和“date”则不区分。</p>
<p><span style="color: blue;">数值属性</span><br />
数值型属性可以是整数或者实数，但WEKA把它们都当作实数看待。</p>
<p><span style="color: blue;">分类属性</span><br />
分类属性由&lt;nominal-specification&gt;列出一系列可能的类别名称并放在花括号中：{&lt;nominal- name1&gt;, &lt;nominal-name2&gt;, &lt;nominal-name3&gt;, &#8230;} 。数据集中该属性的值只能是其中一种类别。<br />
例如如下的属性声明说明“outlook”属性有三种类别：“sunny”，“ overcast”和“rainy”。而数据集中每个实例对应的“outlook”值必是这三者之一。<br />
<span style="color: green;">@attribute outlook {sunny, overcast, rainy}</span><br />
如果类别名称带有空格，仍需要将之放入引号中。</p>
<p><span style="color: blue;">字符串属性</span><br />
字符串属性中可以包含任意的文本。这种类型的属性在文本挖掘中非常有用。<br />
示例：<br />
<span style="color: green;">@ATTRIBUTE LCC    string</span></p>
<p><span style="color: blue;">日期和时间属性</span><br />
日期和时间属性统一用“date”类型表示，它的格式是<br />
<span style="color: green;">@attribute &lt;name&gt; date [&lt;date-format&gt;]</span><br />
其中&lt;name&gt;是这个属性的名称，&lt;date-format&gt;是一个字符串，来规定该怎样解析和显示日期或时间的格式，默认的字符串是ISO-8601所给的日期时间组合格式“<span style="font-style: italic;">yyyy-MM-dd</span>T<span style="font-style: italic;">HH:mm:ss</span>”。<br />
数据信息部分表达日期的字符串必须符合声明中规定的格式要求（下文有例子）。</p>
<p><span style="color: blue;">数据信息</span><br />
数据信息中“@data”标记独占一行，剩下的是各个实例的数据。</p>
<p>每个实例占一行。实例的各属性值用逗号“,”隔开。如果某个属性的值是缺失值（missing value），用问号“?”表示，且这个问号不能省略。例如：<br />
<span style="color: green;">@data<br />
sunny,85,85,FALSE,no<br />
?,78,90,?,yes<br />
</span></p>
<p>字符串属性和分类属性的值是区分大小写的。若值中含有空格，必须被引号括起来。例如：<br />
<span style="color: green;"> @relation LCCvsLCSH<br />
@attribute LCC string<br />
@attribute LCSH string<br />
@data<br />
AG5,   &#8216;Encyclopedias and dictionaries.;Twentieth century.&#8217;<br />
AS262, &#8216;Science &#8212; Soviet Union &#8212; History.&#8217;<br />
</span></p>
<p>日期属性的值必须与属性声明中给定的相一致。例如：<br />
<span style="color: green;"> @RELATION Timestamps<br />
@ATTRIBUTE timestamp DATE &#8220;yyyy-MM-dd HH:mm:ss&#8221;<br />
@DATA<br />
&#8220;2001-04-03 12:12:12&#8243;<br />
&#8220;2001-05-03 12:59:55&#8243;</span></p>
<p><span style="color: blue;">稀疏数据</span><br />
有的时候数据集中含有大量的0值（比如购物篮分析），这个时候用稀疏格式的数据存贮更加省空间。<br />
稀疏格式是针对数据信息中某个实例的表示而言，不需要修改ARFF文件的其它部分。看如下的数据：<br />
<span style="color: green;"> @data<br />
0, X, 0, Y, &#8220;class A&#8221;<br />
0, 0, W, 0, &#8220;class B&#8221;</span><br />
用稀疏格式表达的话就是<br />
<span style="color: green;"> @data<br />
{1 X, 3 Y, 4 &#8220;class A&#8221;}<br />
{2 W, 4 &#8220;class B&#8221;}</span><br />
每个实例用花括号括起来。实例中每一个非0的属性值用&lt;index&gt; &lt;空格&gt; &lt;value&gt;表示。&lt;index&gt;是属性的序号，从0开始计；&lt;value&gt;是属性值。属性值之间仍用逗号隔开。 这里每个实例的数值必须按属性的顺序来写，如<span style="color: green;"> {1 X, 3 Y, 4 &#8220;class A&#8221;}</span>，不能写成<span style="color: green;">{3 Y, 1 X, 4 &#8220;class A&#8221;}</span>。<br />
注意在稀疏格式中没有注明的属性值不是缺失值，而是0值。若要表示缺失值必须显式的用问号表示出来。</p>
<p><span style="color: blue;">Relational型属性</span><br />
在WEKA 3.5版中增加了一种属性类型叫做Relational，有了这种类型我们可以像关系型数据库那样处理多个维度了。但是这种类型目前还不见广泛应用，暂不作介绍。</p>
<p>&#8211;整理自<a href="http://www.cs.waikato.ac.nz/%7Eml/weka/arff.html">http://www.cs.waikato.ac.nz/~ml/weka/arff.html</a> 和<a href="http://weka.sourceforge.net/wekadoc/index.php/en:ARFF_%283.5.3%29">http://weka.sourceforge.net/wekadoc/index.php/en:ARFF_%283.5.3%29</a></p>
<div><span style="font-weight: bold;">3.数据准备</span></p>
<p>使用WEKA作数据挖掘，面临的第一个问题往往是我们的数据不是ARFF格式的。幸好，WEKA还提供了对CSV文件的支持，而这种格式是被很多其他软件所支持的。此外，WEKA还提供了通过JDBC访问数据库的功能。<br />
在这一节里，我们先以Excel和Matlab为例，说明如何获得CSV文件。然后我们将知道CSV文件如何转化成ARFF文件，毕竟后者才是WEKA支持得最好的文件格式。面对一个ARFF文件，我们仍有一些预处理要做，才能进行挖掘任务。</p>
<p><span style="color: blue;">.* -&gt; .csv</span><br />
我们给出一个CSV文件的例子（<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/data/bank-data.csv">bank-data.csv</a>）。用UltraEdit打开它可以看到，这种格式也是一种逗号分割数据的文本文件,储存了一个二维表格。</p>
<p>Excel的XLS文件可以让多个二维表格放到不同的工作表（Sheet）中，我们只能把每个工作表存成不同的CSV文件。打开一个XLS文件并切换到需要转换的工作表，另存为CSV类型，点“确定”、“是”忽略提示即可完成操作。</p>
<p>在Matlab中的二维表格是一个矩阵，我们通过这条命令把一个矩阵存成CSV格式。<br />
<span style="color: green;">csvwrite(&#8216;filename&#8217;,matrixname)</span><br />
需要注意的是，Matllab给出的CSV文件往往没有属性名（Excel给出的也有可能没有）。而WEKA必须从CSV文件的第一行读取属性 名，否则就会把第一行的各属性值读成变量名。因此我们对于Matllab给出的CSV文件需要用UltraEdit打开，手工添加一行属性名。注意属性名 的个数要跟数据属性的个数一致，仍用逗号隔开。</p>
<p><span style="color: blue;">.csv -&gt; .arff</span><br />
将CSV转换为ARFF最迅捷的办法是使用WEKA所带的命令行工具。<br />
运行WEKA的主程序，出现GUI后可以点击下方按钮进入相应的模块。我们点击进入“Simple CLI”模块提供的命令行功能。在新窗口的最下方（上方是不能写字的）输入框写上<br />
<span style="color: green;">java weka.core.converters.CSVLoader filename.csv &gt; filename.arff </span><br />
即可完成转换。<br />
在WEKA 3.5中提供了一个“Arff Viewer”模块，我们可以用它打开一个CSV文件将进行浏览，然后另存为ARFF文件。<br />
进入“Exploer”模块，从上方的按钮中打开CSV文件然后另存为ARFF文件亦可。</p>
<p><span style="color: blue;">“Exploer”界面</span><br />
我们应该注意到，“Exploer”还提供了很多功能，实际上可以说这是WEKA使用最多的模块。现在我们先来熟悉它的界面，然后利用它对数据进行预处理。<br />
<img src="http://www.wekacn.org/bbs-img/p1/f2.jpg" alt="图片" /><br />
图2 <a href="http://wekacn.b.lunqun.com/up/m145/45/78/45789//Mon_0609/5951_1300_474ee42215640e0.jpg">新窗口打开</a><br />
图2显示的是使用3.5版&#8221;Exploer&#8221;打开&#8221;bank-data.csv&#8221;的情况。我们根据不同的功能把这个界面分成8个区域。<br />
区域1的几个选项卡是用来切换不同的挖掘任务面板。这一节用到的只有“Preprocess”，其他面板的功能将在以后介绍。<br />
区域2是一些常用按钮。包括打开数据，保存及编辑功能。我们在这里把&#8221;bank-data.csv&#8221;另存为&#8221;bank-data.arff&#8221;。<br />
在区域3中“Choose”某个“Filter”，可以实现筛选数据或者对数据进行某种变换。数据预处理主要就利用它来实现。<br />
区域4展示了数据集的一些基本情况。<br />
区域5中列出了数据集的所有属性。勾选一些属性并“Remove”就可以删除它们，删除后还可以利用区域2的“Undo”按钮找回。区域5上方的一排按钮是用来实现快速勾选的。<br />
在区域5中选中某个属性，则区域6中有关于这个属性的摘要。注意对于数值属性和分类属性，摘要的方式是不一样的。图中显示的是对数值属性“income”的摘要。<br />
区域7是区域5中选中属性的直方图。若数据集的最后一个属性（我们说过这是分类或<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">回归</span>任 务的默认目标变量）是分类变量（这里的“pep”正好 是），直方图中的每个长方形就会按照该变量的比例分成不同颜色的段。要想换个分段的依据，在区域7上方的下拉框中选个不同的分类属性就可以了。下拉框里选 上“No Class”或者一个数值属性会变成黑白的直方图。<br />
区域8是状态栏，可以查看Log以判断是否有错。右边的weka鸟在动的话说明WEKA正在执行挖掘任务。右键点击状态栏还可以执行JAVA内存的垃圾回收。</p>
<p><span style="color: blue;">预处理</span><br />
bank-data数据各属性的含义如下：<br />
<span style="color: skyblue;">id</span> a unique identification number<br />
<span style="color: skyblue;">age</span> age of customer in years (numeric)<br />
<span style="color: skyblue;">sex</span> MALE / FEMALE<br />
<span style="color: skyblue;">region</span> inner_city/rural/suburban/town<br />
<span style="color: skyblue;">income</span> income of customer (numeric)<br />
<span style="color: skyblue;">married</span> is the customer married (YES/NO)<br />
<span style="color: skyblue;">children</span> number of children (numeric)<br />
<span style="color: skyblue;">car</span> does the customer own a car (YES/NO)<br />
<span style="color: skyblue;">save_acct </span> does the customer have a saving account (YES/NO)<br />
<span style="color: skyblue;">current_acct</span> does the customer have a current account (YES/NO)<br />
<span style="color: skyblue;">mortgage</span> does the customer have a mortgage (YES/NO)<br />
<span style="color: skyblue;">pep</span> did the customer buy a PEP (Personal Equity Plan) after the last mailing (YES/NO)</p>
<p>通常对于数据挖掘任务来说，ID这样的信息是无用的，我们将之删除。在区域5勾选属性“id”，并点击“Remove”。将新的数据集保存一次，并用UltraEdit打开这个ARFF文件。我们发现，在属性声明部分，WEKA已经为每个属性选好了合适的类型。</p>
<p>我们知道，有些算法，只能处理所有的属性都是分类型的情况。这时候我们就需要对数值型的属性进行离散化。在这个数据集中有3个变量是数值型的，分别是“age”，“income”和“children”。<br />
其中“children”只有4个取值：0，1，2，3。这时我们在UltraEdit中直接修改ARFF文件，把<br />
<span style="color: green;">@attribute children numeric</span><br />
改为<br />
<span style="color: green;">@attribute children {0,1,2,3}</span><br />
就可以了。<br />
在“Explorer”中重新打开“bank-data.arff”，看看选中“children”属性后，区域6那里显示的“Type”是不是变成“Nominal”了？</p>
<p>“age”和“income”的离散化我们需要借助WEKA中名为“Discretize”的Filter来完成。在区域2中点 “Choose”，出现一棵“Filter树”，逐级找到 “weka.filters.unsupervised.attribute.Discretize”，点击。若无法关闭这个树，在树之外的地方点击 “Explorer”面板即可。<br />
现在“Choose”旁边的文本框应该显示“Discretize -B 10 -M -0.1 -R first-last”。 点击这个文本框会弹出新窗口以修改离散化的参数。<br />
我们不打算对所有的属性离散化，只是针对对第1个和第4个属性（见区域5属性名左边的数字），故把attributeIndices右边改成 “1,4”。计划把这两个属性都分成3段，于是把“bins”改成“3”。其它框里不用更改，关于它们的意思可以点“More”查看。点“OK”回到 “Explorer”，可以看到“age”和“income”已经被离散化成分类型的属性。若想放弃离散化可以点区域2的“Undo”。<br />
如果对“&#8221;(-inf-34.333333]&#8221;”这样晦涩的标识不满，我们可以用UltraEdit打开保存后的ARFF文件，把所有的“&#8217;&#8221;&#8216;(-inf-34.333333]&#8221;&#8221;”替换成“0_34”。其它标识做类似地手动替换。</p>
<p>经过上述操作得到的数据集我们保存为<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/data/bank-data-final.arff">bank-data-final.arff</a>。</p>
<p>&#8212;-整理自<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/preprocess.html">http://maya.cs.depaul.edu/~classes/ect584/WEKA/preprocess.html</a></p>
<p><span style="font-weight: bold;">4. 关联规则（购物篮分析）</span><br />
<span style="color: red;">注意</span>：目前，WEKA的关联规则分析功能仅能用来作示范，不适合用来挖掘大型数据集。</p>
<p>我们打算对前面的“bank-data”数据作关联规则的分析。用“Explorer”打开“bank-data-final.arff”后，切 换到“Associate”选项卡。默认关联规则分析是用Apriori算法，我们就用这个算法，但是点“Choose”右边的文本框修改默认的参数，弹 出的窗口中点“More”可以看到各参数的说明。</p>
<p><span style="color: blue;">背景知识</span><br />
首先我们来温习一下Apriori的有关知识。对于一条关联规则L-&gt;R，我们常用支持度（Support）和置信度（Confidence）来衡量它的重要性。规则的支持度是用来估计在一个购物篮中同时观察到L和R的概率<span style="color: green;">P(L,R)</span>，而规则的置信度是估计购物栏中出现了L时也出会现R的条件概率<span style="color: green;">P(R|L)</span>。关联规则的目标一般是产生支持度和置信度都较高的规则。<br />
有几个类似的度量代替置信度来衡量规则的关联程度，它们分别是<br />
Lift（提升度？）： <span style="color: green;">P(L,R)/(P(L)P(R)) </span><br />
Lift=1时表示L和R独立。这个数越大，越表明L和R存在在一个购物篮中不是偶然现象。<br />
Leverage（不知道怎么翻译）：<span style="color: green;">P(L,R)-P(L)P(R) </span><br />
它和Lift的含义差不多。Leverage=0时L和R独立，Leverage越大L和R的关系越密切。<br />
Conviction（更不知道译了）：<span style="color: green;">P(L)P(!R)/P(L,!R) </span> （!R表示R没有发生）<br />
Conviction也是用来衡量L和R的独立性。从它和lift的关系（对R取反，代入Lift公式后求倒数）可以看出，我们也希望这个值越大越好。<br />
值得注意的是，用Lift和Leverage作标准时，L和R是对称的，Confidence和Conviction则不然。</p>
<p><span style="color: blue;">参数设置</span><br />
现在我们计划挖掘出支持度在10%到100%之间，并且lift值超过1.5且lift值排在前100位的那些关联规则。我们把 “lowerBoundMinSupport”和“upperBoundMinSupport”分别设为0.1和1，“metricType”设为 lift，“minMetric”设为1.5，“numRules”设为100。其他选项保持默认即可。“OK” 之后在“Explorer”中点击“Start”开始运行算法，在右边窗口显示数据集摘要和挖掘结果。</p>
<p>下面是挖掘出来的lift排前5的规则。<br />
<span style="color: green;"> Best rules found:<br />
1. age=52_max save_act=YES current_act=YES 113 ==&gt; income=43759_max 61 conf:(0.54) &lt; lift:(4.05)&gt; lev:(0.08) [45] conv:(1.85)<br />
2. income=43759_max 80 ==&gt; age=52_max save_act=YES current_act=YES 61 conf:(0.76) &lt; lift:(4.05)&gt; lev:(0.08) [45] conv:(3.25)<br />
3. income=43759_max current_act=YES 63 ==&gt; age=52_max save_act=YES 61 conf:(0.97) &lt; lift:(3.85)&gt; lev:(0.08) [45] conv:(15.72)<br />
4. age=52_max save_act=YES 151 ==&gt; income=43759_max current_act=YES 61 conf:(0.4) &lt; lift:(3.85)&gt; lev:(0.08) [45] conv:(1.49)<br />
5. age=52_max save_act=YES 151 ==&gt; income=43759_max 76    conf:(0.5) &lt; lift:(3.77)&gt; lev:(0.09) [55] conv:(1.72)</span><br />
对于挖掘出的每条规则，WEKA列出了它们关联程度的四项指标。</p>
<p><span style="color: blue;">命令行方式</span><br />
我们也可以利用命令行来完成挖掘任务，在“Simlpe CLI”模块中输入如下格式的命令：<br />
<span style="color: green;">java weka.associations.Apriori options -t directory-path&#8221;bank-data-final.arff </span><br />
即可完成Apriori算法。注意，“-t”参数后的文件路径中不能含有空格。<br />
在前面我们使用的option为<br />
<span style="color: green;">-N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 </span> 命令行中使用这些参数得到的结果和前面利用GUI得到的一样。<br />
我们还可以加上“- I”参数，得到不同项数的频繁项集。我用的命令如下：<br />
<span style="color: green;">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:&#8221;weka&#8221;bank-data-final.arff </span><br />
挖掘结果在上方显示，应是<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/data/bank-data-ar2.txt">这个文件</a>的样子。</p>
<p>&#8212;-整理自<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/associate.html">http://maya.cs.depaul.edu/~classes/ect584/WEKA/associate.html</a></div>
<p><span style="font-weight: bold;">5. 分类与<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">回归</span></span></p>
<p><span style="color: blue;">背景知识</span><br />
WEKA把分类(Classification)和<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">回归</span>(Regression)都放在“Classify”选项卡中，这是有原因的。<br />
在这两个任务中，都有一个目标属性（输出变量）。我们希望根据一个样本(WEKA中称作实例)的一组特征（输入变量），对目标进行预测。为了实现 这一目的，我们需要有一个训练数据集，这个数据集中每个实例的输入和输出都是已知的。观察训练集中的实例，可以建立起预测的模型。有了这个模型，我们就可 以新的输出未知的实例进行预测了。衡量模型的好坏就在于预测的准确程度。<br />
在WEKA中，待预测的目标（输出）被称作Class属性，这应该是来自分类任务的“类”。一般的，若Class属性是分类型时我们的任务才叫分类，Class属性是数值型时我们的任务叫<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">回归</span>。</p>
<p><span style="color: blue;">选择算法</span><br />
这一节中，我们使用C4.5决策树算法对bank-data建立起分类模型。<br />
我们来看原来的“<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/data/bank-data.csv">bank-data.csv</a>” 文件。“ID”属性肯定是不需要的。由于C4.5算法可以处理数值型的属性，我们不用像前面用关联规则那样把每个变量都离散化成分类型。尽管如此，我们还 是把“Children”属性转换成分类型的两个值“YES”和“NO”。另外，我们的训练集仅取原来数据集实例的一半；而从另外一半中抽出若干条作为待 预测的实例，它们的“pep”属性都设为缺失值。经过了这些处理的训练集数据在<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/classify/bank.arff">这里</a>下载；待预测集数据在<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/classify/bank-new.arff">这里</a>下载。</p>
<p>我们用“Explorer”打开训练集“bank.arff”，观察一下它是不是按照前面的要求处理好了。切换到“Classify”选项卡，点 击“Choose”按钮后可以看到很多分类或者<span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">回归</span>的 算法分门别类的列在一个树型框里。3.5版的WEKA中，树型框下方有一个“Filter&#8230;”按 钮，点击可以根据数据集的特性过滤掉不合适的算法。我们数据集的输入属性中有“Binary”型（即只有两个类的分类型）和数值型的属性，而Class变 量是“Binary”的；于是我们勾选“Binary attributes”“Numeric attributes”和“Binary class”。点“OK”后回到树形图，可以发现一些算法名称变红了，说明它们不能用。选择“trees”下的“J48”，这就是我们需要的C4.5算 法，还好它没有变红。<br />
点击“Choose”右边的文本框，弹出新窗口为该算法设置各种参数。点“More”查看参数说明，点“Capabilities”是查看算法适用范围。这里我们把参数保持默认。<br />
现在来看左中的“Test Option”。我们没有专门设置检验数据集，为了保证生成的模型的准确性而不至于出现过拟合（overfitting）的现象，我们有必要采用10折交 叉验证（10-fold cross validation）来选择和评估模型。若不明白交叉验证的含义可以<a href="http://www.google.com/search?&amp;q=cross+validation">Google</a>一下。</p>
<p><span style="color: blue;">建模结果</span><br />
OK，选上“Cross-validation”并在“Folds”框填上“10”。点“Start”按钮开始让算法生成决策树模型。很快，用文 本表示的一棵决策树，以及对这个决策树的误差分析等等结果出现在右边的“Classifier output”中。同时左下的“Results list”出现了一个项目显示刚才的时间和算法名称。如果换一个模型或者换个参数，重新“Start”一次，则“Results list”又会多出一项。</p>
<p>我们看到“J48”算法交叉验证的结果之一为<br />
<span style="color: green;">Correctly Classified Instances         206               68.6667 %</span><br />
也就是说这个模型的准确度只有69%左右。也许我们需要对原属性进行处理，或者修改算法的参数来提高准确度。但这里我们不管它，继续用这个模型。</p>
<p>右键点击“Results list”刚才出现的那一项，弹出菜单中选择“Visualize tree”，新窗口里可以看到图形模式的决策树。建议把这个新窗口最大化，然后点右键，选“Fit to screen”，可以把这个树看清楚些。看完后截图或者关掉:P</p>
<p>这里我们解释一下“Confusion Matrix”的含义。<br />
<span style="color: green;">=== Confusion Matrix ===<br />
a   b   &lt;&#8211; classified as<br />
74  64 |   a = YES<br />
30 132 |   b = NO</span><br />
这个矩阵是说，原本“pep”是“YES”的实例，有74个被正确的预测为“YES”，有64个错误的预测成了“NO”；原本“pep”是 “NO”的实例，有30个被错误的预测为“YES”，有132个正确的预测成了“NO”。74+64+30+132 = 300是实例总数，而(74+132)/300 = 0.68667正好是正确分类的实例所占比例。这个矩阵对角线上的数字越大，说明预测得越好。</p>
<p><span style="color: blue;">模型应用</span><br />
现在我们要用生成的模型对那些待预测的数据集进行预测了。注意待预测数据集和训练用数据集各个属性的设置必须是一致的。即使你没有待预测数据集的Class属性的值，你也要添加这个属性，可以将该属性在各实例上的值均设成缺失值。<br />
在“Test Opion”中选择“Supplied test set”，并且“Set”成你要应用模型的数据集，这里是“bank-new.arff”文件。<br />
现在，右键点击“Result list”中刚产生的那一项，选择“Re-evaluate model on current test set”。右边显示结果的区域中会增加一些内容，告诉你该模型应用在这个数据集上表现将如何。如果你的Class属性都是些缺失值，那这些内容是无意义 的，我们关注的是模型在新数据集上的预测值。<br />
现在点击右键菜单中的“Visualize classifier errors”，将弹出一个新窗口显示一些有关预测误差的散点图。点击这个新窗口中的“Save”按钮，保存一个Arff文件。打开这个文件可以看到在倒 数第二个位置多了一个属性（predictedpep），这个属性上的值就是模型对每个实例的预测值。</p>
<p><span style="color: blue;">使用命令行（推荐）</span><br />
虽然使用图形界面查看结果和设置参数很方便，但是最直接最灵活的建模及应用的办法仍是使用命令行。<br />
打开“Simple CLI”模块，像上面那样使用“J48”算法的命令格式为：<br />
<span style="color: green;">java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path&#8221;bank.arff -d directory-path &#8220;bank.model </span><br />
其中参数“ -C 0.25”和“-M 2”是和图形界面中所设的一样的。“-t ”后面跟着的是训练数据集的完整路径（包括目录和文件名），“-d ”后面跟着的是保存模型的完整路径。注意！这里我们可以把模型保存下来。<br />
输入上述命令后，所得到树模型和误差分析会在“Simple CLI”上方显示，可以复制下来保存在文本文件里。误差是把模型应用到训练集上给出的。<br />
把这个模型应用到“bank-new.arff”所用命令的格式为：<br />
<span style="color: green;">java weka.classifiers.trees.J48 -p 9 -l directory-path&#8221;bank.model -T directory-path &#8220;bank-new.arff </span><br />
其中“-p 9”说的是模型中的待预测属性的真实值存在第9个（也就是“pep”）属性中，这里它们全部未知因此全部用缺失值代替。“-l”后面是模型的完整路径。“-T”后面是待预测数据集的完整路径。<br />
输入上述命令后，在“Simple CLI”上方会有这样一些结果：<br />
<span style="color: green;">0 YES 0.75 ?<br />
1 NO 0.7272727272727273 ?<br />
2 YES 0.95 ?<br />
3 YES 0.8813559322033898 ?<br />
4 NO 0.8421052631578947 ?<br />
&#8230;</span><br />
这里的第一列就是我们提到过的“Instance_number”，第二列就是刚才的“predictedpep”，第四列则是“bank- new.arff”中原来的“pep”值（这里都是“?”缺失值）。第三列对预测结果的置信度（confidence ）。比如说对于实例0，我们有75%的把握说它的“pep”的值会是“YES”，对实例4我们有84.2%的把握说它的“pep”值会是“NO”。<br />
我们看到，使用命令行至少有两个好处。一个是可以把模型保存下来，这样有新的待预测数据出现时，不用每次重新建模，直接应用保存好的模型即可。另一个是对预测结果给出了置信度，我们可以有选择的采纳预测结果，例如，只考虑那些置信度在85%以上的结果。</p>
<p>&#8212;-整理自<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/classify.html">http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify.html</a></p>
<p><span style="font-weight: bold;">6. 聚类分析</span></p>
<p><span style="color: blue;">原理与实现</span><br />
聚类分析中的“类”（cluster）和前面分类的“类”（class）是不同的，对cluster更加准确的翻译应该是“簇”。聚类的任务是把 所有的实例分配到若干的簇，使得同一个簇的实例聚集在一个簇中心的周围，它们之间距离的比较近；而不同簇实例之间的距离比较远。对于由数值型属性刻画的实 例来说，这个距离通常指欧氏距离。<br />
现在我们对前面的“bank data”作聚类分析，使用最常见的K均值（K-means）算法。下面我们简单描述一下K均值聚类的步骤。<br />
K均值算法首先随机的指定K个簇中心。然后：1)将每个实例分配到距它最近的簇中心，得到K个簇；2)计分别计算各簇中所有实例的均值，把它们作为各簇新的簇中心。重复1)和2)，直到K个簇中心的位置都固定，簇的分配也固定。</p>
<p>上述K均值算法只能处理数值型的属性，遇到分类型的属性时要把它变为若干个取值0和1的属性。WEKA将自动实施这个分类型到数值型的变换，而且 WEKA会自动对数值型的数据作标准化。因此，对于原始数据“bank-data.csv”，我们所做的预处理只是删去属性“id”，保存为ARFF格式 后，修改属性“children”为分类型。这样得到的数据文件为“<a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/cluster/bank.arff">bank.arff</a>”，含600条实例。</p>
<p>用“Explorer”打开刚才得到的“bank.arff”，并切换到“Cluster”。点“Choose”按钮选择 “SimpleKMeans”，这是WEKA中实现K均值的算法。点击旁边的文本框，修改“numClusters”为6，说明我们希望把这600条实例 聚成6类，即K=6。下面的“seed”参数是要设置一个随机种子，依此产生一个随机数，用来得到K均值算法中第一次给出的K个簇中心的位置。我们不妨暂 时让它就为10。<br />
选中“Cluster Mode”的“Use training set”，点击“Start”按钮，观察右边“Clusterer output”给出的聚类结果。也可以在左下角“Result list”中这次产生的结果上点右键，“View in separate window”在新窗口中浏览结果。</p>
<p><span style="color: blue;">结果解释</span><br />
首先我们注意到结果中有这么一行：<br />
<span style="color: green;">Within cluster sum of squared errors: 1604.7416693522332</span><br />
这是评价聚类好坏的标准，数值越小说明同一簇实例之间的距离越小。也许你得到的数值会不一样；实际上如果把“seed”参数改一下，得到的这个数值就可能会不一样。我们应该多尝试几个seed，并采纳这个数值最小的那个结果。例如我让“seed”取100，就得到<br />
<span style="color: green;">Within cluster sum of squared errors: 1555.6241507629218</span><br />
我该取后面这个。当然再尝试几个seed，这个数值可能会更小。</p>
<p>接下来“Cluster centroids:”之后列出了各个簇中心的位置。对于数值型的属性，簇中心就是它的均值（Mean）；分类型的就是它的众数（Mode）， 也就是说这个属性上取值为众数值的实例最多。对于数值型的属性，还给出了它在各个簇里的标准差（Std Devs）。</p>
<p>最后的“Clustered Instances”是各个簇中实例的数目及百分比。</p>
<p>为了观察可视化的聚类结果，我们在左下方“Result list”列出的结果上右击，点“Visualize cluster assignments”。弹出的窗口给出了各实例的散点图。最上方的两个框是选择横坐标和纵坐标，第二行的“color”是散点图着色的依据，默认是根 据不同的簇“Cluster”给实例标上不同的颜色。<br />
可以在这里点“Save”把聚类结果保存成ARFF文件。在这个新的ARFF文件中，“instance_number”属性表示某实例的编号，“Cluster”属性表示聚类算法给出的该实例所在的簇。</p>
<p>&#8212;-整理自 <a href="http://maya.cs.depaul.edu/%7Eclasses/ect584/WEKA/k-means.html">http://maya.cs.depaul.edu/~classes/ect584/WEKA/k-means.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zye.me/2009/04/51335.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

