我正在研究是否可以根据编码风格自动对学生的代码进行评分。这包括避免重复代码、注释掉代码、变量命名错误等。
我们正在尝试根据过去学期的作文分数(范围从 1-3)来学习,这很好地导致了监督学习。基本思想是我们从学生提交的内容中提取特征,并制作一个特征向量,然后使用 scikit-learn 通过逻辑回归运行它。我们还尝试了各种方法,包括在特征向量上运行 PCA 以降低维度。
我们的分类器只是猜测最频繁的类别,得分为 2。我相信这是因为我们的特征根本无法以任何方式进行预测。有没有其他可能的原因让监督学习算法只猜测主导类?有什么办法可以防止这种情况发生吗?
我认为这是由于功能无法预测,有没有办法确定什么是“好”功能?(好的,我的意思是可区分的或预测的)。
注意:作为一项附带实验,我们通过让读者对已经评分的作业进行评分来测试过去成绩的一致性。他们中只有 55% 的项目给出了相同的作文分数(1-3)。这可能意味着该数据集根本无法分类,因为人类甚至无法始终如一地评分。关于其他想法的任何提示?或者事实是否如此?
功能包括:重复代码行数、平均函数长度、1 个字符变量的数量、包含注释掉代码的行数、最大行长度、未使用的导入计数、未使用的变量、未使用的参数。还有一些……我们可视化了所有特征,发现虽然平均值与分数相关,但变化确实很大(没有希望)。
编辑:我们项目的范围:我们只是试图从一个类中的一个特定项目(给出骨架代码)中学习。我们还不需要一概而论。