6.4.3 实验结果与分析

6.4.3 实验结果与分析

源代码作者身份属性识别实验数据包括两个数据集。第一个数据集包括八位程序员的8 000个程序,每位程序员1 000个程序,第二个数据集由502位程序员的程序构成,是一个不平衡的数据集。利用十折交叉验证来评估本节方法的性能。

在源代码作者身份属性识别实验中,本节方法的性能与下面方法的性能进行比较。具体地,在特征集B1,B2,B,F1,F2,F3,F上,采用基于决策树、随机森林和序列最小优化的识别方法。

表6.9和表6.10给出了采用决策树、随机森林和序列最小优化,利用不同特征集的识别性能。特征集B1是字符集6-gram特征集,特征集F2是连续词段级3-gram特征,特征集F3是离散词段级2-gram跳跃1词段特征集。

表6.9 数据一的源代码作者身份属性识别性能

表6.10 数据二的源代码作者身份属性识别性能

从表6.9和表6.10可以看出以下事实。第一,在两个数据集上,利用决策树、随机森林和序列最小优化,在特征集F,F∪B1和F∪B上准确率高于特征集B1和B。因此,对于本节构建的特征集F,不论是否集成B1和B均优于特征集B1和B的性能。第二,在两个数据集上,利用特征集F∪B和序列最小优化的识别性能最高。

表6.11和表6.12给出在特征集B1,B2,B,F1,F2,F3,采用决策树、随机森林和序列最小优化的识别性能。表6.11和表6.12的实验结果表明,在数据集一上,采用决策树、随机森林和序列最小优化,特征集F2,F3的识别性能优于特征集B1,B2和B;在数据集二上,采用随机森林和序列最小优化,特征集F3的识别性能优于特征集B1,B2和B。因此,实验结果表明特征集F2,F3的有效性。另外,在表6.11的数据集一上,基于特征集F2利用序列最小优化的识别性能最高;在表6.12的数据集二上,基于特征集F3利用序列最小优化的识别性能最高。

表6.11 数据一的单个特征集的源代码作者身份属性识别性能

表6.12 数据二的单个特征集的源代码作者身份属性识别性能

图6.11和图6.12展示不同特征维度的源代码作者身份属性识别准确率。特征集F2,F3的维度设置为1 000,2 000,3 000,4 000,5 000。图6.11和图6.12的实验曲线图表明,在两个数据集上,利用特征集F∪B1或F∪B,支持向量机的识别性能高于决策树和随机森林。整体上,利用特征集B和本节构建的特征集F,采用支持向量机获得最高性能。

图6.11 数据集一的不同特征维度的作者身份属性识别性能

图6.12 数据集二的不同特征维度的作者身份属性识别性能

综上所述,本节阐述了一种面向程序员的作者画像识别方法。该方法包含连续词段级N-gram模型、离散词段级N-gram模型、基于数组和方法等的多级上下文模型。作者画像捕获了不同程序员在关键字、标识符、运算符、语句、方法和类以及程序不同粒度构成要素之间的搭配模式方面的显式和隐式的个人编程特征。此外,作者画像中提取的特征独立于程序的功能或目的,不受限于特定用户定义的标识符名称,例如变量、方法、类和接口的名称。本节提供关于源代码作者身份识别的一种有前途的方法。