Blog信息 |
|
blog名称:IDMer (数据挖掘者) 日志总数:175 评论数量:848 留言数量:119 访问次数:2492393 建立时间:2005年6月24日 |
我的相册 |
|

|
联系方式 |
 |
|
| |
公告 |
“数据挖掘者”博客已经搬家,欢迎光临新博客网址:http://idmer.blog.sohu.com 我的新浪微博:@张磊IDMer |
网络日志 |
|
Weka入门教程(3) |
|
|
|
|
|
数据挖掘者 发表于 2007/1/18 22:35:42 |
|
|
|
转自:http://bbs.wekacn.org/viewtopic.php?t=93. 分类与回归 背景知识 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”,可以把这个树看清楚些。看完后截图或者关掉500)this.width=500'> 这里我们解释一下“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正好是正确分类的实例所占比例。这个矩阵对角线上的数字越大,说明预测得越好。 模型应用 现在我们要用生成的模型对那些待预测的数据集进行预测了,注意待预测数据集和训练用数据集各个属性的设置必须是一致的。WEKA中并没有直接提供把模型应用到带预测数据集上的方法,我们要采取间接的办法。 在“Test Opion”中选择“Supplied test set”,并且“Set”成“bank-new.arff”文件。重新“Start”一次。注意这次生成的模型没有通过交叉验证来选择,“Classifier output”给出的误差分析也没有多少意义。这也是间接作预测带来的缺陷吧。 现在,右键点击“Result list”中刚产生的那一项,选择“Visualize classifier errors”。我们不去管新窗口中的图有什么含义,点“Save”按钮,把结果保存成“bank-predicted.arff”。这个ARFF文件中就有我们需要的预测结果。在“Explorer”的“Preprocess”选项卡中打开这个新文件,可以看到多了两个属性“Instance_number”和“predictedpep”。“Instance_number”是指一个实例在原“bank-new.arff”文件中的位置,“predictedpep”就是模型预测的结果。点“Edit”按钮或者在“ArffViewer”模块中打开可以查看这个数据集的内容。比如,我们对实例0的pep预测值为“YES”,对实例4的预测值为“NO”。 使用命令行(推荐) 虽然使用图形界面查看结果和设置参数很方便,但是最直接最灵活的建模及应用的办法仍是使用命令行。 打开“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”说的是模型中的Class属性是第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%以上的结果。 可惜,命令行仍不能保存交叉验证等方式选择过的模型,也不能将它们应用到待预测数据上。要实现这一目的,须用到“KnowledgeFlow”模块的“ PredictionAppender”。 ----整理自http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify.html 4. 聚类分析 原理与实现 聚类分析中的“类”(cluster)和前面分类的“类”(class)是不同的,对cluster更加准确的翻译应该是“簇”。聚类的任务是把所有的实例分配到若干的簇,使得同一个簇的实例聚集在一个簇中心的周围,它们之间距离的比较近;而不同簇实例之间的距离比较远。对于由数值型属性刻画的实例来说,这个距离通常指欧氏距离。 现在我们对前面的“bank data”作聚类分析,使用最常见的K均值(K-means)算法。下面我们简单描述一下K均值聚类的步骤。 K均值算法首先随机的指定K个簇中心。然后:1)将每个实例分配到距它最近的簇中心,得到K个簇;2)计分别计算各簇中所有实例的均值,把它们作为各簇新的簇中心。重复1)和2),直到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”属性表示聚类算法给出的该实例所在的簇。 ----整理自 http://maya.cs.depaul.edu/~classes/ect584/WEKA/k-means.html |
|
|
|
阅读全文(55024) | 回复(22) | 编辑 | 精华 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
cookie(游客)发表评论于2007/10/21 16:14:56 |
|
|
|
老师您好,很谢谢你穷的这些说明文章
很有帮助。
但是我在入门教程(3)这部份,遇到了困难
老师在这篇中有提到,将Children属性原为数值类型改成{Yes,NO},不过如果直接去改arff档上方的属性改成{Yes,NO},会当掉无法使用。
不知道老师是用什麽方法将0,1,2,3分类成{Yes,NO},谢谢老师了。 |
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
cookie(游客)发表评论于2007/10/21 16:13:55 |
|
|
|
老师您好,很谢谢你穷的这些说明文章
很有帮助。
但是我在入门教程(3)这部份,遇到了困难
老师在这篇中有提到,将Children属性原为数值类型改成{Yes,NO},不过如果直接去改arff档上方的属性改成{Yes,NO},会当掉无法使用。
不知道老师是用什麽方法将0,1,2,3分类成{Yes,NO},谢谢老师了。
|
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
同传设备租赁(游客)发表评论于2007/10/19 17:47:18 |
|
|
|
我们的网站一直要改版,但是一直没有找到合适的设计人员,非常苦恼,请您帮助看一下可以吗。最近又请了一个朋友设计,但是设计出来的主页让人哭笑不得。我想既然改版一次就改好了,我希望通过网站改版实现这样的目标:表现公司实力、水平,网站要庄重、正规、美观,突出公司的专业水平,给客户好印象,吸引客户,实现公司业绩的提升。 |
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
abigale(游客)发表评论于2007/10/7 15:52:19 |
|
|
|
http://ma.zhifei.blog.163.com
IF YOU HAVE A LITTLE TIME,PLEASE SIT AT MY HOME! |
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
abigale(游客)发表评论于2007/10/7 15:46:23 |
|
|
|
你写的Weka帮了我的大忙!
非常感谢!
希望能成为你的学生和朋友! |
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
马(游客)发表评论于2007/9/29 12:53:22 |
|
|
|
张老师
你好。
很感谢你,从你的blog中学习到以及将要学习到很多东西。对你的奉献精神与诲人不倦的精神深表敬意。
我是来自哈尔滨医科大学的一名研究生,下面我想问一个问题,望不吝赐教。
这是一个数据挖掘中的分类问题,首先真阳性集(GSP)共446个基因,真阴性集(GSN)有3895个基因。我用到一个特征,但这个特征是无法直接用的,首先需要利用GSP 446给这个特征打一个分(称为f吧)。其实这个f指标越高,某个基因阳性的可能性越大。于是我利用这446+3895(在后面将不再提及GSN 3895,特此说明)个基因,利用这个f特征构建了决策树(C4.5)。使用10 fold cross validation进行验证。算出分类准确率acc,以及阳性的precision和recall以及F-score。这些指标都比我期望的高(简称“错指标”吧)。其实我感觉这是逻辑循环(循环论证)造成的。可是别人都不认同这是错的……
我想到的正确做法是:利用一部份的GSP(可能1/3 GSP或其他比例)去给这个特征打分f,然后利用剩下的部分构建决策树,使用10 fold cross validation进行验证计算出了分类准确率指标(简称“对指标”吧)。我认为这样的结果才是正确地评价了这个特征的分类能力。请问,我的这个想法对吗?这个方法应该称之为什么呢?
之后怎么做呢?我的目的是要对未知样本分类。这个特征通过以上证明是有很好分类能力的。我下面用于实际分类时是不是应该用所有的GSP 446构建决策树分类器呢?我想应该是吧? 那这个利用所有GSP 446构建的决策树的准确率到底是多少呢?我觉得应该用“对指标”,这是一种保守估计,比实际偏低。
我的想法还不成熟,请老师帮我分析一下,我应该如何做?
非常感谢!能否加我qq 112493828
马 |
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
马(游客)发表评论于2007/9/29 0:49:29 |
|
|
|
你好,很感谢你共享如此多的资料。我刚开始用weka做生物信息。希望和你作个朋友。请加我qq 112493828 谢谢:) |
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
|
回复:Weka入门教程(3) |
|
|
|
|
|
faye(游客)发表评论于2007/9/4 15:07:55 |
|
|
|
您好,我想问一下,在weka的聚类分析中,EM聚类怎么评价聚类的好坏,这个跟那个k-means不太一样,没有Within cluster sum of squared errors: 的值,谢谢~~~ |
|
|
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
|
|
|
|
|
|
| |