weka软件使用实例:kdd99数据集处理和分类

蓝亚之舟
蓝亚之舟
蓝亚之舟
57
文章
17
评论
2021年4月20日16:05:29
评论
8,060 6574字阅读21分54秒

前言

kdd99 数据集之前介绍过,没有看的可以参考:kdd99数据集特征介绍 | 蓝亚之舟博客

这里拿 kdd99 数据集练练手,主要目的是熟悉一下 weka 的使用。

1、数据集准备

使用 WEKA 作数据挖掘,面临的第一个问题往往是我们的数据不是 ARFF 格式的。幸好,WEKA 还提供了对 CSV 文件的支持,而这种格式是被很多其他软件所支持的。

虽然 weka 也支持 csv 格式,但是建议还是转为 ARFF 格式最好。

1.1 简单打开一个 csv 文件(加载数据)

(1)加载数据方式

加载数据集的方式有很多种,打开 weka 界面,点击 Explorer—>Preprocess,可以看到第二层菜单中有 4 种加载数据的方式:

weka软件使用实例:kdd99数据集处理和分类

上图中,右边三种操作必须在加载数据后才能使用,下面简单介绍一下这四种方式:

  • Open file:打开一个对话框,允许你浏览本地文件系统上的数据文件。
  • Open URL:请求一个存有数据的 URL 地址。
  • Open DB:从数据库中读取数据(注意,要使之可用,可能需要编辑 weka/experiment/ DatabaseUtils.props 中的文件)
  • Generate:从一些数据生成器(DataGenerators)中生成人造数据(weka 内置多种数据生成器,可以设置生成数据参数)。

一般使用 Open file 就可以,简单明了,当然如果是应用到项目中,对实时产生的数据进行分类回归操作,可以使用第二种,从数据库中读取的方式。

(2)打开文件的种类

open file 可以打开文件的种类:

  • arff 文件,后缀为.arff
  • csv 文件,后缀为.csv
  • c4.5 文件,后缀为.data 或者.names
  • 序列化文件,后缀为.bsi
  • matlab 文件,后缀为.m
  • json 文件,后缀为.json
  • XRFF 文件,后缀为.xrff

加载数据的时候,需要选择文件类型,才能看到相关文件:

weka软件使用实例:kdd99数据集处理和分类

(3)加载 kdd99 数据集

使用第一种方式加载数据,点击 Explorer—Preprocess—Open file,然后选择文件,需要注意的是,上层菜单选项除了第一个其他都是灰色,表示当前没有打开数据集,其他功能不能使用:

weka软件使用实例:kdd99数据集处理和分类

打开 kdd99 数据集(csv 格式)的时候,报了一个错:

weka软件使用实例:kdd99数据集处理和分类

报错提示是属性名称并不是唯一的,这里重点说明一下,WEKA 必须从 CSV 文件的第一行读取属性名,否则就会把第一行的各属性值读成变量名,上面报错就在于这里,我打开的 kdd99 数据集第一行属性名被我去掉了(用 python 处理的时候去掉的),结果程序将第一行的数据作为属性名读入,而数据中有很多重复的 0,这才报错。

在第一行加入了属性名(简单数字标识),再次打开没有报错,页面如下:

weka软件使用实例:kdd99数据集处理和分类

简单介绍一下上面的各个区域(因为要经常用到):

  • 区域 1:存在的几个选项卡是用来切换不同的挖掘任务面板。这一节用到的只有“Preprocess”,其他面板的功能将在以后介绍。
  • 区域 2:是一些常用按钮。包括打开数据,保存及编辑功能。在这里,我们可以把"totall.csv"另存为"totall.arff"。
  • 区域 3:数据过滤/变换器,“Choose”某个“Filter”,可以实现筛选数据或者对数据进行某种变换。数据预处理主要就利用它来实现。
  • 区域 4:展示了数据集的一些基本情况:文件名称,特征个数,数据条数等。
  • 区域 5:显示数据集的所有属性。勾选一些属性并“Remove”就可以删除它们,删除后还可以利用区域 2 的“Undo”按钮找回。区域 5 上方的一排按钮是用来实现快速勾选的。
    • ALL:全选
    • None:全都不选
    • Invert:反转,取消当前所选内容,然后选择其他所有内容
    • Pattern:让用户基于 Perl 5 正则表达式来选择属性。 例如, 用 *_id 选择所有名
      称以 _id 结束的属性。
  • 区域 6:该区域与区域 5 是相互关联的,在区域 5 中选中某个属性,则区域 6 中有关于这个属性的摘要。注意对于数值属性和分类属性,摘要的方式是不一样的。图中显示的是对数值属性“income”的摘要。
    • Name:属性的名称,和属性列表中给出的相同。
    • Type:属性的类型,最常见的是分类型(Nominal)和数值型(Numeric)。
    • Missing:数据中该属性缺失 (或者未指定 )的实例的数量 (及百分比 )。
    • Distinct:数据中该属性包含的不同值的数目。
    • Unique:唯一地拥有某值的实例的数目(及百分比),这些实例每个的取值都和别的不一样。
  • 区域 7:显示区域 5 中选中(选中方式是点击高亮,而不是对勾)属性的直方图(图中没有选择属性,所以没有显示直方图)。若数据集的最后一个属性是分类标签,直方图中的每个长方形就会按照该标签的比例分成不同颜色的段。要想换个分段的依据,在区域 7 上方的下拉框中选个不同的分类属性就可以了。下拉框里选上“No Class”或者一个数值属性会变成黑白的直方图。
    • class:颜色控制区域,可以选择不同的着色方式
    • Visualize All:将在一个单独的窗口中显示数据集中所有属性的直方图。
  • 区域 8:是状态栏,可以查看 Log 以判断是否有错。右边的 weka 鸟在动的话说明 WEKA 正在执行挖掘任务。右键点击状态栏还可以执行 JAVA 内存的垃圾回收。

这里重点说一下区域 6,它与区域 5 相关联,点击区域 5 的内容,就会在区域 6 显示对应得内容,注意是点击,而不是勾选

在 static 区域,如果属性是分类型的,列表将包含该属性的每个可能值以及取那个值的实例的数目。如果属性是数值型的,列表将给出四个统计量来描述数据取值的分布—最小值、最大值、平均值和标准差。

1.2 将 csv 文件转换为 arff 文件

点击区域 2 的 save,保存类型中选择.arff,如下图所示:

weka软件使用实例:kdd99数据集处理和分类

打开文件,即可看到转换完的文件。

2、分类界面

打开区域 2 的 Classify 选项,可以看到如下:

weka软件使用实例:kdd99数据集处理和分类

如上所示,可以看到 7 个区域,下面对这 7 个区域的作用介绍一下。

(1)区域 1:菜单项

区域 1 为菜单项,没什么好说的

(2)区域 2:算法选择

分类算法选择,可以点击“choose”按钮对算法进行选择,这里面算法还是挺多的,而且很多名称都不太一样:

weka软件使用实例:kdd99数据集处理和分类

一开始我想用决策树测试一下,但是在 trees 下面并没有看到我熟悉的决策树算法,后来在网上找了一下,才知道 J48 居然是 C4.5 决策树。

常用分类回归算法:

  • IBk():k 最近邻分类
  • LBR():naive Bayes 法分类
  • J48():C4.5 决策树算法(决策树在分析各个属性时,是完全独立的)。
  • LMT():组合树结构和 Logistic 回归模型,每个叶子节点是一个 Logistic 回归模型,准确性比单独的决策树和 Logistic 回归方法要好。
  • M5P():M5 模型数算法,组合了树结构和线性回归模型,每个叶子节点是一个线性回归模型,因而可用于连续数据的回归。
  • DecisionStump():单层决策树算法,常被作为 boosting 的基本学习器。
  • SMO():支持向量机分类
  • AdaBoostM1():Adaboost M1 方法。-W 参数指定弱学习器的算法。
  • Bagging():通过从原始数据取样(用替换方法),创建多个模型。
  • LogitBoost():弱学习器采用了对数回归方法,学习到的是实数值
  • MultiBoostAB():AdaBoost 方法的改进,可看作 AdaBoost 和 “wagging”的组合。
  • Stacking():用于不同的基本分类器集成的算法。
  • LinearRegression():建立合适的线性回归模型。
  • Logistic():建立 logistic 回归模型。
  • JRip():一种规则学习方法。
  • M5Rules():用 M5 方法产生回归问题的决策规则。
  • OneR():简单的 1-R 分类法。
  • PART():产生 PART 决策规则。

(3)区域 3:测试选项

该区域测试选项,也就是当你选择的分类器模型训练好了以后,采用什么样的方式对这个模型进行测试以评估模型的好坏,共有四种测试模式:

  • Using training set:根据分类器在用来训练的实例上的预测效果来评价它。
  • Supplied test set:从文件载入的一组实例,根据分类器在这组实例上的预测效果来评价它。点击“Set”按钮将打开一个对话框来选择用来测试的文件。
  • Cross-validation:使用交叉验证来评价分类器(会将数据集分为 K 份,K-1 份为训练数据,另外一份为测试数据),所用的折数填在 Folds 文本框中。
  • Percentage split:从数据集中按一定百分比取出部分数据放在一边作测试用,根据分类器这些实例上预测效果来评价它。取出的数据量由 % 一栏中的值决定。

下方的 more options,可以设置更多的测试选项:

weka软件使用实例:kdd99数据集处理和分类

这些选项可以设置算法运行过程中,区域 6 可以显示的内容:

  • Output model:输出基于整个训练集的分类模型,从而模型可以被查看,可视化等。该选项默认诗选中的。
  • Output per-class stats:输出每个 class 的准确度 / 反馈率( precision/recall)和正确/错误(true/false)的统计量。该选项也是默认选中的。
  • Output evaluation measures:输出熵估计度量。该选项默认没有选中。
  • Output confusion matrix:输出分类器预测结果的混淆矩阵。该选项默认选中。
  • Store predictions for visualization:记录分类器的预测结果使得它们能被可视化表示。
  • Output predictions:输出测试数据的预测结果。注意在交叉验证时,实例的编号不代表它在数据集中的位置。
  • Cost-sensitive evaluation:误差将根据一个价值矩阵来估计。 Set … 按钮用来指定价值矩阵。
  • Random seed for xval / % Split:指定一个随即种子,当出于评价的目的需要分割数据时,它用来随机化数据

其中 OutPut predictions 相当赞,将预测结果输出成一个文档,对应了每一条记录预测结果以及预测概率:

weka软件使用实例:kdd99数据集处理和分类

配合 Excel 的筛选功能,简直了:

weka软件使用实例:kdd99数据集处理和分类

(4)区域 4:预测选择和开始停止

该区域共有两个设置,第一个设置是下拉框——用来选择将要预测的属性,打开下拉框,可以看到共有 42 个选项:

weka软件使用实例:kdd99数据集处理和分类

正好对应数据集的 42 个列,前 41 个是 Num 代表数值,42 位 Nom 代表非数值型数据,这里我们要选择 Nom42,因为它是数据集的标签,其他都是特征数据。

注意:这里要重点说一下,如果预测的类别是前41列属性,这就说明了一个问题,Classify这个区块不仅仅是分类,也能进行回归(因为前41列都是连续值),查了一些资料,确实是这样,该区块将分类和回归集成在了一起。

第二个设置则是 start 和 stop,这个是算法训练开始和停止的按钮,点击开始会影响区域 5、区域 6 和区域 7 的显示结果,下面会进行说明。

(5)区域 5:结果列表

当点击 start 按钮的时候,列表中会多出一行数据,显示正在运行的算法,可以多次点击 start,同时运行多个算法的训练和测试,这个和区域 6 相互配合。

点击某条记录,区域 6 中就会显示出该算法的输出。

对某条结果记录进行右键,可以看到有如下选项:

weka软件使用实例:kdd99数据集处理和分类

选项很多,一条一条来看看:

  • View in main window:在右侧输出栏显示该算法的运行结果
  • View in separate window:弹出一个弹窗显示该算法运行结果
  • Save result buffer:保存该算法整个运行记录
  • Delete result buffer:删除该算法整个运行记录,一旦删除,结果列表中该条记录也会消失
  • Load model:加载模型,点击后,会弹出弹窗选择模型
  • Save model:保存当前模型
  • Re-apply this model's configuration:
  • Visualize classifier errors:弹出一个可视化弹框,将分类结果做成一个散点图,其中正确分类的结果用叉表示,分错的结果用方框表示。
  • Visualize tree:可视化决策树,如果算法不是决策树会呈现灰色
  • Visualize margin curve:创建一个散点图来显示预测边际值。这个边际值的定义为:
    预测为真实值的概率与预测为真实值之外其它某类的最高概率之差。例如,提升式(boosting)算法可以通过增加训练数据上的边际值来使得它在测试数据上表现得更好。
  • Visualize threshold curve:生成一个散点图,以演示预测时改变各类之间的阀值后取得的平衡。例如说,默认的阀值是 0.5,那么一个实例要预测成为“positive”,它是“positive”的预测概率必须大于 0.5。这个曲线可以用来在 ROC 曲线分析中演示准确度/反馈率之间的平衡(正确的 positive 率对错误的 positive 率),也可用于其它类型的曲线。
  • Visualize cost curve:生成一个散点图,给出期望价值(expected cost)的一个显式表达式。

(6)区域 6:输出显示

这个和区域 5 配合,值得一提的是,当你按住 Alt 和 Shift,然后在该区域点击鼠标左键,就可以将输出显示内容保存为图片(不过内容太多了,保存为一张图片,根本不好看,不如保存为文本比较好)

(7)区域 7:日志

日志打印,没啥好说的。

3、选择算法

针对 Kdd99 数据集,选择算法,我选择了两个算法:j48(C4.5 决策树)和 RandomForest(随机森林),切分数据集的 20%作为测试数据集。

运行结束,看一下各自的准确率,先看决策树:

weka软件使用实例:kdd99数据集处理和分类

可以看到,决策树的准确率为 99.9312%。

再看随机森林的测试结果:

weka软件使用实例:kdd99数据集处理和分类

可以看到结果准确率为 99.98%

4、如何调参

选择完算法,然后再运行算法,一遍流程下来,总感觉差了点什么,后来才发现,没有参数啊!

参数怎么调整呢?总不能每个算法的参数都是固定的吧,找了半天,终于在算法选择一栏找到了:

weka软件使用实例:kdd99数据集处理和分类

算法参数很多,其中一部分并不是传统的算法超参数,关于参数具体含义可以点击 About 框右边的 More:

weka软件使用实例:kdd99数据集处理和分类

5、顶层菜单栏其他选项

顶层菜单中除了 preprocess、Classify、Cluster 还有三个选项:

  • Associate:关联规则,用来挖掘属性与属性之间的关系的
  • Select attributes:选择属性,数据集中有很多特征属性,但是对于我们预测某个属性,并不一定都有用,这个是用来选择哪些属性是有用的
  • Visualize:可视化,对数据集可视化,用来分析数据的

weka软件使用实例:kdd99数据集处理和分类

三个选项中,对于 Select attributes 比较感兴趣,运行了一下,整个界面没有什么好说的了,和 Classify 的界面格局是一样的,看一下对于标签预测有哪些属性是有意义的:

weka软件使用实例:kdd99数据集处理和分类

改换了其他的属性评估器后,发现结果差别挺大的,要想把这个玩溜了,就得对各种属性评估器非常熟悉。

不过个人认为在能够承受的范围内,属性越多会使得预测结果越准确,一般来说我是不会随意删除属性数据的——除非是完全没有必要的属性,比如序号和时间戳等。

6、如何预测数据

一个模型训练结束,保存后,如果用它预测新的数据呢?

这就要使用 supplied test set 这一项了,如下图:

weka软件使用实例:kdd99数据集处理和分类

  • 第一步:在“Test Opion”中选择“Supplied test set”,并且“Set”成你要应用模型的数据集。
    注意待预测数据集和训练数据集各个属性的设置必须是一致的。即使你没有待预测数据集的 Class 属性的值,你也要添加这个属性,可以将该属性在各实例上的值均设成缺失值。比如你可以将欲预测的类别设为?,即缺失值。
  • 第二步:右键点击“Result list”中刚产生的那一项(新训练处理的模型,或者点击加载 model),选择“Re-evaluate model on current test set”。右边显示结果的区域中会增加一些内容,告诉你该模型应用在这个数据集上表现将如何。如果你的 Class 属性都是些缺失值,那这些内容是无意义的,我们关注的是模型在新数据集上的预测值。
  • 第三步:点击右键菜单中的“Visualize classifier errors”,将弹出一个新窗口显示一些有关预测误差的散点图。点击这个新窗口中的“Save”按钮,保存一个 Arff 文件。打开这个文件可以看到在倒数第二个位置多了一个属性(predictedpep),这个属性上的值就是模型对每个实例的预测值。
继续阅读
weka最后更新:2021-4-27
蓝亚之舟
weka

weka数据预处理详解

1、前言 weka 数据预处理阶段全部在 filter 上: 下面把一些常见的机器学习数据与处理方法处理说一下(下面所有实例都是在 Explorer 模块上进行的)。 2、数据预处理方法 可以看到其 ...
weka

weka之workBench与simpCLI界面详解

1、workBench 从 Weka 3.8.0 开始,提供了一个名为 Workbench 的新用户界面。Workbench 提供了一个多合一的应用程序,该应用程序包含了前面各节中描述的所有主要的 W...
weka

weka之KnowledgeFlow界面详解

1、前言 之前讲了 Explorer 和 Experiment 模块功能,这一章讲一讲 KnowledgeFlow(知识流)界面的功能。 该模块功能在某些方面很实用,这里大概讲一下其使用原理:首先通过...
weka

idea中集成weka

一、前期准备 1、加入依赖 百度搜索 maven,找到 maven 的 repository 仓库,寻找 weka 的依赖包: 找到稳定版本(我下载 weka 软件的时候就是这个版本,没有犹豫,就是它...

发表评论