第十章 实验结果 (Experimental Validation)
实验环境搭建
绝大多数计算机研究领域是需要由实验结果来验证以支持新方法的有效性的。因为计算机实验具备可重复性,即在给定的实验环境下,无论何时何地,
计算机运行的结果都是相同的。所以,实验结果章节需要详细地给出实验环境,实验数据以及操作过程,以便于其他研究人员重现实验结果。
基于以上原因,实验章节的第一部分一般是详细介绍实验环境搭建,数据准备和实验的操作过程。这其中包括:
在实验部分,一个常见的问题是使用真实数据还是合成数据?一般来讲,这两种数据各有用途。
通常使用真实数据做出的结果更具有说服力。毕竟计算机是一门应用学科,它更注重于新方法在实际应用中的有效性。
然而,有时使用真实数据很难完全展示新方法的特点,或者获取真实数据存在一定难度。所以,在这类情况下,使用合成数据是一个较好的选择。
总而言之,在真实数据与合成数据的取舍当中,我们更应该从实验目的以及实验结果的展示效果着手,选择实验数据。
实验内容设计
在将实验的基本信息介绍清楚之后,接下来就是描述具体的实验结果了。实验结果一般会围绕几个不同的侧重点展开描述。
具体如何操作,应视研究内容而定。然后,它们之间有一些相通性。以下列举一些常见的实验内容,以供参考。
实验制图
为了将实验结果有效合理的展示出来,实验作图工具必不可少。笔者常常使用gnuplot工具绘制柱状图,折线图,和三维折线图。
gnuplot是一个免费的作图工具。gnuplot作图过程由命令驱动,能画出多种多样的科学用图。本文着重介绍使用gnuplot工具生成柱状图、折线图和三维折线图。
在这里查看gnuplot的相关信息。
以下五个例子均生成eps文件格式的图片。eps图片是矢量图片,在论文中,可以任意放大和缩小而并不损失图片的清晰度。正是因为这个原因,论文中应尽量使用矢量图。
柱状图
柱状图常用于多方法之间比较某一个具体的值。这个值可能是运行时间、开销、距离等指标。如下例所示,该图比较了四种方法的执行时间。执行时间的单位为秒。
该图通过由柱状在Y轴的高度来体现方法的优劣。有时,柱状的高度差别很小,Y轴从原点开始,可能无法很好的显示方法之间的差异。所以,此时可只显示Y轴的某个区间(例如:[50-100])。
在使用gnuplot绘制实验图时,笔者将gnuplot的绘制指令和绘制数据分别存放在两个文件中。例如,可将这两个文件命名为bar.dem和bar.data。
在存放这两个文件的目录中,执行"gnuplot bar.dem",则gnuplot会自动地生成图片文件bar.eps。这两个文件的内容如下。
bar.dem文件的前两行设置了文件输出的格式是eps格式,字体是Times-Roman,28号字。输出图片的文件名为bar.eps。
set xlabel和set ylabel分别设置X轴和Y轴的标签内容,以及使用的字体和字号。
set key设置了caption放在图片的左侧顶部。
set xrange和set yrange设置X轴与Y轴的取值范围。如果只显示X轴和Y轴的某一值域时,可在这个命令中设置。第一个字符井号#表示当前行被注释掉了。
set boxwidth设置柱状的宽度。set style则是设置柱状着色的样式。
plot命令是绘制图片的命令。它会根据当前已设置的状态,绘制出图片。第一个参数"bar.data"指明了数据存放在这个文件中,
using指明了使用数据文件中第一栏和第三栏的数据绘制图片。xtic(2)则指明了使用第二栏数据作为柱状的名字。title设置了在caption中的名字。with boxes表示这是绘制的柱状图。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
相对应的数据文件bar.data的内容如下。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Histogram图
当使用柱状图展示某数据的总和时,可使用Histogram图将各部分的数据也展示出来。
本例使用的是set style histogram rowstacked。gnuplot同时还支持columnstacked。rowstacked指的是,在数据文件中,按行叠加,
即在某行内的数据叠加在一个柱状上;而columnstacked指的是,按列叠加,即在某列内的数据叠加在一个柱状上。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
其数据文件内容如下。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
另一种Histogram图常用于展示某数据的平均值。与此同时,该图还可以展示最大值与最小值。如下图所示。
在本例中,使用了set style histogram errorbars。其他的设置与上述例子类似。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
其数据文件内容如下。在该文件中,第2-4栏,第5-7栏和第7-9栏分别包含了一组平均值、最大值和最小值。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
折线图
折线图是最为常见的一种用于展示实验结果的图型。因为折线图不仅能显示多个方法之间的差距,而且还可以展示随着某项指标的变化,各个方法的趋势和走向。
为了展示gnuplot的灵活性,下面的例子使用了四种颜色的曲线表示四种方法的执行时间,并且这四种曲线还使用了不同的样式以增强区别,
以便于使用黑白打印机的读者能够清晰辨认。黑白图片和彩色图片均能在论文中使用。而且越来越多的论文采用了彩色图片,因为使用彩色能更好的突出图片需要强调的内容。
与绘制柱状图类似,本例也将绘图命令和绘图数据分别存放在plot.dem和plot.data文件中。在指令文件plot.dem中,首先设置了输出图片的格式为eps,图片的全局字体为Times-Roman,28号字。
输出文件为plot.eps。然后,分别设置了X轴和Y轴的标签,caption放置在图片的左上角,设置X轴和Y轴的取值范围。这个例子的一个不同之处在于,由于Y轴的取值范围非常大,
这会导致曲线的某些取值点非常低,非常接近于X轴,致使读者无法分辨该点的取值。因此,在此例中,Y轴采用了对数显示的方法,即10,100,1000,10000等距的显示在Y轴上。
set logscale y 10指定了Y轴以10为底数的对数的显示方式。set format Y "10^{%T}"则设置了Y轴上各个标记点的值的显示格式。最后,plot命令绘制整个折线图。其中,
每一行表示绘制某一方法的样式。例如,第一行绘制Method A。Method A的数据出现在plot.data文件中的第一栏和第二栏,名字为Method A,该折线需要标记出取值点的位置(with linespoints),
并且设置折线的宽度为5,使用红色绘制。具体的参数设置方法请参考gnuplot手册。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
相对应的数据文件plot.data的内容如下。第一栏为各方法在X轴上的取值,其余四栏则是各个方法在Y轴上的取值。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
三维折线图
在折线图的基础上,可使用三维折线图来展示当有两个参数同时变化时的各个方法的趋势和走向。与绘制折线图不同的是,一个数据文件仅包含一个方法的数据。
换句话说,当比较两个方法时,绘制三维折线图需要使用一个指令文件和两个数据文件,以此类推。
在本例中,它们是3d.dem,3d-1.data和3d-2.data。
本例的大部分指令与上述例子类似,X轴、Y轴和Z轴分别由两条命令设置标签、字体、字号和位置。offset character可在图片中设置标签文字的位置,
norotate和rotate by可用于旋转标签的文字。Z轴使用对数方式展示。在最后,splot命令用来绘制三维折线图,每一行表示一种方法的曲线样式。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3d-1.data的数据为:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3d-2.data的数据为:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX