初试weka数据挖掘

        偶然间在网上看到了一篇关于weka好的博文,就记录了下来……

            weka下载地址为http://www.cs.waikato.ac.nz/ml/weka/downloading.html    

        读者有时候看到两个图片并列,其中一个是原文的,另一个是我实验时打开的。

一.引入

        数据挖掘、机器学习这些字眼,在一些人看来,是门槛很高的东西。诚然,如果做算法实现甚至算法优化,确实需要很多背景知识。但事实是,绝大多数数据挖掘工程师不需要去做算法层面的东西。他们的精力,集中在特征提取、算法选择和参数调优上。那么,一个可以方便地提供这些功能的工具,便是十分必要的了。而weka,便是数据挖掘工具中的佼佼者。Weka的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),是一款免费的,非商业化的,基于Java环境下开源的机器学习以及数据挖掘软件,它和它的源代码可在其官方网站下载。有趣的是,该软件的缩写weka也是New Zealand独有的一种鸟名,而Weka的主要开发者同时恰好来自新西兰的the University of Waikato。

        下面就是weka鸟,咱看下其风采。


        Weka提供的功能有数据处理,特征选择、分类、回归、聚类、关联规则、可视化等。本文将对Weka的使用做一个简单的介绍,并通过简单的示例,使大家了解使用weka的流程。本文将仅对图形界面的操作做介绍,不涉及命令行和代码层面的东西。

 

二.工具简介

        窗口右侧共有4个应用,分别是

  1. Explorer:用来进行数据实验、挖掘的环境,它提供了分类,聚类,关联规则,特征选择,数据可视化的功能。
  2. Experimentor:用来进行实验,对不同学习方案进行数据测试的环境。
  3. KnowledgeFlow:功能和Explorer差不多,不过提供的接口不同,用户可以使用拖拽的方式去建立实验方案。另外,它支持增量学习。
  4. SimpleCLI:简单的命令行界面。

        Weka支持很多种文件格式,包括arff、xrff、csv,甚至有libsvm的格式。其中,arff是最常用的格式,我们在这里仅介绍这一种。
Arff全称是Attribute-Relation File Format,以下是一个arff格式的文件的例子。

%
%  Arff file example
%
@relation ‘labor-neg-data’
@attribute ‘duration’ real
@attribute ‘wage-increase-first-year’ real
@attribute ‘wage-increase-second-year’ real
@attribute ‘wage-increase-third-year’ real
@attribute ‘cost-of-living-adjustment’ {‘none’,'tcf’,'tc’}
@attribute ‘working-hours’ real
@attribute ‘pension’ {‘none’,'ret_allw’,'empl_contr’}
@attribute ’standby-pay’ real
@attribute ’shift-differential’ real
@attribute ‘education-allowance’ {‘yes’,'no’}
@attribute ’statutory-holidays’ real
@attribute ‘vacation’ {‘below_average’,'average’,'generous’}
@attribute ‘longterm-disability-assistance’ {‘yes’,'no’}
@attribute ‘contribution-to-dental-plan’ {‘none’,'half’,'full’}
@attribute ‘bereavement-assistance’ {‘yes’,'no’}
@attribute ‘contribution-to-health-plan’ {‘none’,'half’,'full’}
@attribute ‘class’ {‘bad’,'good’}
@data
1,5,?,?,?,40,?,?,2,?,11,’average’,?,?,’yes’,?,’good’
2,4.5,5.8,?,?,35,’ret_allw’,?,?,’yes’,11,’below_average’,?,’full’,?,’full’,'good’
?,?,?,?,?,38,’empl_contr’,?,5,?,11,’generous’,'yes’,'half’,'yes’,'half’,'good’
3,3.7,4,5,’tc’,?,?,?,?,’yes’,?,?,?,?,’yes’,?,’good’
3,4.5,4.5,5,?,40,?,?,?,?,12,’average’,?,’half’,'yes’,'half’,'good’
2,2,2.5,?,?,35,?,?,6,’yes’,12,’average’,?,?,?,?,’good’
3,4,5,5,’tc’,?,’empl_contr’,?,?,?,12,’generous’,'yes’,'none’,'yes’,'half’,'good’
3,6.9,4.8,2.3,?,40,?,?,3,?,12,’below_average’,?,?,?,?,’good’
2,3,7,?,?,38,?,12,25,’yes’,11,’below_average’,'yes’,'half’,'yes’,?,’good’
1,5.7,?,?,’none’,40,’empl_contr’,?,4,?,11,’generous’,'yes’,'full’,?,?,’good’
3,3.5,4,4.6,’none’,36,?,?,3,?,13,’generous’,?,?,’yes’,'full’,'good’
2,6.4,6.4,?,?,38,?,?,4,?,15,?,?,’full’,?,?,’good’
2,3.5,4,?,’none’,40,?,?,2,’no’,10,’below_average’,'no’,'half’,?,’half’,'bad’

        这个例子来自于weka安装目录data文件下的labor.arff文件,来源于加拿大劳资谈判的案例,它根据工人的个人信息,来预测劳资谈判的最终结果。文件中,“%”开头的是注释。剩余的可以分为两大部分,头信息(header information)和数据信息(data information)。
头信息中,“@relation”开头的行代表关系名称,在整个文件的第一行(除去注释)。格式是@relation <relation-name>“@attribute”开头的代表特征,格式是@attribute <attribute-name> <datatype>attribute-name是特征的名称,后面是数据类型,常用数据类型有以下几种

  • numeric,数字类型,包括integer(整数)和real(实数)
  • nominal,可以认为是枚举类型,即特征值是有限的集合,可以是字符串或数字。
  • string,字符串类型,值可以是任意的字符串。

        从“@data”开始,是实际的数据部分。每一行代表一个实例,可以认为是一个特征向量。各个特征的顺序与头信息中的attribute逐个应,特征值之间用逗号分割。在有监督分类中,最后一列是标注的结果。某些特征的数值如果是缺失的,可以用“?”代替。

       使用weka进行数据挖掘的流程如下图:

                         

        其中,在weka内进行的是数据预处理,训练,验证这三个步骤。
         1)数据预处理:数据预处理包括特征选择,特征值处理(比如归一化),样本选择等操作。
         2)训练:训练包括算法选择,参数调整,模型训练。
         3)验证:对模型结果进行验证。
        本文剩余部分将以这个流程为主线,以分类为示例,介绍使用weka进行数据挖掘的步骤。

        发现我的界面和这个不一样的,不过为了演示需要,未作改动,知道了因为区域4选择的不同在区域5显示的便不同。

 

三.数据预处理

        数据预处理:打开Explorer界面,点“open file”,在weka安装目录下,选择data目录里的“labor.arff”文件,将会看到如下界面。我们将整个区域分为7部分,下面将分别介绍每部分的功能。

        区域1共6个选项卡,用来选择不同的数据挖掘功能面板,从左到右依次是Preprocess(预处理)、Classify(分类)、Cluster(聚类)、Associate(关联规则)、Select attribute(特征选择)和Visualize(可视化)。
        区域2提供了打开、保存,编辑文件的功能。打开文件不仅仅可以直接从本地选择,还可以使用url和db来做数据源。Generate按钮提供了数据生成的功能,weka提供了几种生成数据的方法。点开Edit,将看到如下界面


        在这个界面,可以看到各行各列对应的值,右键每一列的名字(先点击列名),可以看到一些编辑数据的功能,这些功能还是比较实用的。

        区域3名为Filter,有些人可能会联想到特征选择里面的Filter方法,事实上,Filter针对特征(attribute)和样本(instance)提供了大量的操作方法,功能十分强大。
        区域4,可以看到当前的特征、样本信息,并提供了特征选择和删除的功能。在区域4用鼠标选择单个特征后,区域5将显示该特征的信息。包括最小值、最大值、期望和标准差。
        区域6提供了可视化功能,选择特征后,该区域将显示特征值在各个区间的分布情况,不同的类别标签以不同的颜色显示。
        区域7是状态栏,没有任务时,小鸟是坐着的,任务运行时,小鸟会站起来左右摇摆。如果小鸟站着但不转动,表示任务出了问题。

 

四.Filters实例

        点开Filter下面的choose按钮,可以看到如下界面

                  
        Filters可分为两大类,supervised(监督、管理)和unsupervised。supervised下的方法需要类别标签,而unsupervised则不需要。attribute类别表示对特征做筛选,instance表示对样本做选择。

         Case 1:特征值归一化
        该项功能与类别无关,且是针对attribute的,我们选择unsupervised -> attribute下面的Normalize。点开Normalize所在的区域(在所选择的filter上点击即可),将看到如下界面。左边的窗口,有几个参数可以选择。点击more,将出现右边的窗口,该窗口详细介绍了此功能。

          

         使用默认参数,点击ok,回到主窗口。在区域4选好将要归一化的特征,可以是一个或多个,然后点击apply。在可视化区域中,我们可以看到特征值从1到3被归一到了0到1之间(看区域5的最大最小值)。

           

        Case 2: 分类器特征筛选
        该功能与类别相关,选择supervised -> attribute下面的AttributeSelection。该界面有两个选项,evaluator是评价特征集合有效性的方法,search是特征集合搜索的方法。在这里,我们使用InformationGainAttributeEval作为evaluator,使用Ranker作为search,表示我们将根据特征的信息增益值对特征做排序。Ranker中可以设置阈值,低于这个阈值的特征将被扔掉。

            

        点击apply,可以看到在区域4里特征被重新排序,低于阈值的已被删掉。
        Case 3:选择分类器错分的样本
        选择unsupervised -> instance下面的RemoveMisclassified,可以看到6个参数,classIndex用来设置类别标签,classifier用来选择分类器,这里我们选择J48决策树,invert我们选择true,这样保留的是错分样本,numFolds用来设置交叉验证的参数。设置好参数之后,点击apply,可以看到样本的数量从57减少到了7。

           

五.分类

        在Explorer中,打开classify选项卡,整个界面被分成几个区域。分别是
        1)Classifier:点击choose按钮,可以选择weka提供的分类器。常用的分类器有
              a)bayes下的Naïve Bayes(朴素贝叶斯)和BayesNet(贝叶斯信念网络)。
              b)functions下的LibLinear、LibSVM(这两个需要安装扩展包)、Logistic Regression、Linear Regression。
              c)lazy下的IB1(1-NN)和IBK(KNN)。
              d)meta下的很多boosting和bagging分类器,比如AdaBoostM1。
              e)trees下的J48(weka版的C4.5)、RandomForest。
         2)Test options
        评价模型效果的方法,有四个选项。
              a)Use training set:使用训练集,即训练集和测试集使用同一份数据,一般不使用这种方法。
              b)Supplied test set:设置测试集,可以使用本地文件或者url,测试文件的格式需要跟训练文件格式一致。
              c)Cross-validation:交叉验证,很常见的验证方法。N-folds cross-validation是指,将训练集分为N份,使用N-1份做训练,使用1份做测试,如此循环N次,最后整体计算结果。
             d)Percentage split:按照一定比例,将训练集分为两份,一份做训练,一份做测试。在这些验证方法的下面,有一个More options选项,可以设置一些模型输出,模型验证的参数。
        3)Result list
        这个区域保存分类实验的历史,右键点击记录,可以看到很多选项。常用的有保存或加载模型以及可视化的一些选项。
        4)Classifier output
       分类器的输出结果,默认的输出选项有Run information,该项给出了特征、样本及模型验证的一些概要信息;Classifier model,给出的是模型的一些参数,不同的分类器给出的信息不同。最下面是模型验证的结果,给出了   一些常用的一些验证标准的结果,比如准确率(Precision),召回率(Recall),真阳性率(True positive rate),假阳性率(False positive rate),F值(F-Measure),Roc面积(Roc Area)等。Confusion Matrix给出了测试样本的分类情况,通过它,可以很方便地看出正确分类或错误分类的某一类样本的数量。

        Case 1:使用J48对labor文件做分类
            a.打开labor.arff文件,切换到classify面板。
            b.选择trees->J48分类器,使用默认参数。
            c.Test options选择默认的十折交叉验证,点开More options,勾选Output predictions。
            d.点击start按钮,启动实验。
            e.在右侧的Classifier output里面,我们看到了实验的结果。

          

        上图给出了实验用的分类器以及具体参数,实验名称,样本数量,特征数量以及所用特征,测试模式。

              

        上图给出了生成的决策树,以及叶子节点数、树的节点数、模型训练时间。如果觉得这样不直观,可以在Result list里面右键点击刚刚进行的实验,点击Visualize Tree,可以看到图形界面的决策树,十分直观。
          

        再往下是预测结果,可以看到每个样本的实际分类,预测分类,是否错分,预测概率这些信息。

          
        最下面是验证结果,整体的accuracy是73.68%,bad类准确率是60.9%,召回率70.0%,good类准确率是82.4%,召回率75.7%。
         
        5)  可视化
        打开Explorer的Visualize面板,可以看到最上面是一个二维的图形矩阵,该矩阵的行和列均为所有的特征(包括类别标签),第i行第j列表示特征i和特征j在二维平面上的分布情况。图形上的每个点表示一个样本,不同的类别使用不同的颜色标识。下面有几个选项,PlotSize可以调整图形的大小,PointSize可以调整样本点的大小,Jitter可以调整点之间的距离,有些时候点过于集中,可以通过调整Jitter将它们分散开。

         

        上图是duration和class两个特征的图形,可以看出,duration并不是一个好特征,在各个特征值区间,good和bad的分布差不多。
单击某个区域的图形,会弹出另外一个窗口,这个窗口给出的也是某两个特征之间分布的图形,不同的是,在这里,通过点击样本点,可以弹出样本的详细信息。可视化还可以用来查看误分的样本,这是非常实用的一个功能。分类结束后,在Result list里右键点击分类的记录,选择Visualize classify errors,会弹出如下窗口。

         

        这个窗口里面,十字表示分类正确的样本,方块表示分类错误的样本,X轴为实际类别,Y轴为预测类别,蓝色为实际的bad,红色为实际的good。这样,蓝色方块就表示实际为bad,但为误分为good的样本,红色方块表示实际为good,被误分为bad的样本。单击这些点,便可以看到该样本的各个特征值,分析为什么这个样本被误分了。
        再介绍一个比较实用的功能,右键点击Result list里的记录,选择Visualize threshold curve,然后选好类别(bad 还是good),可以看到如下图形。

           

         该图给出的是分类置信度在不同阈值下,分类效果评价标准的对比情况。上图给出的是假阳性比率和真阳性比率在不同阈值下的对比,其实给出的就是ROC曲线。我们可以通过选择颜色,方便地观察不同评价标准的分布情况。如果X轴和Y轴选择的是准确率和召回率,那我们可以通过这个图,在这两个值之间做trade-off,选择一个合适的阈值。其它的一些可视化功能,不再一一介绍。

 

六.小结
        本文仅仅针对weka的Explorer界面的某些功能做了介绍,Explorer其它的功能,比如聚类、关联规则、特征选择,以及Experimentor和KnowledgeFlow界面使用,可以参考weka的官方文档。另外,weka支持扩展包,可以很方便地把liblinear、libsvm这样的开源工具放进来。在Linux下面,可以使用weka的命令行进行实验,具体的使用方法,也请参考weka官方文档。有这样一款开源、免费、强大的数据挖掘工具,你还在等什么呢?没有用过weka的数据挖掘工程师们,赶紧行动吧。

        参考来源:百度搜索研发部,原文有删改。

时间: 2024-10-28 10:12:06

初试weka数据挖掘的相关文章

用WEKA进行数据挖掘,第1部分 简介和回归

简介 什么是 数据挖掘?您会不时地问自己这个问题,因为这个主题 越来越得到技术界的关注.您可能听说过像 Google 和 Yahoo! 这样的公司都在 生成有关其所有用户的数十亿的数据点,您不禁疑惑,"它们要所有这些 信息干什么?"您可能还会惊奇地发现 Walmart 是最为先进的进行数据挖 掘并将结果应用于业务的公司之一.现在世界上几乎所有的公司都在使用数据挖 掘,并且目前尚未使用数据挖掘的公司在不久的将来就会发现自己处于极大的劣 势. 那么,您如何能让您和您的公司跟上数据挖掘的大潮

基于 J2EE 的企业应用系统 - 工具一览表

j2ee 基于 J2EE 的企业应用系统 - 工具一览表 应用服务器 -------------------------------- Jetty - http://jetty.mortbay.org/jetty/index.html HTTP 服务器和 Java Serverlet 容器 JOTM - http://www.objectweb.org/jotm/index.html 事务管理服务器 Apache - http://www.apache.org/ 这些东西就不摆了,HTTP, X

用WEKA进行数据挖掘,第2部分 分类和群集

简介 在 用 WEKA 进行数据挖掘,第 1 部分:简介和回归,我介绍了数据挖掘的 概念以及免费的开源软件 Waikato Environment for Knowledge Analysis (WEKA),利用它可以挖掘数据来获得趋势和模式.我还谈到了第一种数据挖掘 的方法 - 回归 - 使用它可以根据一组给定的输入值预测数字值.这种分析方 法非常容易进行,而且也是功能最不强大的一种数据挖掘方法,但是通过它,读 者对 WEKA 有了很好的了解,并且它还提供了一个很好的例子,展示了原始数据 是如

用WEKA进行数据挖掘,第3部分 最近邻和服务器端库

简介 在这个 "用 WEKA 进行数据挖掘" 系列之前的两篇文章中,我介绍了数据 挖掘的概念.如果您还未曾阅读过 用 WEKA 进行数据挖掘,第 1 部分:简介和 回归 和 用 WEKA 进行数据挖掘,第 2 部分:分类和群集,那么请先阅读这两 个部分,因为二者涵盖了一些在继续之前必须了解的关键概念.而且更重要的是 ,在这两个部分中我谈及了数据挖掘中常用的三种技术,它们可以将难以理解的 无用数据转变为有意义的规则和趋势.第一种技术是回归,用来基于其他的示例 数据预测一个数值输出(比如房

数据挖掘系列(4)使用weka做关联规则挖掘

前面几篇介绍了关联规则的一些基本概念和两个基本算法,但实际在商业应用中,写算法反而比较 少,理解数据,把握数据,利用工具才是重要的,前面的基础篇是对算法的理解,这篇将介绍开源利 用数据挖掘工具weka进行管理规则挖掘. weka数据集格式arff arff标准数据集简介 weka的数据文件后缀为arff(Attribute-Relation File Format,即属性关系文件格式),arff文 件分为注释.关系名.属性名.数据域几大部分,注释用百分号开头%,关系名用@relation申明,属

数据挖掘-weka学习AdditiveRegression算法

问题描述 weka学习AdditiveRegression算法 AdditiveRegression算法(GBDT在weka中的基本实现) 能不能给我一个 拥有使用这个算法对数据进行分类的截图 有正确率的那种 我最近才接触WEKA和数据挖掘 对这个算法不是很了解 网上大牛们博客上的中文内容我也基本都浏览完了 但对实现还是有些搞不定 我用的weka对数据进行分析 如果有经常使用这个平台的大神 还望帮帮忙 感激不尽 解决方案 Weka学习三(ensemble算法)Weka算法介绍[weka 中的算法

数据挖掘-weka中 additiveRegression分类方法怎么使用?为何我的总是灰色的

问题描述 weka中 additiveRegression分类方法怎么使用?为何我的总是灰色的 还是数据集有问题吗?对于使用additiveRegression分类的数据有什么基本要求吗 我小白一只 刚接触数据挖掘 望大神指教!图片说明 解决方案 additiveRegression方法只支持numeric类型的分类

Weka实践掌握开源数据挖掘工具的使用

为了满足这种需求,数据挖掘技术的得到了长足的发展,而分类在数据挖掘中是一项非常重要的任务,目前在商业上应用最多.本文主要侧重数据挖掘中分类算法的效果的对比,通过简单的实验(采用开源的数据挖掘工具 -Weka)来验证不同的分类算法的效果,帮助数据挖掘新手认识不同的分类算法的特点,并且掌握开源数据挖掘工具的使用. 分类算法是解决分类问题的方法,是数据挖掘.机器学习和http://www.aliyun.com/zixun/aggregation/12097.html">模式识别中一个重要的研究领

使用Weka和IBM BLU纵列数据库开发一个数据挖掘应用程序

本文将了解如何使用 Weka 统计分析工具和 IBM BLU 纵列数据库来开发一个数据挖掘应用程序.Codename: BlueMix 是 一款 beta 级产品,随着我们不断让其功能更加完善和更易于使用,它也将不断改进.我们会竭尽全力保持本文最新,但并不总是完全跟得上现状.感谢大家的理解! 作为一家无线服务供应商公司的客户分析小组中的数据科学家,我们想利用客户数据来预测客户流失情况.对于电信行业来说,客户保留是一个重大挑战,在该行业中,客户年度流失率高达 40%.如果我们可以预测哪些客户存在流