我正在研究是否可以根据编码风格自动计算学生代码的得分。这包括避免重复代码,注释掉代码,变量命名错误等等。
我们正在尝试根据过去学期的作文分数(从1-3开始)学习,这很好地导致了有监督的学习。基本思想是我们从学生的提交中提取特征,并创建feature_vector,然后使用scikit-learn通过逻辑回归运行它。我们还尝试了各种各样的事情,包括在特征向量上运行PCA以减少维数。
我们的分类器只是猜测最频繁的类,即2分。我相信这是因为我们的功能无论如何都不能预测。 监督学习算法是否还有其他可能的原因只能猜测显性类别?有没有办法阻止这种情况?
我认为这是因为这些功能不具备预测性,是否有办法确定“好”的功能是什么?(好的,我的意思是可辨别的或预测性的)。
注意:作为一项辅助实验,我们通过对已经评分的读者成绩分配测试了过去成绩的一致性。只有55%的人给出了相同的项目成分(1-3)。这可能意味着这个数据集根本无法归类,因为人类甚至无法进行一致评分。 有关其他想法的任何提示吗?或者是否实际情况如此?
功能包括:重复代码行数,平均函数长度,1个字符变量数,包含注释掉代码的行数,最大行长度,未使用导入数,未使用变量,未使用的参数。还有一些...我们将所有功能可视化,并发现虽然平均值与得分相关,但变化非常大(不太有希望)。
编辑:我们项目的范围:我们只想在一个类中学习一个特定的项目(给出骨架代码)。我们还不需要概括。
答案 0 :(得分:1)
功能包括:重复代码行数,平均函数长度,1个字符变量数,包含注释掉代码的行数,最大行长度,未使用导入数,未使用变量,未使用参数。还有一些..
您是否尝试过规范化功能?您似乎想要训练一个能够将任何给定代码分类到一个类别中的神经网络。现在因为不同的代码会说,不同数量的重复代码行和不同数量的未使用变量但可能同样不好。因此,您需要将参数标准化为“有用”代码的总行数。
未能找到好的功能非常令人生畏。停滞不前时,请始终遵循自己的直觉。如果人类可以完成任务,那么计算机也可以。由于您的功能看起来非常适合评估任何给定的代码,因此它们应该工作(假设它们已正确使用)。
摘要:功能的规范化应解决问题。
答案 1 :(得分:1)
只是一个想法 - Andrew Ng在Coursera上教授机器学习课程(https://www.coursera.org/course/ml)。学生在整个班级提交了几个编程作业。我记得曾经读过(虽然不幸的是我现在找不到这篇文章),有一些正在进行的研究试图将学生提交的课程作业集中在课堂上,直觉认为学生在作业上会犯下常见的错误。 / p>
不确定这是否对您有所帮助,但也许将其视为无监督学习问题可能更有意义(例如,只是寻找不同代码示例中的相似性,直觉相似的代码示例应该得到相似的分数)
答案 2 :(得分:0)
您希望平衡目标类别(接近相等数量的1,2,3分数)。您可以随机抽取超大类,引导样本大小不足的类,或者使用算法来解释不平衡的数据(不确定Python中的那些)。
确保您进行交叉验证以防止过度拟合
有几种方法可以确定哪些属性很重要:
选择具有最高交叉验证准确度的属性组合。
您还可以使用属性列的乘积来查看它们是否会同时产生效果。