首页(175) 数据挖掘研究(27) 数据挖掘实践(53) 数据挖掘介绍(25) 杂谈(59) 管理页面   写新日志   退出   关于IDMer

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

 日志更新
 

 我的相册
 

It's me!


 最新评论
 

 留言板
 

 链接
 

 联系方式

 日志搜索





 公告
“数据挖掘者”博客已经搬家,欢迎光临新博客网址: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

阅读全文(49116) | 回复(22) | 编辑 | 精华
回复:Weka入门教程(3)
yizhibi(游客)发表评论于2012-4-13 11:24:28
老师麻烦您讲一下weka中logistic回归吧,最好举个例子。谢谢您,我的邮箱是411958153@qq.com

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
回复:Weka入门教程(3)
marry(游客)发表评论于2010-3-15 17:16:11
非常感谢能从您这学到很多知识。我对Weka研究不深,最近使用它的knowledgeflow,但不知道怎样对一个数据集采用多个算法建分类器,并使用roc曲线图形化对比分类器性能。希望老师给予指导,谢谢
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
回复:Weka入门教程(3)
ailsali(游客)发表评论于2009-5-16 10:18:42
太感谢了,我又有所启示
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
回复:Weka入门教程(3)
ss(游客)发表评论于2009-5-15 11:24:37
<a href="http://www.baidu.com">百度</a>[url=http://www.baidu.com/]百度[/url]百度
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
回复:Weka入门教程(3)
数据挖掘者发表评论于2008-9-28 14:37:14
 关于Weka的问题,请到Weka中文论坛上提问,因为我对Weka不熟悉。
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
回复:Weka入门教程(3)
fish(游客)发表评论于2008-9-11 9:52:16
  这个粗集算法是从http://forum.wekacn.org/viewtopic.php?f=6&t=556&sid=3cb76e2c61e1cbc411aebeac02787613 下载的。可是如何嵌入weka 3.5.8呢? 您可否告诉我详细的办法呀? 谢谢啦!
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
回复:Weka入门教程(3)
gyzhen(游客)发表评论于2007-11-18 22:46:32
楼主您好, 很感谢您的无私奉献, 对我的帮助很大。 我想请教楼主一个关于weka聚类的问题。在weka中的attribute是有顺序的,比如说一个instance有5个属性,取值分别为a b c d e,另外一个instance的对应的属性值为b d e a c,则这2个instance被认为是不同的。 但我现在的数据集中属性是没有顺序的, 上面的2个instance在我的数据集中是完全一样的,应该被划在同一个cluster里。也就是说只要值abcde分别出现在不同的5个位置, 这些instance就是一样的。所以在我的数据集中,如果有4个instance: a b d e c, c d c e b, d e f c b, g h f a i, 则前3个该被分为一个cluster,最后一个自成一个cluster,因为前3个instance中至少有4个值是相同的,而最后一个的值却很不同。 请问weka可以实现这样的属性无顺序的聚类吗?谢谢。  我的邮箱gyzhen1@163.com 
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
回复:Weka入门教程(3)
jessie(游客)发表评论于2007-11-7 15:47:52
您好! 我想问一下:用select attribute选择属性时,选择好一种算法后,选择cross-validation,这时有一个参数是seed,其值默认是1,它的值对结果的影响大吗?
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
» 1 2 3 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)


站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144271069 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号