
简介这份 WEKA 操作入门文档面向数据挖掘与机器学习初学者帮助读者快速认识这一开放的数据挖掘工作平台理解其在数据预处理、分类、回归、聚类、关联规则和可视化等任务中的基本用法。压缩包共 1 个 doc 文件约 172KB篇幅精炼适合作为入门阅读与术语速查材料。内容围绕 WEKA 的数据组织方式展开讲解实例、属性、关系等核心术语并说明 ARFF 文件的头信息、relation 与 attribute 声明、data 数据区结构同时涉及从 CSV 等常见格式准备数据的思路。文档还简要介绍 WEKA 的开放接口、算法集成方式、ARFF 类文件转换中的注意事项与发展背景便于读者建立从数据格式到功能模块、再到实际操作入口的完整认知。目前已有 792 人学习适合希望低成本掌握 WEKA 基本概念、数据准备方法和操作入口的读者。1. 先破除一个误会你搜的「weak 操作入门」多半是 WEKA十个人里有八个第一次都拼错在搜索框里敲下「weak 操作入门 数据挖掘」然后一脸茫然地发现结果全指向另一个词——WEKA。它的名字读起来像一个单词其实是几个英文单词首字母拼出来的缩写恰好又是一种鸟的名字所以软件图标是一只蹦跶的小鸟。你可以把它想成一个「数据挖掘的中央厨房」菜数据你自己带锅碗瓢盆和调料它全给你备好了分类、回归、聚类、关联规则、还有画图看结果点几下就能出一盘菜不用先从磨刀学起写代码。它最初出自高校的研究项目后来开放给非商业的研究和教学使用界面是开放的也能把自己的算法塞进去。它最适合三类人统计课上要交作业但不会编程的学生、手里有一份表格想快速验证个想法的新人、以及刚接触数据挖掘、想先看清「整个流程长什么样」的零基础选手。下面按「它是什么 → 为什么值得学 → 第一个例子怎么跑」的顺序带你从零走一遍。2. 为什么零基础也值得学 WEKA它替你省掉的是「搭环境写代码」这段路新手最容易死在起跑线上而不是死在算法上。想用代码做一次数据挖掘你得先装解释器、装几个库、搞清版本兼容、再写几十行读文件、分列、训练的代码中途任何一个报错都够劝退半天。WEKA 把这条路上最磨人的一段直接砍掉了它自带一整套算法和一个图形界面你只要把数据整理成它认识的格式剩下的点按钮就行。这不是说它比写代码强而是说它把「第一次跑通」的门槛压到了很低让你先看见结果再回头理解原理顺序反过来了反而学得下去。2.1 一次数据挖掘到底要做哪几步先把流程说清楚你才知道 WEKA 的按钮对应的是哪一步。一次完整的数据挖掘通常是这么几段先想清楚要回答什么问题比如「哪些客户更可能购买某个产品」然后准备数据把散在表格、数据库里的字段凑到一张表上接着是预处理删掉没用的列、处理缺失值、把数值切成区间、把文本转成类别再往后是建模选一个算法让机器从数据里找规律最后是评估看这个规律靠不靠谱以及解释结果。现实里最耗时间的不是建模是中间那两步预处理很多人八成精力都花在洗数据上。WEKA 的设计恰好把这段做成了可视化的左边列出所有属性勾一下就能删选个过滤器就能批量转换改完立刻能在右边的摘要和直方图里看到变化。对零基础的人来说这种「改一下、马上看到」的反馈特别重要因为它把抽象的数据变换变成了看得见的动作你不用先在脑子里模拟一遍代码跑出来会怎样。2.2 和写代码调库相比WEKA 的位置在哪有人会问现在都用代码调库了学这个图形工具还有意义吗。我的看法是它俩解决的不是同一个问题。写代码调库的优势是灵活任何自定义的变换、任何新算法、任何工程化部署都能做代价是你得先有编程基础而且每换一个任务都要重写一遍流程。WEKA 的优势是「流程固定、界面固定、算法齐全」你把数据丢进去同一个预处理流程可以立刻换三四个算法对比结果这在教学演示和快速验证阶段非常省事。更实际的一点是它帮你建立的是「流程感」而不是「语法感」。你在界面上亲手做过一遍删列、离散化、选算法、看混淆矩阵这套动作在脑子里是有画面的。等以后转去写代码你会知道自己每一步在干什么、该期待什么样的输出而不是对着教程抄一遍、跑通了也不知道为什么。我带过的新人里先玩两周图形界面再学代码的普遍比一上来就啃代码的更少迷路。2.3 装完第一次打开先认三个入口WEKA 是 Java 写的所以入门第一件事是确认机器上有 Java 运行环境没有的话先装上这一步做完再谈别的。启动之后会出来一个主界面下方一排按钮通往不同的模块新手只需要先认识三个。第一个是 Explorer中文可以理解成「探索器」它是使用频率最高的模块预处理、分类、聚类、关联规则、可视化几乎都在这一个窗口里完成前面说的八个区域就是它的界面划分。第二个是 Simple CLI一个纯命令行的窗口只能在下方的输入框里打字上面那块是只读的输出区它的用处是执行那些界面上不好点的命令比如批量格式转换。第三个是 Arff Viewer专门用来看 ARFF 文件长什么样可以打开一个 CSV 浏览之后再另存成 ARFF。提示刚开始别贪多把 Explorer 用熟就够你走完一整个入门流程了另外两个等到需要转格式的时候再回来看。3. 先搞懂数据长什么样ARFF 文件其实只有两大块很多人卡在这一步不是因为难是因为一打开文件看见一堆 符号就发怵。其实你可以把它当成一张 Excel 表格加了几行说明。WEKA 处理的数据集就是一张二维表横着一行是一条记录竖着一列是一个字段跟你平时用的表格没有本质区别只是它要求你用文本的方式把「这张表有几列、每列叫什么、每列是什么类型」提前写清楚。写清楚了软件才知道该怎么读写不清楚后面全是报错。3.1 把数据集看成一张 Excel 表实例、属性、关系WEKA 有三个术语听起来唬人翻译过来特别朴素。一个横行叫一个实例Instance就是统计学里的一个样本、数据库里的一条记录比如一个客户的资料。一个竖行叫一个属性Attribute就是统计学里的一个变量、数据库里的一个字段比如年龄、收入。整张表在 WEKA 眼里呈现的是属性之间的一种关系Relation所以这张表本身有个名字叫关系名。拿一份天气数据举例14 行记录、5 列字段关系名就叫 weather。这 14 行就是 14 个实例5 列就是 5 个属性其中前 4 列描述天气状况最后一列记录「这天有没有出去玩」。你完全可以把它想成一张普通的表行是样本列是特征最后一列是你想预测的答案。把这个画面记住后面看到任何术语都能对上号。3.2 拆开一个 ARFF 文件头信息 数据信息WEKA 存数据的格式叫 ARFF全称是 Attribute-Relation File Format本质是一个纯 ASCII 文本文件用记事本就能打开。以 % 开头的行是注释软件会直接忽略。去掉注释之后整个文件只剩两部分头信息负责声明关系名和每个属性数据信息就是一行行的具体数值。分界线是 data 这个标记它下面开始全是数据。% 以百分号开头的行是注释WEKA 读取时会跳过 relation weather attribute outlook {sunny, overcast, rainy} attribute temperature real attribute humidity real attribute windy {TRUE, FALSE} attribute play {yes, no} data sunny,85,85,FALSE,no sunny,80,90,TRUE,no overcast,83,86,FALSE,yes rainy,70,96,FALSE,yes rainy,68,80,FALSE,yes rainy,65,70,TRUE,no overcast,64,65,TRUE,yes sunny,72,95,FALSE,no sunny,69,70,FALSE,yes rainy,75,80,FALSE,yes sunny,75,70,TRUE,yes overcast,72,90,TRUE,yes overcast,81,75,FALSE,yes rainy,71,91,TRUE,no这段文件分成三段看就清楚了。第一行 relation weather 是关系声明给整张表起个名字名字里如果带空格必须用英文单引号或双引号括起来。中间五行 attribute 是属性声明一行管一列写清这一列叫什么、是什么类型。data 之后是数据区每行一条记录字段之间用英文逗号隔开顺序必须和上面声明的顺序一模一样。这里有个特别容易被忽略的点属性声明的顺序决定了数据列的位置。humidity 是第三个被声明的属性那数据区里每行被逗号分开的第三个数85、90、86、96 这些就是 humidity 的值。你如果把两条 attribute 调换位置却没动数据整张表就错位了而且软件不会报错只会安安静静地给你一个错的结果这种坑最难查。3.3 四种数据类型够用就行WEKA 支持的数据类型有四种入门阶段你只要记住它们的写法和适用场景不用深究实现。类型写法示例说明常见用途数值型attribute age real连续的数值年龄、收入、温度分类型attribute size {S,M,L}有限个取值用大括号列出性别、地区、是否购买字符串型attribute name string任意文本备注、名称一般不参与建模日期时间型attribute day date yyyy-MM-dd需要指定解析格式时间序列类任务数值型和分类型是绝对主力你把这两类用明白八成的入门任务都能做。分类型的花括号里必须把所有可能出现的取值穷举出来数据区里出现了花括号外的值读取就会失败这一点后面避坑那章还会提。字符串型适合放一些不参与计算的说明性字段真拿它当特征很多算法是不认的。日期时间型稍微特殊一点统一用 date 表示后面可以跟一个格式串来规定怎么解析和显示不写的话默认用国际标准的日期时间组合格式形如 2024-05-01T09:30:00注意中间那个大写 T 不能少、不能换成空格。数据区里的日期字符串必须严格符合声明的格式差一个字符都可能读不进去。3.4 为什么最后一列那么关键新手最容易忽略的规则是最后一个被声明的属性会被当作 class 属性也就是分类或回归任务里默认的目标变量。换句话说你想让机器预测哪一列就得把那一列放在最后。上面那份天气数据里play 是最后一个声明的所以它自动成为要预测的目标前面的天气状况是依据。这条规则解释了为什么很多人第一次点分类结果发现软件要预测的东西完全不是自己想的那个。不是你操作错了是列的顺序不对。我的建议是整理数据的时候就养成习惯特征放前面答案放最后中间不要插 ID 这类没用的列能省掉后面一堆麻烦。4. 第一个能跑通的例子从一份 CSV 到一次预处理理论说到这里就够了接下来动手。这一章的目标很具体把一份普通的 CSV 表格变成 WEKA 认识的 ARFF然后在界面里完成两个最常见的预处理动作——删掉一列没用的 ID把两列数值改成区间。做完这两步你就算真正入门了因为后面所有的分类、聚类都是在这个基础上继续点下去。4.1 导出 CSV 时的三个细节你手上的数据多半不是 ARFF可能是 Excel 表也可能是别的软件算出来的矩阵。WEKA 直接支持 CSV而这种格式几乎所有表格软件都能导出所以转换的第一步是先把数据存成 CSV。Excel 里操作很简单打开文件切到需要的那张工作表另存为 CSV 类型中途弹出「只保存当前工作表」之类的提示点确定、点是忽略掉就行。要注意 Excel 一个文件可以有多张工作表而 CSV 只能装一张表所以每张表都得单独存一个文件。从计算软件导出的矩阵要格外小心很多导出的 CSV 是不带表头的只有数据没有列名。而 WEKA 读 CSV 时会把第一行当作属性名你给它一份没有表头的文件它就会把第一行的数值当成列名后面整张表全乱。遇到这种情况用文本编辑器打开文件手工在最上面补一行属性名名字之间同样用逗号隔开属性名的个数必须和数据列数一致多一个少一个都会错位。第三个细节是编码和分隔符。文件里有中文的时候确认存的是通用编码别存成某些软件私有的格式分隔符必须是英文逗号中文逗号、分号、制表符都会让软件认不出列。这些看起来是小事但新手翻车十次里有三次是这类问题。4.2 把 CSV 转成 ARFF命令行和界面两条路转换有两条路命令行最快界面最直观建议两条都试一遍加深印象。命令行那条启动主程序后点进 Simple CLI 模块在新窗口最下方的输入框里敲命令上面那块区域是只读的只能看输出不能写字。# CSVLoader 是 WEKA 自带的读取器负责把 CSV 解析成数据集 # 大于号把解析结果输出到后面的文件里不会覆盖原始 CSV java weka.core.converters.CSVLoader bank-data.csv bank-data.arff这条命令拆开看就三块java 是运行环境中间那串是 WEKA 里负责读 CSV 的类最后是用重定向把结果写进一个新文件。执行完你在当前目录下就能找到 bank-data.arff用记事本打开看看会发现软件已经自动帮你写好了 relation、attribute 和 data 三段属性类型也替你猜好了。猜得准不准另说但至少格式是对的。界面那条路更适合新手理解发生了什么进 Explorer 模块用上方的打开按钮选一个 CSV 文件浏览一遍确认数据没读错然后直接另存为 ARFF。Arff Viewer 模块也能干同样的事打开 CSV 看一眼再另存。两条路的区别在于命令行适合一次转一批文件界面适合边看边确认。注意转换完之后别急着往下做一定用文本编辑器打开生成的 ARFF 扫一眼重点看属性数量和列名对不对这一步能拦住后面八成的莫名其妙的问题。4.3 Explorer 的八个区域先认四个打开 Explorer界面元素看着多其实按功能切成八块新手先认其中四块就够用剩下的用到了再看。区域位置作用入门阶段要不要用1顶部选项卡切换预处理、分类、聚类、关联规则等不同任务面板要目前只用预处理2选项卡下方按钮打开、保存、编辑数据以及撤销要保存和撤销最常用3Choose 过滤器选择筛选器对数据做变换要预处理的主力4右上方概况显示关系名、实例数、属性数要一眼确认数据规模5左侧属性列表列出所有属性可勾选删除要删列就在这6右中属性摘要显示选中属性的类型、缺失情况、分布要检查数据质量7右下方直方图选中属性的分布图要直观看出异常8底部状态栏看日志、判断有没有报错要出错先看这里区域 1 的选项卡管的是「做哪类任务」这一章只用预处理那个。区域 2 那几个按钮里打开和保存不用说重点记住撤销按钮——你在界面上做的很多操作是直接改内存里的数据集撤销能帮你退回去但它只能退一步所以养成频繁保存的习惯比什么都强。区域 4 会告诉你这份数据有多少条记录、多少个属性拿到一份新数据先看这个数字能立刻发现是不是读错了行。区域 5 是属性列表属性名左边标着序号这个序号后面选过滤器要填。勾选某个属性再点删除那一列就没了删错了用撤销找回。在区域 5 里点中某个属性区域 6 就会显示它的摘要数值属性和分类属性的摘要长得不一样数值的会给出最小值、最大值、平均值、标准差分类的会给出每个取值的数量和占比。区域 7 是直方图如果最后一列是分类变量每个柱子还会按类别比例染成不同颜色一眼就能看出各类是否均衡。区域 8 的状态栏平时不起眼但它右边的鸟图标在动说明软件正在算东西卡住的时候先看这里右键点击还能做内存回收数据大的时候偶尔能救急。4.4 动手删掉 ID把两列数值改成区间现在拿一份客户数据练手。这份表里有客户编号、年龄、性别、地区、收入、婚姻状况、子女数、是否有车、是否有储蓄账户、是否有活期账户、是否有房贷最后一列记录这位客户在上次推广后有没有购买某个产品取值是是或否。共有十来列最后一列正好是我们要预测的目标位置没问题。第一步删掉客户编号。这种唯一标识对预测毫无意义留着只会干扰算法甚至会带来麻烦。在区域 5 里勾上编号那一列点删除然后立刻保存一次。保存完用文本编辑器打开你会看到属性声明部分已经被软件自动改好了类型也都选得合理这一步基本不用手工干预。第二步处理子女数这一列。它虽然标成数值但实际只有 0、1、2、3 这么几个取值本质上是分类。很多算法只能处理全是分类属性的数据所以这种「看着是数字、其实是类别」的列要提前改过来。做法很土但有效用文本编辑器打开 ARFF把对应的那行声明从数值类型改成大括号列出取值保存再回界面重新打开选中这一列看摘要里的类型是不是变成了分类型。第三步把年龄和收入切成区间。这两个是真·连续数值取值太多直接喂给某些算法效果不好。在区域 3 点选择按钮会展开一棵过滤器树逐级找到负责离散化的那个在无监督、属性这两层下面点中之后选择框旁边的文本里会显示一串默认参数形如段数 10、某种区间标记、作用范围全部。点这串文本会弹出参数窗口我们只改两个作用范围改成只针对这两个属性的序号段数从 10 改成 3。其它参数先别动想看含义就点窗口里的更多说明。改完点确定回到主界面再点选择框右边的应用你会看到属性列表里那两列的类型变了摘要也从数值统计变成了每个区间的计数。如果对结果不满意点撤销就能退回去重来。到这一步一次完整的预处理就走完了剩下的就是保存成 ARFF。4.5 存下来并回头检查一遍保存之后还有一件事要做回去看一眼文件。离散化生成的区间标签通常是数学区间的写法形如从负无穷到某个小数看着晦涩也不利于后面读结果。你可以用文本编辑器手动把这些标签替换成更好懂的名字比如把前三段换成 0_34、35_50、51_以上这种替换的时候注意每一段的标签要和数据区里出现的完全一致不要漏改也不要改错。检查清单大概三条属性数量对不对有没有多出来或者少掉一列每列的类型是不是你想要的该分类的分类、该数值的数值最后一列是不是你的目标变量。这三条都过了这份数据就可以拿去跑分类了。别小看这个回头检查的动作我见过太多人一路点下来最后发现预测的是 ID 列白忙一场。5. 避坑清单新手最容易翻车的 5 个地方这一章是我带人时被问得最多的五类问题每一条都按「看到什么现象 → 为什么会这样 → 怎么解决」的顺序写遇到对得上的直接照做就行。5.1 现象属性名变成一堆数字第一行数据不见了打开 CSV 之后属性列表里的名字全是数值或者奇怪的字符原本的第一行数据找不到了。原因很单纯这份 CSV 没有表头而 WEKA 默认把第一行读成属性名于是你的第一条记录就这样被当成了列名后面整张表的列名全错位。解决方式是补表头。用文本编辑器打开 CSV在最上面插一行写上每一列的名字用英文逗号分隔个数必须和数据列数严格一致。如果你不想改原文件也可以在读入的时候让软件不要用第一行当表头但这条路对新手不友好容易连着别的参数一起改错建议还是老老实实补一行。5.2 现象文件打不开提示无法识别为 ARFF明明文件后缀是 .arff双击或者打开的时候就是报错说结构无法识别。九成的情况是分类属性的取值列表和数据区对不上。比如声明里写的是{sunny, overcast, rainy}数据里却出现了Sunny或者cloudy大小写不一致、多了空格、或者干脆是列表里没有的值读取就会失败。解决办法是逐列核对。先用文本编辑器把每一行的 attribute 看清楚再把数据区对应那一列的值扫一遍确认数据里出现的每一个值都在花括号里且拼写、大小写、前后空格完全一致。这类问题特别考验耐心但排查手法很朴素从第一列开始一列一列对对上十列基本就找到问题所在了。5.3 现象算法选好了一点运行就报类型不支持界面里挑好算法点运行结果区域弹出一句看不懂的英文大意是这个算法处理不了某种类型的数据。原因是 WEKA 里不同算法对输入数据的类型有硬性要求有的只吃分类属性有的只吃数值属性有的目标列必须是分类而不能是数值。你拿着一份全是数值的数据去跑只认分类的算法它当然不干。解决方向有两个要么改数据要么换算法。改数据就是把不合适的类型转过去数值转分类用离散化过滤器分类转数值可以用编码类的过滤器前面练过的那个离散化操作就是干这个的。换算法更省事在算法列表里换一个对类型要求宽松的先跑通再说。我的建议是新手先换算法把流程跑顺了再回头折腾数据类型不然很容易在预处理里耗掉全部热情。5.4 现象离散化之后标签是 (-inf-34.333333]数据是处理完了但每个区间的名字长得像数学试卷负无穷、小数点后面一长串读结果的时候完全不知道对应哪一段人。原因在于离散化过滤器默认用区间端点来命名它只管算得准不管你读得懂。解决办法是手工重命名。保存成 ARFF 之后用文本编辑器打开把每个区间标签替换成你能一眼看懂的名字比如按年龄换成 0_34、35_50、51_以上。替换的时候要全局替换属性声明和数据区里出现的都要改漏掉一处就会读不进去。嫌麻烦的话也可以在过滤器的参数里调整区间划分方式让它生成更规整的端点但手工改名对新手来说更直观也更不容易出错。5.5 现象准确率 99%但你不信跑完分类结果面板上显示准确率高得离谱你自己都觉得不可能。这时候先别高兴八成是数据泄漏或者无用属性在捣鬼。最常见的情况是 ID 列没删——如果每一行都有一个唯一编号某些算法会把它当成极强的特征靠它就能把每条记录区分开训练集上自然全对但换个数据就全崩。另一个来源是目标信息泄漏也就是某一列本身是由目标列算出来的等于把答案提前告诉了模型。解决办法是先做减法把 ID 这类唯一标识删干净把明显和目标有因果倒挂的列挑出来然后再看混淆矩阵别只看那一个准确率数字。真正靠谱的结果是各个类别的表现都说得过去而不是一个漂亮的整数。提示每做完一次预处理就保存一个版本文件名带上你做了什么比如删了 ID 的、离散化过的。后期发现问题时你会感谢当时的自己这算是我交过学费换来的习惯。6. 下一步学什么从「跑通一次」到「自己挑算法」到这儿你已经完成了一次完整的数据准备接下来该往哪儿走我给一条尽量不绕弯的路线。6.1 三周路线每周只加一件事第一周只做一件事把 ARFF 格式吃透。找三四份不同来源的数据自己动手写成 ARFF故意写错一两个地方再修好直到你闭着眼也能说出头信息该写什么、数据区该怎么对齐。这一周不要碰任何算法格式不熟后面全是无谓的报错。第二周进分类面板。拿你预处理好的数据把最后一列设成目标挑一个决策树类的算法跑一遍然后换两三个别的算法对比。重点不是谁准确率高而是看结果面板给出的混淆矩阵长什么样、每个类别错在哪儿。同时开始看日志区那里会告诉你算法实际用了哪些参数、数据有多少条、有没有警告。第三周再回头补预处理。这时候你已经知道算法对数据的要求了再去做缺失值处理、属性筛选、离散化调参目的性会强很多不会像第一周那样瞎点。你想做的事进哪个面板大致能得到什么清理和变换数据预处理一份格式正确、类型合适的数据集预测类别分类混淆矩阵、准确率、每个类别的错分情况预测数值分类面板里的回归类算法预测值与真实值的偏差指标把样本自动分组聚类若干簇以及每条记录属于哪一簇找「买了 A 的人常买 B」关联规则一条条形如「如果 A 那么 B」的规则6.2 一个具体技巧先看日志再看混淆矩阵我给一个特别小但特别有用的习惯每次跑完算法先看状态栏和日志再看结果。日志里会写清楚这次用了多少条数据、多少属性、算法有没有报警告很多问题在这一屏就能发现比如数据条数明显少于你预期的说明读取的时候就丢了行。然后再看混淆矩阵。准确率是最后才看的数字因为它会把类别不均衡的问题藏起来一百条数据里九十条是「否」模型全猜「否」也有九成准确率可它一点用都没有。混淆矩阵会老实告诉你模型把多少「是」错判成了「否」这个数字往往才是你真正关心的。我第一次做这类任务时就是被一个漂亮的高准确率骗了半天后来把矩阵拉出来一看少数类几乎全军覆没。从那以后我每次跑完任何模型都强制走一遍「先看日志、再看矩阵、最后才看准确率」的顺序再急也不跳。这份 WEKA 操作入门资料把 ARFF 的写法、Explorer 八个区域、预处理的具体参数都一步步记下来了配合上面这套顺序对着做比自己在界面里乱点要省不少时间想要的话按文末方式获取就行。希望帮到你。本文还有配套的精品资源点击获取