Weka机器学习使用介绍(数据+算法+实战)
Weka是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis)的英文字首缩写,新西兰怀卡托大学用Java开发的数据挖掘著名开源软件。功能有数据处理、特征选择、分类、回归、可视化等,支持多种数据文件格式,如arff、xrff、csv等,主流的数据格式是csv和arff。
本文将利用一个csv数据对Weka的使用过程进行简单的介绍,并采用其中一种机器学习算法决策树进行实战,其他的一些机器学习算法在机器学习专辑里都有介绍。
一、 Weka介绍 下载链接:https://waikato.github.io/weka-wiki/downloading_weka/,里面有windows、mac os和linux等平台版本。 Weka的主页面窗口有四个模块:
二、 数据读取和数据预处理 我们在获取的数据文件一般来说第一列都是ID或Name,中间的一些列是对应的特征种类,最后一列是每一行ID的标签class,首先删掉ID列,并且确保class的取值为0或1。
1. 数据读取 打开Explorer界面,点击Open file,选择保存目录下的Weka_Data.csv(在公众号回复Weka_Data即可得到csv文件的下载地址),文件中是包含20个特征的20个数据和对应的class。
该模块有6个选项卡,用来选择不同的功能面板,从左到右依次是Preprocess(预处理)、Classify(分类)、Cluster(聚类)、Associate(关联规则)、Select attribute(特征选择)和Visualize(可视化)。
Filter模板针对特征(attribute)和样本(instance)提供了大量的操作方法。Current relation是读取的文件信息。Attributes包含当前的特征、样本信息,并提供了特征选择和删除的功能。用鼠标选择单个特征后,Selected attribute将显示该特征的信息。包括最小值、最大值、期望和标准差。右下角提供了可视化功能,选择特征后,该区域将显示特征值在各个区间的分布情况。
Filters可分为两大类,supervised(监督、管理)和unsupervised。supervised下的方法需要类别标签,而unsupervised则不需要。attribute类别表示对特征做筛选,instance表示对样本做选择。
通常对于Weka来说并不支持中文,Weka支持的有四种数据类型,分别是:numeric--数值型,--分类(nominal)型,string--字符串型,date []--日期和时间型。 对标签进行类型转换,读取的class数据是Numeric,需要转换为Nominal,在Filter处依次选择weka-filters-unsupervised-attribute-NumericToNominal。
之后将attributeIndices设置为class所在的No.我们这里改为21,点击Apply,可以看到class的Type变成Nominal了。
2. 数据预处理
2.1 特征值归一化 如果导入的各列特征数据没有经过归一化处理,我们需要对所有数据进行normalize处理,在Filter处依次选择weka-filters-unsupervised-attribute-Normalize,在ignoreClass选True,这样就将所有特征归一化到0-1之间了。
2.2 特征选择 在Filter选择weka-filters-supervised – attribute下的AttributeSelection,该界面有两个选项,evaluator是评价特征集合有效性的方法,search是特征集合搜索的方法。在这里,我们使用InformationGainAttributeEval作为evaluator,使用Ranker作为search,表示我们将根据特征的信息增益值对特征做排序。Ranker中可以设置阈值,低于这个阈值的特征将被扔掉,我们将阈值设置为0,点击apply,可以看到特征被重新排序,低于阈值的已被删掉。
为了使用方便我们可以将该处理后的数据通过Save保存为arff格式文件。
之后直接导入arff格式的数据即可,省去了中间数据预处理的步骤。
三、 模型选择和实验 我们对预处理之后的数据进行分类,打开Classify选项卡
Classifier提供weka里的分类器,常用的有bayes下的Naïve Bayes朴素贝叶斯、BayesNet贝叶斯信念网络;functions下的Liblinear、LibSVM(需要额外安装扩展包)、Logistic Regression、Linear Regression;lazy下的IBK(KNN);meta下的boosting和bagging分类器;trees下的J48(C4.5)、RandomForest。
Test options是评价模型效果的方法,Use training set:只使用训练集,即训练集和测试集使用同一份数据,一般不使用这种方法。Supplied test set:设置测试集,可以使用本地文件或者url,测试文件的格式需要跟训练文件格式一致。Cross-validation:交叉验证方法,N-folds cross-validation是指,将训练集分为N份,使用N-1份做训练,使用1份做测试,如此循环N次,最后整体计算结果。Percentage split:按照一定比例,将训练集分为两份,一份做训练,一份做测试。在这些验证方法的下面,有一个More options选项,可以设置一些模型输出,模型验证的参数。
Result list保存分类实验的历史,右键点击记录,可以看到很多选项。常用的有保存或加载模型以及可视化的一些选项。
Classifier output分类器的输出结果, Run information给出了特征、样本及模型验证的一些概要信息;Classifier model给出的是模型的一些参数,不同的分类器给出的信息不同。最下面是模型验证的结果,给出了一些常用的一些验证标准的结果,比如准确率(Precision),召回率(Recall),真阳性率(True positive rate),假阳性率(False positive rate),F值(F-Measure),Roc面积(Roc Area)等。Confusion Matrix给出了测试样本的分类情况,通过它,可以很方便地看出正确分类或错误分类的某一类样本的数量。
我们采用常用的J48决策树分类器进行4折交叉验证,得到的实验结果如下:
在Result list里右键实验,Visualize Tree,得到图形界面的直观的决策树。
本文分享自 Python编程和深度学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!