随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程

该发明提出了一种基于随机森林的C语言源代码静态评分方法,通过构建源代码特征关系表,建立语法树,利用随机森林分类器对源代码内在逻辑性进行评分,尤其适合编程初学者和非专业人员。该方法能够对未通过所有测试样例的代码进行评分,提高了评分的全面性和准确性。
摘要由CSDN通过智能技术生成

9bdbe81f343793b26add69ed17a275a0.gif

本发明涉及评分领域及机器学习领域,它特别涉及一种基于随机森林的c语言源代码静态评分的构建方法。

背景技术:

c语言源代码静态评分是指对根据一定的题目描述做出解答的c语言源代码进行评分。目前,主要流行的评分方法为样例评测方法,即对所做出解答的c语言源代码测试一定的样例,根据所输出正确答案的所占比例进行评分。这种方法忽略了源代码内在的逻辑性得分,只能针对最终的答案进行评分,这对于非计算机专业以及编程初学者并不友好,对于部分正确的代码不能给出相应的分数。为此,我们提出了一种基于随机森林的c语言源代码静态评分方法。

技术实现要素:

本发明的目的是为了解决现有技术中存在的缺点,而提出的一种基于随机森林的c语言源代码静态评分方法。

为了实现上述目的,本发明采用了如下技术方案:

一种基于随机森林的c语言源代码静态评分方法,包括以下步骤:

s1:定义c语言源代码特征为由行结点构造成的关系表;

s2:建立c语言源代码的语法树;

s3:分析c语言源代码的特征种类;

s4:根据s2中的语法树对c语言源代码进行特征提取;

s5:构建随机森林分类器;

s6:对c语言源代码进行静态评分。

优选的,所述s1中c语言源代码特征行结点为:对c语言源代码的每一行构建行结点,行结点信息包括:行号,行源代码,变量列表,函数列表,结点类型;关系表为由行结点信息构建成的二维关系表。

优选的,所述s2中c语言源代码的语法树为:一个由行结点根据代码嵌套关系构造而成的多叉树,语法树中每一层结点为同一个花括号中的结点;构建方法为:首先,对c语言源源代码进行预处理,预处理操作包括分行,去除注释,去除头文件等操作;其次,对预处理过的c语言源源代码进行构建行结点;接着,由c语言入口函数main为根节点进行构造语法树,每一个行结点的父亲结点为当前树的根节点,每进入一个左花括号则开始构建一棵子树,子树的根节点为左花括号所在的结点,遇到右花括号则当前子树构建完毕,直至c语言代码最后一行,则c语言源代码的语法树构建完成。

优选的,所述s3中c语言源代码的特征种类为:行结点本身的特征,包括赋值,声明,调用,控制,单路分支,多路分支,循环;行结点与行结点之间的特征关系,包括顺序,并列,进入,跳出。

优选的,所述s4的c语言源代码的特征提取方法为:对于结点本身的特征可以通过对c语言的关键字检测实现,如:检测循环语句时可以通过对当前行检索for,while关键字进行确定;对于结点与结点之间的关系特征则需要通过s2中的语法树进行实现,操作为:同一层的兄弟结点的关系为顺序或者并列,直系子树与父亲结点的关系为进入或者跳出,语法树的存在可以很方便快捷的处理存在多层嵌套的代码。

优选的,所述s5随机森林分类器为:随机森林是机器学习中一个分类算法,使用已标注好的数据进行训练,属于监督学习和集成学习的一种;构建方法为:在此我们的标注数据为人工评分过的c语言源代码,人工评分等级为a,b,c和d,将人工评分的c语言源代码按照s3所述的方法提取出特征,将特征送入随机森林分类器进行训练,待模型收敛后得到随机森林模型。

优选的,所述的s6的c语言源代码静态评分操作为:将待测的c语言源代码进行预处理,对预处理后的c语言源代码按照s5所示进行特征提取,将提取后的特征送入s5得到的随机森林分类器后,即可得到最终的评分结果。

本发明提出的一种基于随机森林的c语言源代码静态评分方法,有益效果在于:本发明在应用的过程中,解决了c语言源代码特征的定义、c语言源代码特征的提取及c语言源代码特征的评分,与现有的评分方法相比,本方法可以对未通过全部测试样例的源代码进行评分,可以对c语言源代码内在的逻辑性进行评分,十分适合初学者以及需要锻炼编程的人;本方法使用随机森林分类器,计算开销小,且模型的抗扰动效果较好,误差较小,为静态评分提供了较好的结果。

附图说明

图1是本方法一种基于随机森林的c语言源代码静态评分方法的流程图;

图2是本方法一种基于随机森林的c语言源代码静态评分方法的随机森林分类器构建的流程图。

图3是本方法一种基于随机森林的c语言源代码静态评分方法的随机森林模型构建说明图。

图4是本方法一种基于随机森林的c语言源代码静态评分方法的随机森林基分类器决策树的说明图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

实施例1

如图1,一种基于随机森林的c语言源代码静态评分方法,步骤包括:s1:选择待评测的c语言源代码文件;s2:对带评测的c语言源代码进行预处理;s3:对待评测的c语言源代码进行特征提取;s4:将提取到的特征送入训练好的随机森林分类器;s5:得到最终的对选定的c语言源代码文件的评分结果。

对c语言源代码的预处理的步骤为:将选定的c语言代码按照分号换行,每一行只有一句代码,并去除头文件与注释。

对c语言源代码的特征提取步骤为:对每一行代码建立行结点,再由行结点构建语义树,最终通过构建的语义树得到c语言源代码的流程特征。

对随机森林分类器的构建为:建立随机森林分类器模型,通过输入已评好分的c语言源源代码模板进行训练随机森林分类器。

对c语言源代码的评分步骤为:当由随机森林分类器得出的评分在90分以上评定为a,评分在80~90范围内评定为b,评分在70~80范围内评定为c,评分在60~70分评定为d,小于60分视为不及格。

实施例2

如图2,一种基于随机森林的c语言源代码静态评分方法,其随机森林算法分类器的决策步骤为:s1:选择一个c语言题目;s2:导入已评好分的c语言源代码;s3:对所有评好分的c语言源代码进行预处理和特征提取;s4:随机森林分类器开始训练;s5:随机森林分类器达到训练标准,结束训练,最终得到了该题目的随机森林分类器。

对c语言源代码的预处理的步骤为:将选定的c语言代码按照分号换行,每一行只有一句代码,并去除头文件与注释。

对c语言源代码的特征提取步骤为:对每一行代码建立行结点,再由行结点构建语义树,最终通过构建的语义树得到c语言源代码的流程特征。

对随机森林分类器的训练步骤为:将提取到的c语言源代码的特征作为输入,输出为对输入的c语言源代码的评分,每次迭代时将模型的输出评分的损失进行反向传播调整模型分类器的参数,迭代直至模型收敛,即误差小于设定的阈值或者迭代次数大于设定的阈值,训练结束后即得到本题目的随机森林分类器。

实施例3

如图3,一种基于随机森林的c语言源代码静态评分方法,其随机森林模型构建步骤包括:s1:选择已评好分的c语言源代码数据集;s2:对选择的数据集进行bootstrap采样生成若干份子数据集;s3:对若干份子数据集进行特征提取;s4:将提取到的特征集分别送入决策树中进行训练;s5:根据每个决策树的输出结果投票选择出投票数最多的评分等级为输出结果。图中①②③④分别为在训练过程中选择的特征,可能依次为:顺序,分支,并列,跳出等。

对已评好分的c语言源代码数据集的数据集为:数据集为c语言源代码以及人工评定本源代码的评分等级。

对选择的数据集进行bootstrap采样,采样步骤为:bootstrap为随机有放回采样,即从原始样本中进行有放回采取k个子数据集。

对若干份子数据集进行特征提取步骤为:对每一个c语言的代码进行预处理,然后对每一行代码建立行结点,再由行结点构建语义树,最终通过构建的语义树得到c语言源代码的流程特征。

对将提取到的特征集分别送入决策树中进行训练,训练步骤为:将提取到的特征集送入决策树训练直至训练结束,训练结束的条件为决策树生长到了设定的高度,或者误差小于一定的阈值,决策树为一个根据特征数据集进行分类的分类树。

对根据每个决策树的输出结果投票选择出投票数最多的评分等级为输出结果,投票步骤为:对k个决策树的评分结果进行统计,选择最多的统计结果,作为最终随机森林的结果。

例如:有10棵决策树,其中5棵决策树将代码评定为a,3棵评定为b类,1棵评定为c类,1棵评定为d类,则最终选择出现次数最多的a类作为最终输出结果。

实施例4

如图4,一种基于随机森林的c语言源代码静态评分方法,其随机森林基分类器决策树的决策流程为s1:提取选定的c语言源代码的代码特征;s2:将提取到的特征输入到当前的决策树中;s3:根据决策树的决策流程输出当前决策树的决策结果。

对c语言源代码的特征提取步骤为:对每一行代码建立行结点,再由行结点构建语义树,最终通过构建的语义树得到c语言源代码的流程特征。

对选取到的特征输入到当前的决策树步骤为:在随机森林分类器中有众多的决策树模型,由初始数据集划分而成的子数据集对应一个决策树模型,将选取的特征集合输入当对应的决策树模型中。

对根据决策树的决策流程输出当前决策树的决策结果步骤为:根据所输入的特征集合计算每个决策树结点的划分结果然后进入下一层的决策树结点直至到决策树的叶子结点(即决策树的最后一层结点),根据叶子结点的输出概率划分当前决策树的决策结果。在0.9~1内评定为a,在0.8~0.9范围内评定为b,在0.7~0.8范围内评定为c,在0.6~0.7分评定为d,小于0.6分视为不及格。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值