简介:这份WEKA中文详细教程PPT面向机器学习与数据挖掘入门者、课程学习者及需要快速上手WEKA的教师与学生,系统梳理从工具认知到建模分析的完整知识框架。压缩包内共1个PPT文件,大小约14.29MB,以幻灯片形式组织讲解,便于课堂演示、自学跟练与知识点速查。教程内容覆盖WEKA简介、数据集与ARFF文件、数据准备与预处理、分类、聚类、关联规则、属性选择、数据可视化及知识流界面等模块,并对Explorer环境的8个功能区域、筛选器使用、属性摘要与直方图等操作细节作出说明。读者可借此理解WEKA的界面布局与数据管理方式,掌握分类、聚类和关联分析的基本流程,并对照案例完成从数据导入到结果解释的实践。目前已有168人学习,适合作为课程配套资料和入门实践参考。
1. 先别被“数据挖掘”吓住:WEKA 到底是个什么东西
你手里有一张几千行的 Excel 表,想回答一个特别朴素的问题:哪些客户下个月还会回来买?肉眼翻,翻到眼花也翻不出规律;自己写代码,光是配环境就够劝退。WEKA 就夹在这两件事中间——它是一个用 Java 写的开源机器学习与数据挖掘工具,装完打开就是图形界面,点点鼠标就能让机器替你把表里的规律找出来。名字来自一种鸟,同时也是一串英文的缩写,直译过来大致是“智能分析环境”。这份 WEKA 中文详细教程 PPT,就是把这条路拆成十来段的地图:从简介、数据集、数据准备、预处理,到分类、聚类、关联规则、选择属性、数据可视化,最后到知识流界面。作为一份成体系的课程资源,它讲的是点哪里、填什么、结果怎么读,而不是公式推导,零基础也能跟上。
2. 先把四个工作台认清:为什么新手只用 Explorer 就够
很多人第一次打开 WEKA 会愣住:界面上并排放着四个按钮,名字都很唬人,点进去长得还都不一样。有人当场关掉去搜教程,有人随便点了一个,结果一头扎进最复杂的那个,折腾两小时连数据都没载进去。这就是典型的入门翻车现场——不是软件难,是入口选错了。
这一章我们只做一件事:把四个入口认全,然后明确告诉你,接下来一个月你只需要待在其中一个里面。
2.1 四个入口分别在什么时候用
WEKA 的启动界面提供四个环境,功能定位差别很大:
| 入口 | 中文叫法 | 适合谁 | 典型用途 |
|---|---|---|---|
| Explorer | 探索环境 | 新手、绝大多数日常分析 | 载数据、跑算法、看结果 |
| 命令行环境 | 命令行 | 要批量跑、要写脚本的人 | 一条命令跑完一次实验 |
| Knowledge Flow | 知识流环境 | 要搭完整流程的人 | 拖拽组件连成数据流水线 |
| Experimenter | 算法试验环境 | 要比多个算法的人 | 同一份数据批量对比算法 |
Explorer 是图形化的主战场,所有常用操作都在这一个窗口里完成,从载入数据到出结果不超过十步。命令行环境适合你已经知道参数、想重复跑的场景。知识流环境是把“读数据、过滤、训练、评估”这些步骤当成积木,用线连起来,适合流程长、步骤多的任务。算法试验环境则是专门做对比实验的,一次配置,让它自动跑几十组。
为什么新手只用 Explorer?因为另外三个环境里的每一个动作,Explorer 里都有对应的按钮,而且能立刻看到结果。你先在 Explorer 里把“一份数据怎么变成一棵决策树”这件事走通,之后再去理解知识流里的那些方块,会发现它们不过是你点过的按钮换了个样子。
我第一次接触的时候就是贪心,直接开了知识流,拖了七八个组件,线连错了还不知道错在哪,因为界面上没有任何报错提示,只有一个组件一直是灰的。后来老老实实回 Explorer 点了一个月,再回去看知识流,十分钟就搭好了。
2.2 Explorer 的八个区域:像认仪表盘一样过一遍
Explorer 窗口乍看很挤,其实它被切成了八个区域,每个区域职责很清楚。你不用背,打开软件对着看一遍就行:
- 区域 1:顶部一排选项卡,Preprocess(数据预处理)、Classify(分类)、Cluster(聚类)、Associate(关联分析)、Select Attributes(选择属性)、Visualize(可视化)。切换它们就是切换任务面板,这是整个软件的主导航。
- 区域 2:常用按钮区,打开文件、编辑、保存、撤销都在这里。它还承担一个隐藏功能:把当前数据另存成别的格式,比如把 csv 存成 arff。
- 区域 3:Choose 按钮,用来挑一个 Filter(筛选器)。数据清洗、属性增删、类型转换,全靠它。
- 区域 4:显示当前数据集的基本情况——关系名、属性几个、实例几条。
- 区域 5:列出所有属性,每一行一个。勾选后点 Remove 能删掉,删错了用区域 2 的 Undo 找回来。上方那排小按钮是快速全选、反选、按类型选的。
- 区域 6:显示你在区域 5 里选中的那个属性的摘要。数值型看最小值、最大值、均值、标准差;标称型看每个取值各有多少条。
- 区域 7:选中属性的直方图。如果最后一列是类别,直方图会按类别染成不同颜色,一眼能看出分布差异。
- 区域 8:底部状态栏、Log 按钮和那只鸟。鸟在动说明正在算;在状态栏上右键能看到可用内存,也能手动触发一次内存回收。
把这八个区域当成汽车仪表盘就对了:你不用知道发动机怎么工作,但得知道油表在哪、转速表在哪。区域 5 和区域 6 是你以后看得最多的两个地方,前者告诉你数据长什么样,后者告诉你这一列有没有问题。
2.3 第一次打开软件:三步确认环境没白装
装完之后别急着找自己的数据,先用软件自带的数据集走一遍,确认环境是好的:
第一步,双击启动,看到四个入口,点 Explorer。
第二步,在 Preprocess 面板点区域 2 的 Open file,进到安装目录下的 data 子目录,随便挑一个自带的数据文件打开。
第三步,看区域 4 是否显示出了关系名和实例数,看区域 5 是否列出了一排属性,再看区域 6 有没有内容。三处都有东西,说明装好了。
提示:WEKA 是 Java 写的,运行需要 Java 环境。安装包通常有两种,一种自带运行环境,一种要求你机器上已经装好。分不清就选自带的那种,省掉一堆“双击没反应”的麻烦。
2.4 为什么让你先别碰知识流和实验环境
这两块在教程里排在很后面,不是没有道理。知识流的核心是“把数据流向画出来”,可你如果还不知道 Filter 是干什么的、分类器输出的是什么,画出来的线就是瞎连。实验环境的核心是“批量对比”,可你如果连一次结果都读不明白,跑出二十组数字也只是看着热闹。
入门阶段的判断标准很简单:能不能用 Explorer 独立完成一次“载入数据、清洗一下、跑个分类、说清结果说明什么”。能做到,再去扩。做不到就先别扩,扩了也是给自己添堵。血泪经验是,越高级的界面,出错时的提示越少,因为它默认你知道自己在干什么。
3. 数据先过关:ARFF 到底是个什么文件,怎么写第一份
十个新手里有八个,第一次失败不是败在算法上,是败在数据读不进去。软件弹一个英文报错,人就直接卡死。这一章我们把数据这一关彻底过掉。
3.1 一张表格的三种叫法:实例、属性、关系
WEKA 眼里的数据,就是一张规规矩矩的二维表。这张表有三种叫法,你以后会反复遇到:
横着的一行叫一个实例(Instance),相当于统计学里的一个样本,或者数据库里的一条记录。竖着的一列叫一个属性(Attribute),相当于一个变量,或者数据库里的一个字段。整张表合起来叫一个关系(Relation),你可以理解成“这批数据叫什么名字”。
举个具体的例子。假设你记录了十四天的天气,每天有四个观察项:天气状况、温度、湿度、有没有风,外加一个结果——那天到底适不适合出去玩。那么这张表有 14 个实例、5 个属性,其中前 4 个是“用来判断的依据”,最后 1 个是“答案”。
这个“最后一个是答案”不是随便定的。WEKA 默认把最后一个声明的属性当作分类或回归任务的目标变量,也就是类别。你想预测什么,就把什么放在最后一列。
3.2 ARFF 的三段结构:头信息、属性声明、数据区
WEKA 存数据用的是一个纯文本格式,扩展名.arff,全称是 Attribute-Relation File Format。用记事本就能打开、能改。它的结构非常固定,就三段。
拿上面那个天气的例子,写成 ARFF 长这样:
% 以百分号开头的行是注释,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,给这张表起个名字。名字里如果有空格,必须用英文单引号或双引号括起来。名字起什么都行,但建议起得有意义,因为后面结果面板里会显示它。
第二段是属性声明,每个属性一行,格式是@attribute 属性名 数据类型。属性名必须以字母开头,含空格同样要加引号。这一段的顺序极其重要,因为它决定了数据区里每一列对应谁。上面例子里humidity是第三个声明的,那么数据区每一行被逗号切开的第三个数就是湿度。
第三段是数据区,从@data这一行开始,下面每行一条实例,值之间用逗号分隔,顺序必须和属性声明的顺序严格一致。
3.3 四种数据类型和一堆大小写规矩
ARFF 支持四种数据类型,你得知道每种长什么样:
| 类型 | 写法 | 说明 | 例子 |
|---|---|---|---|
| 数值型 | numeric | 整数和小数都算,WEKA 统一按实数处理 | @attribute age numeric |
| 标称型 | {值1, 值2, ...} | 枚举,值只能是花括号里列出的某一个 | @attribute color {red, green} |
| 字符串型 | string | 任意文本,一般不用来做预测 | @attribute note string |
| 日期型 | date 格式 | 时间戳,需要指定格式 | @attribute day date yyyy-MM-dd |
还有两个词integer和real,写上去也能用,但 WEKA 内部都当numeric处理,属于历史遗留写法。
这里有一处特别容易踩的地方:integer、real、numeric、date、string这几个类型关键字是区分大小写的,你写成Numeric就会报错。而@relation、@attribute、@data这三个标记词反而不区分大小写,写@RELATION也能认。记不住也没关系,全部小写最保险。
标称型还有个隐形规则:数据区里出现的值,必须一字不差地出现在属性声明的花括号里。大小写不同算不同,多一个空格也算不同。这是新手报错率最高的一条,第 5 章会专门讲。
3.4 手写第一份 ARFF:从记事本到 WEKA 能认
现在自己动手造一份。假设你想研究“学习时长和出勤率能不能预测考试通过”,可以这样写:
@relation study_record @attribute hours numeric @attribute attendance numeric @attribute pass {yes, no} @data 2,60,no 5,85,yes 1,50,no 8,95,yes 3,70,no 6,90,yes保存的时候注意三件事:文件扩展名必须是.arff,不是.txt;编码用 UTF-8 或者纯 ASCII,别用带 BOM 的格式;用英文标点,逗号是半角逗号,花括号是半角花括号。
然后在 Explorer 的 Preprocess 面板点 Open file,选中这个文件。如果一切正常,区域 4 会显示关系名study_record、属性数 3、实例数 6,区域 5 列出三行属性,区域 6 显示你点中那一列的统计。到这里,你的第一份数据就进到 WEKA 里了。
如果报错,先看报错里提到的行号,八成是那一行的某个值不在花括号名单里,或者逗号数量对不上。
3.5 不想手写怎么办:把 Excel 表拖进来
真实工作里没人手写 ARFF。你手上多半是 csv 或者 Excel 表,转换路径有两条。
第一条,直接用 Explorer 打开 csv。区域 2 的 Open file 是支持 csv 的,打开后 WEKA 会自动推断每一列的类型,然后你在区域 2 点 Save,把它另存成.arff。以后再用就直接开 arff,省掉推断这一步。
第二条,先在表格软件里把数据整理干净再导出 csv。删掉合并单元格、删掉表头上面的标题行、删掉空行,每一列只放一种内容。这一步多花五分钟,后面少折腾两小时。
注意:转换完一定要在区域 5 里逐列看一遍类型。数字被识别成标称、类别被识别成字符串,是自动推断最常见的两个误判,改起来就在区域 5 里点一下类型下拉框。
4. 跑通第一个分类:三步做出你的第一个预测模型
数据进来了,接下来是所有人最期待的一步:让机器给出一个预测。这一章我们把一次完整的分类从头跑到尾,包括怎么看结果,以及为什么你不能迷信那个百分比。
4.1 分类到底在做什么:拿有答案的题练手,再考新题
分类这个任务的逻辑,跟准备考试一模一样。你手上有一批已经知道答案的题(历史数据,每条都标好了结果),先拿这些题让算法反复看,让它总结出“什么样的特征组合通常对应什么结果”,这个过程叫训练。训练完之后,给它一批没见过答案的新题,看它答对多少,这个过程叫评估。
天气那份数据就是标准场景:用天气状况、温度、湿度、风力四个特征,去预测第五列“适不适合出去玩”。
这里有个必须搞清楚的区分。如果你拿训练用的那批题去考它,它当然答得好,因为它已经见过答案了。这种分数毫无意义,属于自己考自己。所以评估必须用模型没见过的数据。
WEKA 里最常用的做法叫十折交叉验证。它把数据平均切成十份,轮流拿其中九份训练、剩下一份测试,重复十次,最后把十次的结果平均。这样每一份数据都当过一次考题,分数就比较可信。入门阶段,默认就用这个,不用改。
4.2 三步跑完:载入、选算法、点 Start
接着上一章那份study_record.arff,我们完整跑一次。
第一步,Preprocess 面板确认数据已经载入,区域 5 里pass这一列在最后。
第二步,点区域 1 的 Classify 选项卡。这时界面会换一套,但别慌,需要动的只有三处:Choose 按钮、Test options 区域、Start 按钮。
第三步,点 Choose,展开trees文件夹,选J48。这是一个决策树算法,输出是一棵能看懂的树,最适合第一次用。选完你会看到 Choose 旁边出现一行weka.classifiers.trees.J48,这就是它的全名。
第四步,在 Test options 里选Cross-validation,Folds 填 10。
第五步,点 Start。左边 Result list 里会多出一行,右边结果区刷出一大段文字。
这五步操作,在命令行里其实就对应一条命令:
# -t 指定训练数据,-x 10 表示十折交叉验证 # 实际使用时把路径换成你本机 arff 文件的路径 java -classpath weka.jar weka.classifiers.trees.J48 -t study_record.arff -x 10这条命令的含义是:调用 J48 这个分类器,读入study_record.arff,做十折交叉验证。-classpath weka.jar是告诉 Java 去哪里找 WEKA 的类库。你暂时不用跑它,但要知道,图形界面里的每一次点击,背后都是这样一条命令。理解这层对应关系,以后写批处理脚本会顺很多。
4.3 结果面板怎么读:别只盯着那个百分比
结果区那一大段文字,新手通常只看到一行“Correctly Classified Instances”,然后就开始纠结为什么不是 100%。其实真正有用的信息有四块。
第一块,正确率。它会写成Correctly Classified Instances 12 85.7143 %这种形式,前面是答对的条数,后面是百分比。记住这个数字要看,但不能只看它。一份数据里如果 90% 的样本都是“通过”,那模型闭着眼全猜“通过”也有 90% 正确率,这种模型一点用没有。
第二块,混淆矩阵。它是一张小表格,行是真实类别,列是预测类别。对角线上的数字是答对的,非对角线是答错的。它能告诉你模型错在哪:是把“不通过”误判成“通过”了,还是反过来。这两种错误在实际业务里代价完全不同。
第三块,详细指标。包括精确率(Precision)、召回率(Recall)、F 值。用大白话讲:精确率是“它说是正的里面,真有几个是正的”;召回率是“真正的正例里,它找出来几个”。这两个指标经常此消彼长。
第四块,模型本身。在结果区里会直接印出决策树的文字形态,形如if humidity > 80 then ...这样的规则。这是 J48 的好处,它不给你一个黑匣子,而是给你一棵能读懂、能拿去跟业务方解释的树。
4.4 把模型画出来看看:决策树可视化
文字版的树看着累,可以调出图形版。在左边 Result list 里右键刚跑出来的那一行,选Visualize tree,会弹出一个可以缩放的树状图。每个节点是一个判断条件,每个分支是判断结果,叶子节点就是最终分类。
看着这棵树,你可以干一件很有价值的事:检查它合不合理。如果树深得离谱,每个叶子只对应一条数据,那基本是过拟合了,模型把训练数据背下来了,换个数据集就废。如果树只有一层,说明特征跟结果几乎没关系,得回去想是不是选错了属性。
4.5 换个算法再跑一次:为什么单次结果不能当真
把 Choose 里的 J48 换成bayes文件夹下的NaiveBayes,再点一次 Start。你会看到结果区多了一行,正确率可能高一点也可能低一点。
这就是很多人第一次感到“玄学”的地方:同一份数据,换个算法分数就变;甚至同一个算法,换一次随机种子,分数也变。原因有三个:不同算法对数据的假设不一样,有的偏好线性关系,有的擅长处理类别特征;交叉验证的折分方式带随机性;数据量小的时候,一两条样本换个位置就能让正确率浮动几个百分点。
所以入门阶段不要做的一件事,就是拿一次运行的结果下结论说“这个算法更好”。要做对比,至少得换几组参数、换几次随机种子,看整体趋势。这件事 WEKA 的算法试验环境专门负责,等你把 Explorer 用顺了再去碰它。
5. 新手最容易翻车的五个坑:报错、乱码、结果好得离谱
这一章是踩坑记录,五条都是入门第一周最常撞上的。每条按“现象、原因、解决”三步写,遇到时对着排查。
5.1 坑一:打开文件报 Nominal value not declared in header
现象:载入 arff 文件时弹窗,提示某个值没有在头部声明里出现,文件读不进来。
原因:数据区里某一列出现了属性声明花括号里没有列出的取值。常见来源有三种:一是大小写不一致,声明里写yes,数据里写Yes;二是多打了空格,声明no,数据里是no;三是数据里混进了空值,被当成了一个空字符串。
解决:看报错里给的行号和列名,去那一行对一下。养成习惯,写完 arff 后用查找功能把每个标称值都搜一遍,确认拼写完全一致。如果要表示缺失值,用问号?,不要留空。
5.2 坑二:正确率高得离谱,接近或等于 100%
现象:一跑就是 99%、100%,开心了三秒,然后发现换个数据就崩。
原因:八成是数据泄漏。最典型的是把“答案的衍生列”也留在了特征里。比如预测客户会不会流失,结果特征里有一个“注销日期”字段,那模型只要看到这个字段有值就知道要流失了,当然全对。另一种可能是你无意中把测试集拿来训练了,比如手动把全部数据当训练集,评估方式却选了“评估在训练集上”。
解决:逐列过一遍,问自己“这一列在预测发生的那一刻,真的能拿到吗”。答案是不能的,一律删掉。另外确认 Test options 选的是交叉验证或独立的测试集,不是Evaluation on training set。
5.3 坑三:中文属性名一打开就是乱码
现象:属性名里带中文,打开后变成一堆问号或方块。
原因:arff 是纯文本,读的时候按平台默认编码解析。你保存时用的是某种编码,读的时候用的是另一种,就对不上了。
解决:最省事的办法是属性名和标称值全部用英文,中文只放在注释里,注释不参与解析。如果非要用中文,保存时统一成 UTF-8,并且确认文件开头没有 BOM 标记。表格软件导出 csv 时经常偷偷加 BOM,这也是导入失败的一个隐形原因。
5.4 坑四:跑到一半提示内存不足
现象:点了 Start 之后软件卡住,日志里刷出一串内存相关的报错,或者那只鸟一直转但没结果。
原因:数据量大,或者算法复杂,默认分配给 Java 的内存不够用。
解决:在状态栏上右键,能看到当前可用内存有多少。要调大,得在启动参数里改,命令行方式是加-Xmx参数,比如java -Xmx2g -classpath weka.jar ...表示最多用 2G 内存。图形界面启动的话,可以找到安装目录里的启动脚本,在里面加同样的参数。另外,跑之前把用不上的属性删掉,也能省下不少内存。
5.5 坑五:数值列被当成了标称列
现象:明明是一列数字,区域 6 里显示的却是“每个取值各有多少条”,直方图也变成了一根根柱子。
原因:这一列里混进了非数字内容。比如金额带了货币符号、数字中间有千分位逗号、某一格写了“未知”两个字。WEKA 一遇到非数字,整列就退化成标称型。
解决:回原始表格里把这一列清洗干净,去掉单位、去掉千分位逗号、把文字描述统一换成?。或者在区域 5 里手动把类型改回 numeric,但改之前一定要先确认里面真的全是数字,否则改了也是错的。
6. 下一步学什么:按教程页码排一张自己的学习表
把第一个分类跑通之后,最容易犯的错是漫无目的地乱点。教程那么厚,从哪一页接着看?我的建议是按“先把数据弄干净,再谈模型”的顺序走,这份教程的章节顺序其实已经排得挺合理,你照着它的页码推进就行。
| 阶段 | 学什么 | 对应章节位置 | 练手任务 |
|---|---|---|---|
| 第一周 | 数据准备与预处理 | 数据准备、数据预处理 | 拿自己的表清洗一遍,跑通 Filter |
| 第二周 | 分类 | 分类 | 同一份数据对比三种算法 |
| 第三周 | 聚类与关联规则 | 聚类、关联规则 | 用无标签数据跑一次聚类 |
| 第四周 | 属性选择与可视化 | 选择属性、数据可视化 | 删掉一半属性看分数变化 |
| 第五周 | 知识流与算法对比 | 知识流界面 | 把前四周的流程连成一条流水线 |
具体说几个要点。数据预处理那一块要重点花时间,Filter 里常用的几类操作——缺失值填充、数值离散化、属性归一化——每一个都值得单独试一遍,因为后面所有模型的效果都建立在这上面。分类跑顺了再去碰聚类,聚类的思维方式和分类不一样,它没有答案,是让算法自己分组,很多人第一次看不懂结果就是因为还在用分类的思路。关联规则适合用来找“买 A 的人往往也买 B”这类组合,跑出来的规则要关注支持度和置信度两个指标。属性选择是性价比很高的一节,删掉无关属性往往能让模型又简单又准。
再往后,知识流和算法试验环境是自然延伸。等你发现自己反复在做同一套点击动作时,就该把它们搬到知识流里去连成流程了。至于“自己写算法”这件事,教程里提到 WEKA 提供了接口,可以把自己的算法接进去,但这属于跑通十几个例子之后才需要考虑的事,现在不用管。
最后说一个我自己的习惯。从那以后,我每次拿到一份新数据,不管多急,都会强制先走一遍“看属性类型、看缺失值比例、看类别分布”这三步,然后再动手选算法。因为绝大多数看起来玄学的问题——分数忽高忽低、结果解释不通、换个算法全崩——根子都在数据那一步。模型没那么神,它只是把你喂进去的东西照原样放大。
希望这份地图能帮你少绕几个弯,早点跑出属于自己的第一个结果。
本文还有配套的精品资源,点击获取