我正在研究是否有可能基于编程风格自动评分学生的代码。这包括避免重复的代码、被注释掉的代码、变量命名不规范等等。
我们试图通过过去学期的组成成绩(从1到3)来学习,这很适合监督学习。基本思路是从学生提交的作业中提取特征,生成特征向量,然后使用scikit-learn中的逻辑回归进行训练。我们还尝试了各种方法,包括对特征向量运行PCA以减少维度。
我们的分类器只是猜测最常见的类别,即得分为2分。我认为这是因为我们的特征根本没有任何预测性。监督学习算法只猜测主导类别的其他可能原因是什么?有没有办法防止这种情况发生?
由于我认为这是由于特征没有预测性,那么如何确定“好”的特征是什么?(好的意思是可以区分或预测)
注意:作为一个副实验,我们测试了过去的成绩评分的一致性,让读者评分已经评分过的作业。只有55%的人给出了相同的组成成绩(1-3)。这可能意味着这个数据集根本无法分类,因为人类甚至不能一致地评分。有关其他想法的任何提示?或者那是否属实?
特征包括:重复代码行数、平均函数长度、1个字符变量数量、包含注释代码行数、最大行长度、未使用导入、未使用变量、未使用参数的计数。还有一些...我们可视化了所有特征,并发现虽然平均值与成绩相关,但变异性非常大(不太令人鼓舞)。
编辑:我们项目的范围:我们只试图从一个班级中一个特定项目(给出框架代码)中学习。我们目前不需要泛化。
我们试图通过过去学期的组成成绩(从1到3)来学习,这很适合监督学习。基本思路是从学生提交的作业中提取特征,生成特征向量,然后使用scikit-learn中的逻辑回归进行训练。我们还尝试了各种方法,包括对特征向量运行PCA以减少维度。
我们的分类器只是猜测最常见的类别,即得分为2分。我认为这是因为我们的特征根本没有任何预测性。监督学习算法只猜测主导类别的其他可能原因是什么?有没有办法防止这种情况发生?
由于我认为这是由于特征没有预测性,那么如何确定“好”的特征是什么?(好的意思是可以区分或预测)
注意:作为一个副实验,我们测试了过去的成绩评分的一致性,让读者评分已经评分过的作业。只有55%的人给出了相同的组成成绩(1-3)。这可能意味着这个数据集根本无法分类,因为人类甚至不能一致地评分。有关其他想法的任何提示?或者那是否属实?
特征包括:重复代码行数、平均函数长度、1个字符变量数量、包含注释代码行数、最大行长度、未使用导入、未使用变量、未使用参数的计数。还有一些...我们可视化了所有特征,并发现虽然平均值与成绩相关,但变异性非常大(不太令人鼓舞)。
编辑:我们项目的范围:我们只试图从一个班级中一个特定项目(给出框架代码)中学习。我们目前不需要泛化。