首页 文章

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

提问于
浏览
8

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

我们正在尝试根据过去学期的作文分数(从1-3开始)学习,这很好地导致了有监督的学习 . 基本思想是我们从学生的提交中提取特征,并创建feature_vector,然后使用scikit-learn通过逻辑回归运行它 . 我们还尝试了各种各样的事情,包括在特征向量上运行PCA以减少维数 .

我们的分类器只是猜测最频繁的类,即2分 . 我相信这是因为我们的功能无论如何都不能预测 . Is there any other possible reason for a supervised learning algorithm to only guess the dominant class? 有什么方法可以阻止这种情况吗?

因为我认为这是因为这些功能不具备预测性,所以(好的,我的意思是可辨别的或预测性的) .

注意:作为一项辅助实验,我们通过对已经评分的读者成绩分配测试了过去成绩的一致性 . 只有55%的人给出了相同的项目成分(1-3) . 这可能意味着这个数据集根本无法归类,因为人类甚至无法进行一致评分 . Any tips on other ideas? 或者事实上是否确实如此?

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

编辑:我们项目的范围:我们只是试图从一个特定项目(给出骨架代码)中学习 . 我们还不需要概括 .

3 回答

  • 1

    只是一个想法 - Andrew Ng在Coursera上教授机器学习课程(https://www.coursera.org/course/ml) . 学生在整个 class 提交了几个编程作业 . 我记得读过(虽然不幸的是我现在找不到这篇文章),有一些正在进行的研究试图将学生提交的课程作业集中在课堂上,并且直觉认为学生在作业上会犯下常见的错误 .

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

  • 0

    功能包括:重复代码行数,平均函数长度,1个字符变量数,包含注释掉代码的行数,最大行长度,未使用导入计数,未使用变量,未使用参数 . 还有一些......

    您是否尝试过规范化功能?您似乎想要训练一个能够将任何给定代码分类到一个类别中的神经网络 . 现在因为不同的代码会说,不同数量的重复代码行和不同数量的未使用变量但可能同样不好 . 因此,您需要将参数标准化为“有用”代码的总行数 .

    未能找到好的功能是非常艰巨的 . 停滞不前时,请始终遵循自己的直觉 . 如果人类可以完成任务,那么计算机也可以 . 由于您的功能看起来非常适合评估任何给定的代码,因此它们应该工作(假设它们被正确使用) .

    Summary: Normalization of features should solve the problem.

  • 1
    • 您想 balancer 目标类别(接近相等数量的1,2,3分数) . 您可以随机抽取过大的类,引导样本大小不足的类,或者使用一种算法来解释不 balancer 的数据(不确定Python中的哪些) .

    • 确保您进行交叉验证以防止过度拟合

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

    • 尝试所有属性组合,从其中一个开始

    • 或尝试所有属性组合,从它们开始

    • 或随机尝试属性组合(或w遗传算法)

    选择具有最高交叉验证精度的属性组合 .

    您还可以获取属性列的乘积,以查看它们是否一起产生效果 .

相关问题