提问者:小点点

编码风格的监督学习-特征选择(Scikit Learning)


我正在研究是否可以根据编码风格自动化学生代码的评分。这包括避免重复代码、注释掉代码、变量命名错误等。

我们试图根据上学期的作文分数(从1-3分不等)进行学习,这很好地引导了监督学习。基本思想是我们从学生提交的材料中提取特征,并feature_vector,然后使用Scikit-lear通过逻辑回归运行它。我们还尝试了各种方法,包括在特征向量上运行PCA以降维。

我们的分类器只是猜测最常见的类,即得分为2。我相信这是因为我们的特征在任何方面都不是预测性的。监督学习算法只猜测占主导地位的类还有其他可能的原因吗?有什么方法可以防止这种情况发生吗?

因为我认为这是由于特征不具有预测性,所以有没有办法确定什么是“好”特征?(我所说的好是指可辨别的或预测的)。

注意:作为一个辅助实验,我们通过让读者对已经评分的作业进行评分来测试过去的评分有多一致。只有55%的人给出了相同的项目作文分数(1-3)。这可能意味着这个数据集根本无法分类,因为人类甚至不能始终如一地评分。关于其他想法有什么建议吗?或者事实是否如此?

功能包括:重复代码行数、平均函数长度、1个字符变量的数量、包含注释掉代码的行数、最大行长、未使用导入的计数、未使用的变量、未使用的参数。还有一些……我们可视化了我们所有的功能,发现虽然平均值与分数相关,但变化确实很大(不太有希望)。

编辑:我们项目的范围:我们只尝试从一个类中的一个特定项目(给出了框架代码)中学习。我们还不需要泛化。


共3个答案

匿名用户

只是一个想法——吴恩达在Coursera(https://www.coursera.org/course/ml)上教授机器学习课程。学生们在整个课堂上提交了几份编程作业。我记得读到(尽管不幸的是我现在找不到这篇文章),有一些正在进行的研究试图将学生提交的课堂编程作业聚类,直觉是学生在作业中经常犯错误。

不确定这是否对您有帮助,但也许将其视为无监督学习问题可能更有意义(例如,只是凭直觉在不同的代码示例中寻找相似之处,即相似的代码示例应该获得相似的分数)。

匿名用户

功能包括:重复代码行数、平均函数长度、1个字符变量数、包含注释掉代码的行数、最大行长、未使用导入数、未使用变量、未使用参数。更多…

你试过规范化特征吗?看起来你想训练一个能够将任何给定代码分类到一个类别中的神经网络。现在,因为不同的代码会有不同数量的重复代码和不同数量的未使用变量,但可能同样糟糕。因此,您需要通过例如“有用”代码的总行来规范化您的参数。

找不到好的特性是非常令人生畏的。当停滞不前时,永远跟随你的直觉。如果人类可以完成一项任务,计算机也可以。由于你的特性在评估任何给定代码时看起来相当有限,它们应该可以工作(考虑到它们被正确使用)。

总结:特征的规范化应该可以解决这个问题。

匿名用户

>

  • 你想平衡你的目标类(接近相等数量的1,2,3分数)。你可以随机抽样超大的类,引导抽样不足的类,或者使用一种算法来解释不平衡的数据(不确定Python做什么)。

    确保您正在交叉验证以防止过度拟合

    有几种方法可以确定哪些属性很重要:

    • 尝试所有属性组合,从其中一个开始
    • 或尝试所有属性组合,从它们全部开始
    • 或者随机尝试属性组合(或者w遗传算法)

    选择交叉验证精度最高的属性组合。

    您还可以获取属性列的乘积,以查看它们是否一起产生影响。