【发布时间】:2013-12-01 05:30:44
【问题描述】:
我正在研究是否可以根据编码风格自动对学生的代码进行评分。这包括避免重复代码、注释掉代码、变量命名错误等等。
我们正在尝试根据过去学期的作文分数(从 1 到 3 分)进行学习,这很好地引导了监督学习。基本思想是我们从学生提交的内容中提取特征,并制作一个特征向量,然后使用 scikit-learn 通过逻辑回归运行它。我们还尝试了各种方法,包括在特征向量上运行 PCA 以降低维度。
我们的分类器只是猜测最频繁的类别,即得分为 2。我相信这是因为我们的特征根本无法以任何方式进行预测。 是否有任何其他可能的原因让监督学习算法只猜测主导类?有什么办法可以防止这种情况发生吗?
我认为这是由于特征不具有预测性,有没有办法确定什么是“好”特征?(我所说的好,是指可区分或可预测的)。
注意:作为一项附带实验,我们通过让读者为已经评分的作业评分来测试过去成绩的一致性。他们中只有 55% 的项目给出了相同的作文分数(1-3)。这可能意味着该数据集根本无法分类,因为人类甚至无法始终如一地评分。 关于其他想法的任何提示? 或者事实是否如此?
功能包括: 重复代码行数、平均函数长度、1 个字符变量的数量、包含注释掉的代码的行数、最大行长度、未使用的导入计数、未使用的变量, 未使用的参数。还有一些...我们将所有特征可视化,发现虽然平均值与分数相关,但变化确实很大(不太乐观)。
编辑: 我们项目的范围:我们只是试图从一个类中的一个特定项目(给出骨架代码)中学习。到目前为止,我们不需要一概而论。
【问题讨论】:
-
+1。哇!什么问题/
-
但是答案将更多地由这里的统计而不是计算机科学驱动。
-
包含“统计”作为标签。谢谢!
-
请在问题的末尾澄清您的注释:“测试了过去的成绩有多一致,并确定它们根本不是”。根据什么一致?你是怎么测试的?
-
这听起来更像是线性回归(数值预测)而不是逻辑回归(分类任务)。使用线性回归,您将获得 1.2、1.8、1.5 等数字,而不是简单地标记“2”,这可能会给您一些见解。另请注意,线性模型(在线性回归和逻辑回归中)可能只是表示变量之间关系的不好方法。因此,您还可以尝试其他方法,例如使用超平面(SVM,可能使用非线性内核)分割数据或计算概率(例如朴素贝叶斯)。顺便说一句,您使用什么功能(一些示例会有所帮助)。
标签: statistics machine-learning feature-extraction feature-selection supervised-learning