数据挖掘Weka v3.8.0
分享到:
Weka,英文名Waikato Environment for Knowledge Analysis,中文名怀卡托智能分析环境,是一款完全免费的由SPSS推出的基于JAVA环境下开源的机器学习以及数据数据挖掘软件。Weka作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。若用户想自己实现数据挖掘算法,则可参考Weka的接口文档,用户可在Weka中集成自己的算法甚至借鉴它的方法自己实现可视化工具。Weka系统汇集了最前沿的机器算法和数据预处理工具,借此用户可快速灵活地将已有的处理方法应用于新的数据集,且软件可为数据挖掘的整个工程提供全面的支持包括准备输入数据、统计评估学习方案、输入数据和学习效果的可视化。此外,Weka除了提供大量学习算法之外,还提供了适应范围很广的预处理工具,用户通过一个统一界面操作各种组件,比较不同的学习算法,找出能够解决问题的最有效的方法。与其他软件所不同的是,Weka具有一个独有且易使用的图形用户接口-探索者,借此用户可通过选择菜单和填写,并可调用Weka的所有功能。例如,用户用鼠标仅仅单击几个按钮,就可以完成从ARFF文件中读取数据集,然后建立决策树的工作。
Weka的运行需要JAVE的支持,若无则推荐下载java 7/soft/4953.html
JAve的安装很简单,只需双击安装包进行安装,根据安装向导提示,点击下一步即可,安装完成以后可以通过命令提示符输入java –version 进行验证,若出现如下图所示,表示安装成功。
二、配置环境变量?
1.右击我的电脑,点击属性,选择高级系统设置—环境变量
2.双击Path,然后出现编辑系统变量窗口
3.在变量值编辑框中,将光标移动至最后,添加一个分号“;”,然后将java的jdk安装路径追加到编辑框最后,我的系统中安装路径为:C:Program FilesJavajdk1.7.0_21bin,所以在编辑框最后写入:“; C:Program FilesJavajdk1.7.0_21bin”,即可完成环境变量的配置
三、Weka安装
1.打开Weka安装包,并双击“weka-3-8-0jre-x64.exe”开始正式的安装
2.Weka的安装很简单,只需默认点击下一步下一步即可
WEKA中的术语。表格里的一个横行称作一个实例(Instance),相当于统计学中的一个样本,或者数据库中的一条记录。竖行称作一个属性(Attrbute),相当于统计学中的一个变量,或者数据库中的一个字段。这样一个表格,或者叫数据集,在WEKA看来,呈现了属性之间的一种关系(Relation)
WEKA存储数据的格式是ARFF(Attribute-Relation File Format)文件,这是一种ASCII文本文件。图1所示的二维表格存储在如下的ARFF文件中。这也就是WEKA自带的“weather.arff”文件,在WEKA安装目录的“data”子目录下可以找到,具体介绍:
1.关系声明?
关系名称在ARFF文件的第一个有效行来定义,格式为?
@relation?
是一个字符串。如果这个字符串包含空格,它必须加上引号(指英文标点的单引号或双引号)
2.属性声明?
属性声明用一列以“@attribute”开头的语句表示。数据集中的每一个属性都有它对应的“@attribute”语句,来定义它的属性名称和数据类型。?
这些声明语句的顺序很重要。首先它表明了该项属性在数据部分的位置。例如,“humidity”是第三个被声明的属性,这说明数据部分那些被逗号分开的列中,第三列数据 85 90?86 96 ... 是相应的“humidity”值。其次,最后一个声明的属性被称作class属性,在分类或回归任务中,它是默认的目标变量。
属性声明的格式为?
@attribute?
其中是必须以字母开头的字符串。和关系名称一样,如果这个字符串包含空格,它必须加上引号。?
WEKA支持的有四种,分别是?
numeric-------------------------数值型?
-----分类(nominal)型?
string----------------------------字符串型?
date []--------日期和时间型?
其中 和 将在下面说明。还可以使用两个类型“integer”和“real”,但是WEKA把它们都当作“numeric”看待。注意“integer”,“real”,“numeric”,“date”,“string”这些关键字是区分大小写的,而“relation”“attribute ”和“date”则不区分。
3.数值属性?
数值型属性可以是整数或者实数,但WEKA把它们都当作实数看待
4.分类属性?
分类属性由列出一系列可能的类别名称并放在花括号中:{, , , ...} 。数据集中该属性的值只能是其中一种类别。
例如如下的属性声明说明“outlook”属性有三种类别:“sunny”,“ overcast”和“rainy”。而数据集中每个实例对应的“outlook”值必是这三者之一。
@attribute outlook {sunny, overcast, rainy}?
如果类别名称带有空格,仍需要将之放入引号中
5.字符串属性?
字符串属性中可以包含任意的文本。这种类型的属性在文本挖掘中非常有用。?
示例:?
@ATTRIBUTE LCC string?
6.日期和时间属性?
日期和时间属性统一用“date”类型表示,它的格式是?
@attribute date []?
其中是这个属性的名称,是一个字符串,来规定该怎样解析和显示日期或时间的格式,默认的字符串是ISO-8601所给的日期时间组合格式“yyyy-MM-ddTHH:mm:ss”。
数据信息部分表达日期的字符串必须符合声明中规定的格式要求
7.数据信息?
数据信息中“@data”标记独占一行,剩下的是各个实例的数据。?
每个实例占一行。实例的各属性值用逗号“,”隔开。如果某个属性的值是缺失值(missing value),用问号“?”表示,且这个问号不能省略。例如:
@data?
sunny,85,85,FALSE,no?
?,78,90,?,yes?
字符串属性和分类属性的值是区分大小写的。若值中含有空格,必须被引号括起来。例如:?
@relation LCCvsLCSH?
@attribute LCC string?
@attribute LCSH string?
@data?
AG5, 'Encyclopedias and dictionaries.;Twentieth century.'?
AS262, 'Science -- Soviet Union -- History.'?
日期属性的值必须与属性声明中给定的相一致。例如:?
@RELATION Timestamps?
@ATTRIBUTE timestamp DATE "yyyy-MM-dd HH:mm:ss" ?
@DATA?
"2001-04-03 12:12:12"?
"2001-05-03 12:59:55"?
8.稀疏数据?
有的时候数据集中含有大量的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值。若要表示缺失值必须显式的用问号表示出来
9.Relational型属性?
在WEKA 3.5版中增加了一种属性类型叫做Relational,有了这种类型我们可以像关系型数据库那样处理多个维度了。但是这种类型目前还不见广泛应用,暂不作介绍。
二、数据准备?
使用WEKA作数据挖掘,面临的第一个问题往往是我们的数据不是ARFF格式的。幸好,WEKA还提供了对CSV文件的支持,而这种格式是被很多其他软件所支持的。此外,WEKA还提供了通过JDBC访问数据库的功能。
在这一节里,我们先以Excel和Matlab为例,说明如何获得CSV文件。然后我们将知道CSV文件如何转化成ARFF文件,毕竟后者才是WEKA支持得最好的文件格式。面对一个ARFF文件,我们仍有一些预处理要做,才能进行挖掘任务。
1..* -> .csv?
我们给出一个CSV文件的例子(bank-data.csv)。用UltraEdit打开它可以看到,这种格式也是一种逗号分割数据的文本文件,储存了一个二维表格。
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文件亦可。
3.“Exploer”界面?
我们应该注意到,“Exploer”还提供了很多功能,实际上可以说这是WEKA使用最多的模块
4.预处理?
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)
三、关联规则
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)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列出了它们关联程度的四项指标。?
2.命令行方式?
我们也可以利用命令行来完成挖掘任务,在“Simlpe CLI”模块中输入如下格式的命令:?
java weka.associations.Apriori options -t directory-pathbank-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:wekabank-data-final.arff
挖掘结果在上方显示,应是这个文件的样子。
四、分类与回归?
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)来选择和评估模型。若不明白交叉验证的含义可以Google一下。
2.建模结果?
OK,选上“Cross-validation”并在“Folds”框填上“10”。点“Start”按钮开始让算法生成决策树模型。很快,用文本表示的一棵决策树,以及对这个决策树的误差分析等结果出现在右边的“Classifier output”中。同时左下的“Results list”出现了一个项目显示刚才的时间和算法名称。如果换一个模型或者换个参数,重新“Start”一次,则Results list”又会多出一项
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.使用命令行(推荐)?
虽然使用图形界面查看结果和设置参数很方便,但是最直接最灵活的建模及应用的办法仍是使用命令行。?
打开“Simple CLI”模块,像上面那样使用“J48”算法的命令格式为:?
java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-pathbank.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-pathbank.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%以上的结果。
1.Add
为数据库添加一个新的属性,新的属性将会包含所有缺失值。可选参数:
attributeIndex:属性位置,从1开始算,last是最后一个,first是第一个
attributeName:属性名称
attributeType:属性类型,一般是4选1
dateFormat:数据格式,参考ISO-8601
nominalLabels:名义标签,多个值用逗号隔开
2.AddExpression
新增一个属性,该属性由现有属性通过设定的表达式计算得出。支持+, -, *, /, ^, log, abs, cos, exp, sqrt, floor, ceil, rint, tan, sin。现有属性由a+索引值构成。
3.AddID
字面意思,添加一个ID
4.AddNoise
只对名义属性有效,依照一定比例修改值。
5.Center
将数值化属性的平均化为0。
6.ChangeDateFormat
修改数据格式
7.Copy
复制制定属性并命名为Copy Of XX
8.Discretize
简单划分的离散化处理。参数:
attributeIndices:属性范围,如1-5,first-last
bins:桶的数量
9.FirstOrder
第n个值用n+1项值和n项值的差替换
10.MathExpression
功能和AddExpression类似,不过支持的运算更多,特别是MAX和MIN的支持特别有用。所有支持运算符如下:+, -, *, /, pow, log,abs, cos, exp, sqrt, tan, sin, ceil,?floor, rint, (, ),A,MEAN, MAX, MIN, SD, COUNT, SUM, SUMSQUARED, ifelse
11.Reorder
重新排列属性,输入2-last,1可以让第一项排到最后,如果输入1,3,5的话…其他项就没有了
12.Standardize
这个和Center功能大致相同,多了一个标准化单位变异数
13.StringToNominal
将String型转化为Nominal型
14.SwapValues
交换值
然后是weka.filters.unsupervised.instance包下的
1.NonSparseToSparse
将所有输入转为稀疏格式
2.Normalize
规范化整个实例集
3.RemoveFolds
交叉验证,不支持分层,如果需要的话使用监督学习中的方法
4.RemoveRange
移除制定范围的实例,化为NaN
5.Resample
随机抽样,从现有样本产生新的小样本
6.SubsetByExpression
根据规则进行过滤,支持逻辑运算,向上取值,取绝对值等等
当随便点击一个变量时,如点击变量16,如图:
意思是这个变量也有两类(因为两个柱子),第一个柱子蓝红色表示多部分(红色)来自类别2,少部分(蓝色)来自类别1,第二个柱子蓝红色表色多部分(蓝色)来自类别1,少部分(红色)来自类别2,高度差不多代表含量的百分比。OK
2、看看数据是不是整齐的(矩形的),有时候有空格单元格会有干扰
1、空缺值处理
目前最常用的方法是使用最可能的值填充空缺值,比如可以用回归、贝叶斯形式化方法工具或判定树归纳等确定空缺值.这类方法依靠现有的数据信息来推测空缺值,使空缺值有更大的机会保持与其他属性之间的联系。
还可以用一个全局常量替换空缺值、使用属性的平均值填充空缺值或将所有元组按某些属性分类,然后用同一类中属性的平均值填充空缺值.如果空缺值很多,这些方法可能误导挖掘结果
2、噪声数据处理
噪声是一个测量变量中的随机错误或偏差,包括错误的值或偏离期望的孤立点值。常用分箱、回归、计算机检查和人工检查结合、聚类等方法进行噪音处理。
数据变化主要使用平滑聚集,数据概化,规范化等手段使数据换为较利于数据挖掘的格式。
数据归约主要是为了压缩数据量,源数据可以用来得到数据集的归约表示,它接近于保持原数据的完整性,但数据量比原数据小得多.与非归约数据相比,在归约的数据上进行挖掘,所需的时间和内存资源更少,挖掘将更有效,并产生相同或几乎相同的分析结果。常用维归约、数据压缩、数值归约等方法实现。
2、Weka系统包括处理标准数据挖掘问题的所有方法:回归、分类、聚类、关联规则以及属性选择。分析要进行处理的数据是重要的一个环节,Weka提供了很多用于数据可视化和预处理的工具。输入数据可以有两种形式,第一种是以ARFF格式为代表的文件;另一种是直接读取数据库表
3、使用Weka的方式主要有三种:第一种是将学习方案应用于某个数据集,然后分析其输出,从而更多地了解这些数据;第二种是使用已经学习到的模型对新实例进行预测;第三种是使用多种学习器,然后根据其性能表现选择其中的一种来进行预测。用户使用交互式界面菜单中选择一种学习方法,大部分学习方案都带有可调节的参数,用户可通过属性列表或对象编辑器修改参数,然后通过同一个评估模块对学习方案的性能进行评估
4、Weka系统提供的最容易使用的图形用户接口称为探索者(Explorer)。通过选择菜单和填写表单,可以调用Weka的所有功能。例如,用户用鼠标仅仅单击几个按钮,就可以完成从ARFF文件中读取数据集,然后建立决策树的工作。Weka界面十分友好,能适时地将不宜用的功能选项设置为不可选;将用户选项设计为表格方式以方便填写;当鼠标移动到界面工具上短暂停留时,会给出用法提示;对算法都给出较为合理的默认值,这样,帮助用户尽量少花精力进行配置就可取得较好的效果等
5、可以使用增量方式的算法来处理大型数据集,用户可以定制处理数据流的方式和顺序。知识流界面允许用户在屏幕上任意拖曳代表学习算法和数据源的图形构件,并以一定的方式和顺序组合在一起。也就是,按照一定顺序将代表数据源、预处理工具、学习算法、评估手段和可视化模块的各构件组合在一起,形成数据流。如果用户选取的过滤器和学习算法具有增量学习功能,那就可以实现大型数据集的增量分批读取和处理
6、Weka用于帮助用户解答实际应用分类和回归技术中遇到的一个基本问题——对于一个已知问题,哪种方法及参数值能够取得最佳效果?通过Weka提供的实验者工作环境,用户可以比较不同的学习方案。尽管探索者界面也能通过交互完成这样的功能,但通过实验者界面,用户可以让处理过程实现自动化。实验者界面更加容易使用不同参数去设置分类器和过滤器,使之运行在一组数据集中,收集性能统计数据,实现重要的测试实验
7、Weka的简单命令行(Simple CLI)界面是为不提供自己的命令行界面的操作系统提供的,该简单命令行界面用于和用户进行交互,可以直接执行Weka命令
大多数Java虚拟机只分配一定数额的最大内存来运行Java程序,通常远低于计算机中的内存大小。但是,可以通过设置适当的选项,扩展虚拟内存。例如,可以用命令:
java-Xmx512m ...
设置最大Java堆的大小为512MB。还可以使用Xmx2g将其设置为2GB,这样就足够使用。当然,这还要看计算机的配置,设置过大的内存会影响运行性能。
二、StackOverflowError(栈溢出错误)
这是由于设置的堆栈过小造成的错误。尝试增加虚拟机的堆栈。可以使用下面的命令来增加堆栈空间:
java-Xss512k ...
该命令设置Java的最大堆栈大小为512KB。如果还是不够,请慢慢增加
三、training and test setare not compatible(训练集和测试集不兼容)
Weka假定训练集和测试集的结构应该完全一致,这意味着训练集和测试集的属性不但在数量上相同,而且在类型上也应该完全一样。对于标称属性,必须确保标签的数量和顺序是完全一致。
使用已经训练好的分类器进行预测,不需要包括任何分类属性的信息。出于速度的原因,Weka不执行任何有关数据集结构的检查,既没有将属性名称从训练空间映射到测试空间,也没有映射标签。在内部,数据集的单行表示为一个double型数组。对于数值属性,这并不构成问题,但对于其他类型的属性,如标称属性,double值表示可用标签列表的索引。标签的不同顺序会导致不同的标签却采用相同的索引表示,这样,预测就不可靠了。
解决的方法是使用批量过滤。如果第二个数据集(通常为测试集)需要与第一个数据集(通常为训练集)处理为具有相同的统计数据,那么就使用批量过滤。代码如下:
Java weka filters.unsupervised.attribute.Standardize
-b
-i train.arff
-o train_std.arff
-s test_std.arff
注:上述命令是适用于Linux/Unix的bash,反斜杠表示续行,如果采用Windows或SimpleCLI,需要去掉反斜杠,并在这一行写全命令
Weka安装和配置
一、安装Java运行环境Weka的运行需要JAVE的支持,若无则推荐下载java 7/soft/4953.html
JAve的安装很简单,只需双击安装包进行安装,根据安装向导提示,点击下一步即可,安装完成以后可以通过命令提示符输入java –version 进行验证,若出现如下图所示,表示安装成功。
二、配置环境变量?
1.右击我的电脑,点击属性,选择高级系统设置—环境变量
2.双击Path,然后出现编辑系统变量窗口
3.在变量值编辑框中,将光标移动至最后,添加一个分号“;”,然后将java的jdk安装路径追加到编辑框最后,我的系统中安装路径为:C:Program FilesJavajdk1.7.0_21bin,所以在编辑框最后写入:“; C:Program FilesJavajdk1.7.0_21bin”,即可完成环境变量的配置
三、Weka安装
1.打开Weka安装包,并双击“weka-3-8-0jre-x64.exe”开始正式的安装
2.Weka的安装很简单,只需默认点击下一步下一步即可
Weka使用教程
一、数据格式?WEKA中的术语。表格里的一个横行称作一个实例(Instance),相当于统计学中的一个样本,或者数据库中的一条记录。竖行称作一个属性(Attrbute),相当于统计学中的一个变量,或者数据库中的一个字段。这样一个表格,或者叫数据集,在WEKA看来,呈现了属性之间的一种关系(Relation)
WEKA存储数据的格式是ARFF(Attribute-Relation File Format)文件,这是一种ASCII文本文件。图1所示的二维表格存储在如下的ARFF文件中。这也就是WEKA自带的“weather.arff”文件,在WEKA安装目录的“data”子目录下可以找到,具体介绍:
1.关系声明?
关系名称在ARFF文件的第一个有效行来定义,格式为?
@relation
2.属性声明?
属性声明用一列以“@attribute”开头的语句表示。数据集中的每一个属性都有它对应的“@attribute”语句,来定义它的属性名称和数据类型。?
这些声明语句的顺序很重要。首先它表明了该项属性在数据部分的位置。例如,“humidity”是第三个被声明的属性,这说明数据部分那些被逗号分开的列中,第三列数据 85 90?86 96 ... 是相应的“humidity”值。其次,最后一个声明的属性被称作class属性,在分类或回归任务中,它是默认的目标变量。
属性声明的格式为?
@attribute
其中是必须以字母开头的字符串。和关系名称一样,如果这个字符串包含空格,它必须加上引号。?
WEKA支持的
numeric-------------------------数值型?
string----------------------------字符串型?
date [
其中
3.数值属性?
数值型属性可以是整数或者实数,但WEKA把它们都当作实数看待
4.分类属性?
分类属性由
例如如下的属性声明说明“outlook”属性有三种类别:“sunny”,“ overcast”和“rainy”。而数据集中每个实例对应的“outlook”值必是这三者之一。
@attribute outlook {sunny, overcast, rainy}?
如果类别名称带有空格,仍需要将之放入引号中
5.字符串属性?
字符串属性中可以包含任意的文本。这种类型的属性在文本挖掘中非常有用。?
示例:?
@ATTRIBUTE LCC string?
6.日期和时间属性?
日期和时间属性统一用“date”类型表示,它的格式是?
@attribute
其中
数据信息部分表达日期的字符串必须符合声明中规定的格式要求
7.数据信息?
数据信息中“@data”标记独占一行,剩下的是各个实例的数据。?
每个实例占一行。实例的各属性值用逗号“,”隔开。如果某个属性的值是缺失值(missing value),用问号“?”表示,且这个问号不能省略。例如:
@data?
sunny,85,85,FALSE,no?
?,78,90,?,yes?
字符串属性和分类属性的值是区分大小写的。若值中含有空格,必须被引号括起来。例如:?
@relation LCCvsLCSH?
@attribute LCC string?
@attribute LCSH string?
@data?
AG5, 'Encyclopedias and dictionaries.;Twentieth century.'?
AS262, 'Science -- Soviet Union -- History.'?
日期属性的值必须与属性声明中给定的相一致。例如:?
@RELATION Timestamps?
@ATTRIBUTE timestamp DATE "yyyy-MM-dd HH:mm:ss" ?
@DATA?
"2001-04-03 12:12:12"?
"2001-05-03 12:59:55"?
8.稀疏数据?
有的时候数据集中含有大量的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值。若要表示缺失值必须显式的用问号表示出来
9.Relational型属性?
在WEKA 3.5版中增加了一种属性类型叫做Relational,有了这种类型我们可以像关系型数据库那样处理多个维度了。但是这种类型目前还不见广泛应用,暂不作介绍。
二、数据准备?
使用WEKA作数据挖掘,面临的第一个问题往往是我们的数据不是ARFF格式的。幸好,WEKA还提供了对CSV文件的支持,而这种格式是被很多其他软件所支持的。此外,WEKA还提供了通过JDBC访问数据库的功能。
在这一节里,我们先以Excel和Matlab为例,说明如何获得CSV文件。然后我们将知道CSV文件如何转化成ARFF文件,毕竟后者才是WEKA支持得最好的文件格式。面对一个ARFF文件,我们仍有一些预处理要做,才能进行挖掘任务。
1..* -> .csv?
我们给出一个CSV文件的例子(bank-data.csv)。用UltraEdit打开它可以看到,这种格式也是一种逗号分割数据的文本文件,储存了一个二维表格。
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文件亦可。
3.“Exploer”界面?
我们应该注意到,“Exploer”还提供了很多功能,实际上可以说这是WEKA使用最多的模块
4.预处理?
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)
三、关联规则
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)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列出了它们关联程度的四项指标。?
2.命令行方式?
我们也可以利用命令行来完成挖掘任务,在“Simlpe CLI”模块中输入如下格式的命令:?
java weka.associations.Apriori options -t directory-pathbank-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:wekabank-data-final.arff
挖掘结果在上方显示,应是这个文件的样子。
四、分类与回归?
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)来选择和评估模型。若不明白交叉验证的含义可以Google一下。
2.建模结果?
OK,选上“Cross-validation”并在“Folds”框填上“10”。点“Start”按钮开始让算法生成决策树模型。很快,用文本表示的一棵决策树,以及对这个决策树的误差分析等结果出现在右边的“Classifier output”中。同时左下的“Results list”出现了一个项目显示刚才的时间和算法名称。如果换一个模型或者换个参数,重新“Start”一次,则Results list”又会多出一项
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.使用命令行(推荐)?
虽然使用图形界面查看结果和设置参数很方便,但是最直接最灵活的建模及应用的办法仍是使用命令行。?
打开“Simple CLI”模块,像上面那样使用“J48”算法的命令格式为:?
java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-pathbank.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-pathbank.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%以上的结果。
Weka各属性介绍
weka.filters.unsupervised.attribute包下的:1.Add
为数据库添加一个新的属性,新的属性将会包含所有缺失值。可选参数:
attributeIndex:属性位置,从1开始算,last是最后一个,first是第一个
attributeName:属性名称
attributeType:属性类型,一般是4选1
dateFormat:数据格式,参考ISO-8601
nominalLabels:名义标签,多个值用逗号隔开
2.AddExpression
新增一个属性,该属性由现有属性通过设定的表达式计算得出。支持+, -, *, /, ^, log, abs, cos, exp, sqrt, floor, ceil, rint, tan, sin。现有属性由a+索引值构成。
3.AddID
字面意思,添加一个ID
4.AddNoise
只对名义属性有效,依照一定比例修改值。
5.Center
将数值化属性的平均化为0。
6.ChangeDateFormat
修改数据格式
7.Copy
复制制定属性并命名为Copy Of XX
8.Discretize
简单划分的离散化处理。参数:
attributeIndices:属性范围,如1-5,first-last
bins:桶的数量
9.FirstOrder
第n个值用n+1项值和n项值的差替换
10.MathExpression
功能和AddExpression类似,不过支持的运算更多,特别是MAX和MIN的支持特别有用。所有支持运算符如下:+, -, *, /, pow, log,abs, cos, exp, sqrt, tan, sin, ceil,?floor, rint, (, ),A,MEAN, MAX, MIN, SD, COUNT, SUM, SUMSQUARED, ifelse
11.Reorder
重新排列属性,输入2-last,1可以让第一项排到最后,如果输入1,3,5的话…其他项就没有了
12.Standardize
这个和Center功能大致相同,多了一个标准化单位变异数
13.StringToNominal
将String型转化为Nominal型
14.SwapValues
交换值
然后是weka.filters.unsupervised.instance包下的
1.NonSparseToSparse
将所有输入转为稀疏格式
2.Normalize
规范化整个实例集
3.RemoveFolds
交叉验证,不支持分层,如果需要的话使用监督学习中的方法
4.RemoveRange
移除制定范围的实例,化为NaN
5.Resample
随机抽样,从现有样本产生新的小样本
6.SubsetByExpression
根据规则进行过滤,支持逻辑运算,向上取值,取绝对值等等
Weka红蓝条状图什么意思?
通常weka的数据集的最后一列表示类别,当点击类时(图上左侧class),右侧为两个柱子,分别为蓝红色,表示有两个类别,设蓝色表示类别1,红色表示类别2。当随便点击一个变量时,如点击变量16,如图:
意思是这个变量也有两类(因为两个柱子),第一个柱子蓝红色表示多部分(红色)来自类别2,少部分(蓝色)来自类别1,第二个柱子蓝红色表色多部分(蓝色)来自类别1,少部分(红色)来自类别2,高度差不多代表含量的百分比。OK
Weka打开csv文件出错?
1、属性名字要求不同,最好都改成英文的2、看看数据是不是整齐的(矩形的),有时候有空格单元格会有干扰
Weka数据预处理?
数据预处理(data preprocessing)是指在主要的处理以前对数据进行的一些处理。现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意。为了提高数据挖掘的质量产生了数据预处理技术。数据预处理有多种方法:数据清理,数据集成,数据变换,数据归约等。这些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间。数据清理是使用比较频繁的,主要有:1、空缺值处理
目前最常用的方法是使用最可能的值填充空缺值,比如可以用回归、贝叶斯形式化方法工具或判定树归纳等确定空缺值.这类方法依靠现有的数据信息来推测空缺值,使空缺值有更大的机会保持与其他属性之间的联系。
还可以用一个全局常量替换空缺值、使用属性的平均值填充空缺值或将所有元组按某些属性分类,然后用同一类中属性的平均值填充空缺值.如果空缺值很多,这些方法可能误导挖掘结果
2、噪声数据处理
噪声是一个测量变量中的随机错误或偏差,包括错误的值或偏离期望的孤立点值。常用分箱、回归、计算机检查和人工检查结合、聚类等方法进行噪音处理。
数据变化主要使用平滑聚集,数据概化,规范化等手段使数据换为较利于数据挖掘的格式。
数据归约主要是为了压缩数据量,源数据可以用来得到数据集的归约表示,它接近于保持原数据的完整性,但数据量比原数据小得多.与非归约数据相比,在归约的数据上进行挖掘,所需的时间和内存资源更少,挖掘将更有效,并产生相同或几乎相同的分析结果。常用维归约、数据压缩、数值归约等方法实现。
Weka功能特色
1、Weka系统汇集了最前沿的机器学习算法和数据预处理工具,以便用户能够快速灵活地将已有的处理方法应用于新的数据集。它为数据挖掘的整个过程提供全面的支持,包括准备输入数据、统计评估学习方案、输入数据和学习效果的可视化。Weka除了提供大量学习算法之外,还提供了适应范围很广的预处理工具,用户通过一个统一界面操作各种组件,比较不同的学习算法,找出能够解决问题的最有效的方法2、Weka系统包括处理标准数据挖掘问题的所有方法:回归、分类、聚类、关联规则以及属性选择。分析要进行处理的数据是重要的一个环节,Weka提供了很多用于数据可视化和预处理的工具。输入数据可以有两种形式,第一种是以ARFF格式为代表的文件;另一种是直接读取数据库表
3、使用Weka的方式主要有三种:第一种是将学习方案应用于某个数据集,然后分析其输出,从而更多地了解这些数据;第二种是使用已经学习到的模型对新实例进行预测;第三种是使用多种学习器,然后根据其性能表现选择其中的一种来进行预测。用户使用交互式界面菜单中选择一种学习方法,大部分学习方案都带有可调节的参数,用户可通过属性列表或对象编辑器修改参数,然后通过同一个评估模块对学习方案的性能进行评估
4、Weka系统提供的最容易使用的图形用户接口称为探索者(Explorer)。通过选择菜单和填写表单,可以调用Weka的所有功能。例如,用户用鼠标仅仅单击几个按钮,就可以完成从ARFF文件中读取数据集,然后建立决策树的工作。Weka界面十分友好,能适时地将不宜用的功能选项设置为不可选;将用户选项设计为表格方式以方便填写;当鼠标移动到界面工具上短暂停留时,会给出用法提示;对算法都给出较为合理的默认值,这样,帮助用户尽量少花精力进行配置就可取得较好的效果等
5、可以使用增量方式的算法来处理大型数据集,用户可以定制处理数据流的方式和顺序。知识流界面允许用户在屏幕上任意拖曳代表学习算法和数据源的图形构件,并以一定的方式和顺序组合在一起。也就是,按照一定顺序将代表数据源、预处理工具、学习算法、评估手段和可视化模块的各构件组合在一起,形成数据流。如果用户选取的过滤器和学习算法具有增量学习功能,那就可以实现大型数据集的增量分批读取和处理
6、Weka用于帮助用户解答实际应用分类和回归技术中遇到的一个基本问题——对于一个已知问题,哪种方法及参数值能够取得最佳效果?通过Weka提供的实验者工作环境,用户可以比较不同的学习方案。尽管探索者界面也能通过交互完成这样的功能,但通过实验者界面,用户可以让处理过程实现自动化。实验者界面更加容易使用不同参数去设置分类器和过滤器,使之运行在一组数据集中,收集性能统计数据,实现重要的测试实验
7、Weka的简单命令行(Simple CLI)界面是为不提供自己的命令行界面的操作系统提供的,该简单命令行界面用于和用户进行交互,可以直接执行Weka命令
Weka常见问题解答
一、OutOfMemoryException(内存不足例外)大多数Java虚拟机只分配一定数额的最大内存来运行Java程序,通常远低于计算机中的内存大小。但是,可以通过设置适当的选项,扩展虚拟内存。例如,可以用命令:
java-Xmx512m ...
设置最大Java堆的大小为512MB。还可以使用Xmx2g将其设置为2GB,这样就足够使用。当然,这还要看计算机的配置,设置过大的内存会影响运行性能。
二、StackOverflowError(栈溢出错误)
这是由于设置的堆栈过小造成的错误。尝试增加虚拟机的堆栈。可以使用下面的命令来增加堆栈空间:
java-Xss512k ...
该命令设置Java的最大堆栈大小为512KB。如果还是不够,请慢慢增加
三、training and test setare not compatible(训练集和测试集不兼容)
Weka假定训练集和测试集的结构应该完全一致,这意味着训练集和测试集的属性不但在数量上相同,而且在类型上也应该完全一样。对于标称属性,必须确保标签的数量和顺序是完全一致。
使用已经训练好的分类器进行预测,不需要包括任何分类属性的信息。出于速度的原因,Weka不执行任何有关数据集结构的检查,既没有将属性名称从训练空间映射到测试空间,也没有映射标签。在内部,数据集的单行表示为一个double型数组。对于数值属性,这并不构成问题,但对于其他类型的属性,如标称属性,double值表示可用标签列表的索引。标签的不同顺序会导致不同的标签却采用相同的索引表示,这样,预测就不可靠了。
解决的方法是使用批量过滤。如果第二个数据集(通常为测试集)需要与第一个数据集(通常为训练集)处理为具有相同的统计数据,那么就使用批量过滤。代码如下:
Java weka filters.unsupervised.attribute.Standardize
-b
-i train.arff
-o train_std.arff
-s test_std.arff
注:上述命令是适用于Linux/Unix的bash,反斜杠表示续行,如果采用Windows或SimpleCLI,需要去掉反斜杠,并在这一行写全命令
展开更多
数据挖掘Weka v3.8.0下载地址
- 需先下载高速下载器:
- 专用下载:
- 其它下载: