2.7 可视化
可视化是指以图形或表格的形式展示信息,一般需要将数据包含的信息转换为可视的形式,以分析或总结数据的特征以及属性之间的关系。由于人类能够快速理解大量的可视化信息,发现其中的模式,因而分析可视化十分重要。另外,以直观的可视化方式提供结果,便于领域专家排除无意义的模式,从而发现重要的模式。
处理多属性的最常用方法是构造双属性的散点图,以显示两个属性值之间的关系,便于用户观察,Weka为用户提供了这个方便。2.7.1节中将介绍Visualize(可视化)标签页的操作。
Weka GUI选择器窗口中提供了单独的可视化工具,如第1章介绍过的Plot、ROC、TreeVisualizer、GraphVisualizer和BoundaryVisualizer。2.7.2节中将介绍边界可视化工具,该工具在二维空间中可视化分类器的决策边界,可以直观了解分类器的工作原理。
分类器评估通常考虑的是优化分类准确率,假设所有的错误分类的代价(cost)都相同。然而在真实世界的问题中,错分某个类别的代价往往会比错分另一个类别的代价更高,这就是代价敏感分类。2.7.3节中将介绍Weka的代价/收益分析可视化工具。
2.7.1 Visualize标签页
Weka探索者界面中的Visualize标签页可以帮助用户可视化数据集。要注意到这里的可视化对象并非分类或聚类模型的结果,而是数据集本身。它显示一个二维散点图矩阵,每个单元格对应一对属性。二维散点图矩阵有两个主要的用途:第一,可以直观地以图形方式显示两个属性之间的关系;第二,当给定类别标签后,可以用它来观察两个属性将不同类别的实例分离的程度。如果能用一条直线或曲线将两个属性定义的平面分成一些区域,每个区域包含一个类别的大部分对象,则可以基于给定的两个属性构建精确的分类器;否则,只能用更多的属性或更复杂的方法构建分类器。
图2.101中显示了iris数据集。用户可以选择一个属性(通常是类别属性)对数据点着色,单击窗口底部Class Colour选项组中的类别属性名称,就会弹出Select New Color(选择新颜色)对话框,选择一种颜色即可。如果类别属性是标称型,显示离散的着色(图2.101中显示了三种类别的不同颜色);如果是数值型,显示彩色条,根据连续值从低到高,对应的颜色从蓝色变到橙色。没有类别取值的数据点显示为黑色。
图2.101 可视化iris数据集
PlotSize(图大小)滑块和PointSize(点大小)滑块分别用于改变每一个单个二维散点图的大小和数据点的大小;Jitter(抖动)滑块用于随机抖动数据,使被遮挡的点可见;Jitter滑块下方的下拉列表框用于更改着色的属性;Fast scrolling(快速滚动)复选框用于加速滚动,但会耗费多一些的内存;Select Attributes(选择属性)按钮用于选择包含在散点图矩阵中的属性子集;SubSample(二次抽样)按钮用于对数据进行二次抽样,可以设置随机数种子和抽样的百分比。需要注意的是,只有单击Update(更新)按钮后,上述更改才会生效。
1.选择单独的二维散点图
当用户单击散点图矩阵中的一个单元格时,将弹出一个单独的窗口,显示用户选择的可视化散点图,如图2.102所示。不同于前文提到的分类器错误可视化,那是在一个单独窗口中可视化特定结果,而这里的可视化对象是数据集本身,尽管操作相似。
图2.102 可视化iris数据集的任意两个属性
观察图2.102,iris数据集的二维散点图绘制在窗口的主要区域中。窗口顶部有两个下拉列表框用于选择图轴,左侧的下拉列表框显示可用于X轴的属性,右侧的下拉列表框显示可用于Y轴的属性。X轴选择器下方是选择配色方案的下拉列表框,让用户根据所选属性对数据点着色,一般选择根据类别属性对数据点着色。绘图区域下方的Class colour选项组中有一个图例,描述何值对应何种颜色。如果值是离散的,可以为每个值更改颜色,单击该区域并在弹出的Select New Color(选择新颜色)对话框中做适当的修改即可。
绘图区的右侧是一连串条状图,每条代表一个属性,条状图内部的点显示属性值的分布。这些值垂直随机分布,帮助用户了解数据点的密度。单击条状图可以选择将该条属性轴用于主图,单击设置其为X轴,右击设置其为Y轴。条状图旁边的“X”和“Y”显示当前轴对应的属性,“B”表示一个属性同时用作X轴和Y轴。
窗口中Jitter滑块的功能是随机移动图中的所有点。向右拖动滑块可增加抖动量,这在观察高密度重叠的点方面非常有用。如果不设抖动,在同一点上即便有一百万个实例,看起来也与只有一个单独实例的点没有什么不同。
值得一提的是,Weka还提供另外一种打开二维散点图窗口的方式。在Weka GUI选择器窗口中,选择Visualization菜单下的Plot菜单项,然后选择一个ARFF文件,就可以打开如图2.103所示的窗口。可以看到,与图2.102相比,除了窗口标题栏的显示有所不同以外,其他部分完全一样。
图2.103 直接通过菜单打开的二维散点图
2.选择实例
可能会有这种情况,需要使用可视化工具来选择数据的子集。前文(参见2.3.6节中的“使用用户分类器”部分)已经讲述过这样一个示例,使用Classify标签页中的UserClassifier分类器,用户可以通过交互选择实例来构建自己的分类器。
Y轴选择器下方的下拉列表框用于设置选择实例的方式。可以采用以下四种方式来选择一组数据点。
(1)Select Instance(选择实例):单击一个单独的数据点会弹出一个窗口,列示它的属性。如果在同一位置出现一个以上的点,就显示多条属性。
(2)Rectangle(矩形):可以通过拖动鼠标创建一个矩形,将要选择的点包括在内。
(3)Polygon(多边形):可以创建一个自由形状的多边形,将要选择的点包括在内。单击添加多边形的顶点,右击完成创建。完成后,多边形会将第一个点与最后一个点相连接,因此多边形永远都是封闭的。
(4)Polyline(多折线):可以创建一条多折线,把一侧的点与另一侧的点分隔开来。单击添加折线的顶点,右击完成创建。多边形始终是封闭的,而多折线是开放的。
如果使用矩形、多边形或多折线选中一个图形区域,该区域会变成灰色。这时,单击Submit按钮,会删除灰色选择区域以外的所有实例。单击Clear按钮可以清除选定区域,而不影响图形。
如果从图中已经删除了一些点,Submit按钮会变成Reset按钮。单击Reset按钮可以撤销先前所有的删除操作,并回到原来包括所有点的图。最后,单击Save按钮可以将当前可见的实例保存为新的ARFF文件。
2.7.2 边界可视化工具
边界可视化工具(BoundaryVisualizer)不在探索者界面上,而是单独的可视化工具,需要从Weka GUI选择器窗口中打开。选择Visualization菜单下的BoundaryVisualizer菜单项,可打开如图2.104所示的BoundaryVisualizer窗口。
图2.104 BoundaryVisualizer窗口
窗口左上角的Dataset(数据集)选项组中,有一个Open File(打开文件)按钮,单击该按钮可以打开ARFF数据文件。由于边界可视化工具可以显示数据的二维散点图,因此特别适合拥有两个数值属性的数据集。在Weka自带数据集中,iris.2D.arff最为适合,其数值属性有petallength和petalwidth,是iris.arff数据集去除第一、二个属性得到的。
打开iris.2D.arff数据集后的界面如图2.105所示。Class Attribute(类别属性)选项组中默认选取最后一个属性为类别属性,可单击下拉列表框进行更改。Visualization Attributes(可视化属性)选项组显示用于可视化的两个数值属性,分别作为X轴和Y轴。左上角的Classifier(分类器)选项组用于选择分类器,只有在选择好分类器之后,右下角的Start(启动)按钮才变为可用状态。左下角显示数据的二维散点图,每个数据点的不同颜色表示该点所属的类别,Class color(类别颜色)选项组中标明何种颜色对应何种类别。Add/remove data points(添加/删除数据点)选项组用于添加或删除数据点,默认选中Add points(添加点)单选按钮,其右边的下拉列表框用于选择所添加数据点的类别,可单击左部的散点图来添加指定类别的数据;选中Remove points(删除点)单选按钮后,单击散点图会删除击中的数据点;慎用Remove all(删除全部)按钮,这会删除全部数据点,且无法撤销操作。上述操作只会影响内存中的数据,不会影响加载的数据集文件。Open a new window(打开新窗口)按钮用于打开一个新的BoundaryVisualizer窗口。Sampling control(抽样控制)选项组中包括三个文本框,Base for sampling(抽样基准)文本框用于非固定尺寸抽样的基准,Num. locations per pixel(每个像素的位置数量)文本框用于设置每个像素的样本数(仅用于固定尺寸),Kernel bandwidth(核带宽)文本框用于设置覆盖最近邻的核带宽。Plotting(绘图)选项组中有一个Plot training data(绘制训练数据)复选框,一般要选中该复选框,否则,只会绘制预测边界,而看不见训练数据。单击Start按钮可以启动分类训练过程,同时该按钮变成Stop(停止)按钮,随时可单击该按钮中断训练。
图2.105 打开iris.2D.arff后的结果
单击Choose按钮选择OneR分类器,使用默认设置,选中Plot training data复选框,然后单击Start按钮,注意按钮文字的变化,稍等片刻后训练完成,如图2.106所示。可以看到,OneR只使用一个属性,这里的petalwidth属性显然比petallength属性更容易分开三种类别,因此按照Y轴对数据点进行分类。
图2.106 OneR分类器的可视化边界
决策边界就是分类器学习到的决策规则,该规则能对未知数据进行预测。落在红色区域(最下方)的数据点都预测为Iris setosa,绿色区域(中间)为Iris versicolor,蓝色区域(最上方)为Iris virginica。要注意到OneR是“硬”分类,它硬性划分不同区域,因此对测试样本的预测是“非此即彼”模式。
2.7.3 代价/收益分析可视化
错误分类无疑会产生代价,且不同类别的误判错误的代价也不同。例如,将癌症患者误判为健康人士的错误代价显然比将健康人士误判为癌症患者要严重得多,前者可能会因为耽误治疗而造成生命损失,后者最大的损失不过是在精神方面。
Weka专门为挖掘者提供了一个交互式的可视化界面,探索不同的代价场景。这就是Cost/Benefit Analysis(代价/收益分析)窗口。
当分类器运行完毕后,在结果列表中右击条目,选择快捷菜单中的Cost/benefit analysis菜单项,就会弹出如图2.107所示的代价/收益分析窗口。
图2.107 代价/收益分析窗口
图2.107中显示的是使用NaiveBayes分类器对breast-cancer.arff建模后的结果。本例中,共有287个实例分别用于训练和测试。测试实例根据预测为recurrence-events(复发事件)类别的概率大小进行排名,左边的图为提升图(lift chart),图上标识为阈值曲线(ThresholdCurve);右边的图为总代价(total cost)或总收益(total benefit)图,图上标识为代价收益曲线(Cost/Benefit Curve)。两张图的横坐标都为样本大小(Sample Size)。
在窗口中部的Threshold选项组中,拖动水平滑块可以改变从排名列表中选取的占总体(Total Population)的百分比,当滑块滑动时,两张图上的大叉号会显示当前的对应点。窗口左下部的Confusion Matrix(混淆矩阵)选项组中显示TP、FN、FP和TN的样本数及百分比。窗口右下部的Cost Matrix(代价矩阵)选项组中为用户需要输入的数值,输入不同数值会影响上面的曲线形状。代价矩阵右边显示当前Cost、Random和Gain的具体数值,可以通过窗口右下角的单选按钮组选择到底显示Cost还是Benefit。Maximize Cost/Benefit(最大化代价/收益)和Minimize Cost/Benefit(最小化代价/收益)按钮分别用于自动选取代价/收益曲线上最大值和最小值的对应点。
在Threshold选项组中,滑块上部有一个单选按钮组,默认选中“% of Population”(总体百分比)单选按钮。另外两个选项为“% of Target(recall)”和Score Threshold,前者通过调整查全率水平(recall level,应包含在样本中的正例的比例)来选取样本大小,后者则通过调整正例类别的概率阈值进行选取。
2.7.4 手把手教你用
1.Visualize标签页的使用
Weka的可视化功能最适合于观察研究数值型数据集,因此这里加载iris.arff文件。鸢尾花数据集中包含三种类别,即Iris setosa、Iris versicolor和Iris virginica,各有50个样本。
单击Visualize标签,切换到如图2.108所示的Visualize标签页。图中显示5行5列的小散点图,即横坐标和纵坐标都为5,对应数据集里的五个属性:sepallength(花萼长)、sepalwidth(花萼宽)、petallength(花瓣长)、petalwidth(花瓣宽)和class(类别)。
图2.108 Visualize标签页
单击第二行第一列的小散点图,就会弹出如图2.109所示的放大散点图。其中,横坐标是sepallength属性,纵坐标是petalwidth属性。实例显示为小叉号,颜色由实例的类别确定。散点图的上部有四个下拉列表框,分别用于设置X坐标、Y坐标、颜色、选择实例,还有四个按钮和Jitter滑块。
图2.109 放大的散点图
单击图2.109中的任意一个小叉号,就会弹出如图2.110所示的实例信息窗口,列出所选实例的全部属性值。观察后关闭该窗口,回到图2.109所示的窗口。
图2.110 实例信息窗口
现在通过放大的散点图窗口上部的下拉列表框,将X坐标设置为petalwidth,Y坐标设置为petallength,观察散点图的变化情况。Colour: class(Nom)下拉列表框用于改变数据点的颜色编码,其中,括号内的Nom指标称型属性,Num指数值型属性。
散点图窗口右部的条状图中,每条表示一个属性,条状图左边的红色“X”和“Y”字符分别表示当前的X坐标和Y坐标为何种属性。条状图中,实例被放置在适当的水平位置,并随机分布在垂直方向上。单击条状图,可使用对应属性作为散点图的X坐标。右击条状图,可使用对应属性作为散点图的Y坐标。使用上述方法将X坐标和Y坐标分别改回sepallength属性和petalwidth属性。
Jitter滑块用于随机移动代表实例的小叉号,这是为了能显示彼此重叠的每个实例的真实位置。例如,图2.110中所显示的两个实例,在图2.109中重叠为一个点。读者可通过移动Jitter滑块来体验其效果。
Select Instance(选择实例)下拉列表框以及Reset、Clear、Save按钮用于修改数据集。可以选择某些实例,并删除其他实例。例如,尝试这样使用Rectangle(矩形)选项:首先在下拉列表框中选择Rectangle选项,然后拖动鼠标来选择一个区域。这时,Reset按钮会自动变成Submit按钮,单击Submit按钮,矩形以外的所有实例都将被删除。用户可以单击Save按钮将修改过的数据集保存到文件中。当然,单击Open按钮,可以打开保存后的数据集文件;单击Reset按钮,可以恢复到原来的数据集。
2.可视化数值型类别属性
在前一个例子中,尽管有多个属性是数值型的,但类别属性却是标称型的。本例查看类别属性为数值型的数据集。加载data目录下的cpu.arff文件,单击Visualize标签,切换到Visualize标签页,如图2.111所示。
图2.111 可视化cpu数据集
可以注意到,窗口底部的颜色编码和前例不同,这里显示为彩色的细横条,从左到右颜色连续由蓝色逐渐变到橙色。
此外,其他功能都与类别属性为标称型的一样,读者可自行尝试上一个实验的所有操作。
3.使用边界可视化工具
本实践可视化朴素贝叶斯和k-最近邻分类器的边界。
首先启动BoundaryVisualizer窗口,单击Open File按钮加载iris.2D.arff数据集,单击Choose按钮选择NaiveBayes分类器。NaiveBayes分类器假设所有属性都条件独立地给出特定的类别概率值,意味着整个类别的概率由每个属性条件概率的简单相乘(且考虑到类别先验概率)得到。换句话说,如果知道两个属性沿着X轴和Y轴(以及类别先验概率)的类别概率,就可以通过将它们的值相乘然后规范化的方式计算空间中任意点的概率值。使用边界可视化工具,很容易理解其工作原理。更多贝叶斯分类器的工作原理请参见第6章和附录B。
Weka的NaiveBayes分类器默认假设属性在给定类别的条件下为正态分布,一般通过在通用对象编辑器中设置useSupervisedDiscretization选项为True,使用有监督离散化技术对数据中的数值属性进行离散化。在大多数NaiveBayes的实际应用中,使用有监督离散化比默认方式更有效,且产生的可视化更容易理解,因此这里使用有监督离散化。
单击Choose按钮旁边的文本框,在弹出的通用对象编辑器中将useSupervisedDiscretization选项设置为True,单击OK按钮确定,此时文本框中应该显示NaiveBayes -D。
确保选中Plot training data复选框,然后单击Start按钮启动分类训练过程,分类器可视化边界结果如图2.112所示。可以看到,有监督离散化将数值属性petallength和petalwidth离散化为三个取值,在散点图上形成3行3列的矩阵,重叠区域显示多种颜色的混合色,表示分类器难以确定在这些区域内的测试样本应该预测为哪一种类别。
图2.112 NaiveBayes的可视化边界
下面可视化k-最近邻分类器的边界。IBk是Weka实现的k-最近邻分类器,它通过查看测试实例的k个最近邻并计算其所属类别的个数来估计类别概率。
还是使用iris.2D.arff数据集,单击Choose按钮选择IBk分类器,保持其默认选项不变。然后单击Start按钮启动分类训练过程,结果如图2.113所示。可以看到,对于每一个类别,IBk输出的是概率估计,边界可视化工具根据区域所属类别的概率输出红色、绿色、蓝色及它们的混合色。由于k默认为1,只考虑最近邻的一个成员,因此颜色似乎永远只能是纯色,即红色、绿色或蓝色。散点图确实几乎没有混合色,因为某个类别概率为1时其他概率就为0。但在中上部,还是存在一小片区域是两种颜色的混合。这是怎么回事呢?答案是,尽管可能性不大,但还是存在多个不同类别的数据点占据同一个位置的可能,这样就能合理解释混合颜色的现象。请读者使用Visualize标签页自行验证。
图2.113 IBk的可视化边界
最后研究增大k值对IBk可视化边界的影响,图2.114和图2.115分别是k=5和k=10的条件下得到的可视化边界。可见,增大k值之后,边界层次显得更为丰富,这是因为最近邻个数增加导致测试实例属于不同类别的概率组合增多。另外,还要注意到IBk与OneR不同,IBk属于“软”分类,不同纯色之间的界限不分明,不是“非此即彼”,而是“亦此亦彼”。一般将处于混合色中的测试实例预测为概率值最大的类别。
图2.114 k=5的IBk可视化边界
图2.115 k=10的IBk可视化边界
4.代价/收益分析可视化
在探索者界面中打开breast-cancer.arff数据集,切换至Classify标签页,选取NaiveBayes分类器,保持默认选项,单击Start按钮,然后在结果列表中右击并选择Cost/benefit analysis|recurrence-events菜单项,弹出前文如图2.107所示的代价/收益分析窗口。
选中窗口右下角的Benefit单选按钮切换至收益,然后按照图2.116来设置代价矩阵,并单击Maximize Cost/Benefit按钮。可以看到,大叉号已经位于代价/收益曲线的最大值上,当前总体的百分比为31.8182%,分类准确率为72.7273%。
图2.116 代价收益分析结果
现在解释代价矩阵中的数值含义,矩阵左上角的3.0表示当测试实例为正例(recurrence-events)时,分类器将其预测为正例(即TP)得到的收益,右上角的-1.0表示分类器将其预测为负例(即FN)得到的负收益,以此类推。数值越大,表示收益越大;数值越小,则收益越小。在真实世界中,这意味着正确判断癌症复发病人得到的收益(3.0)比正确判断不会复发病人得到的收益(1.0)大很多。读者可尝试改变代价矩阵,观察代价/收益曲线的变化。
下面研究两个极端的情形。首先将滑块滑动到最左边,可以观察到提升图的大叉号到了坐标原点上,同时显示总体占比为0%,如图2.117所示。此时的物理含义是将全体样本都预测为负例(no-recurrence-events)。从混淆矩阵中可以看到,由于真实的正例仅占不到30%的比例,因此分类器的分类准确率还是超过70%。这会让85个复发患者得不到及时治疗,效果极差。
图2.117 总体占比为0%
然后将滑块滑动到最右边,可以观察到提升图的大叉号到了右上角,同时显示总体占比为100%,如图2.118所示。此时的物理含义是将全体样本都预测为正例(recurrence-events)。从混淆矩阵中可以看到,此时分类器的分类准确率不到30%。尽管这样能够让85个复发患者得到及时治疗,但会让其余无辜的201人饱受精神折磨,代价也相当高昂。
图2.118 总体占比为100%