寻找一种简单的机器学习方法来从训练集中预测期末考试成绩
Posted
技术标签:
【中文标题】寻找一种简单的机器学习方法来从训练集中预测期末考试成绩【英文标题】:Looking for a simple machine learning approach to predict final exam score from training set 【发布时间】:2012-04-28 22:52:33 【问题描述】:我正在尝试根据已知的先前分数来预测测试结果。考试由三门科目组成,每门科目都会影响期末考试成绩。对于所有学生,我都有他们之前在三个科目中的小测验的分数,而且我知道他们的老师是谁。对于一半的学生(训练集),我有他们的最终分数,对于另一半我没有(测试集)。我想预测他们的最终得分。
所以测试集是这样的:
student teacher subject1score subject2score subject3score finalscore
虽然测试集相同但没有最终分数
student teacher subject1score subject2score subject3score
所以我想预测测试集学生的最终成绩。有什么想法可以使用简单的学习算法或统计技术吗?
【问题讨论】:
任何仅基于过去分数的预测都是不准确的,因为它没有考虑学生是否为即将到来的考试学习不同,以及老师是否准备不同。还有许多其他变量。但是,如果您只是想为分数找到一些数学序列/序列,那就是另一个问题了。这是你要求的吗? 我不太担心准确性,更多的是关于逻辑——为这类问题找到一种好的技术。我认为关键问题是模拟每个老师对学生的影响,对于三个科目中的每一个。有什么想法吗? @David Robinson:您的回答在上下文中更合适。所以我给你一个 +1 并退出 :) [删除我的答案] 【参考方案1】:最简单、最合理的尝试方法是线性回归,以老师和三个分数作为预测因子。 (这是基于这样的假设,即教师和三个考试成绩各自对期末考试都有一定的预测能力,但它们的贡献可能不同——例如,第三次考试可能最重要)。
您没有提及特定的语言,但假设您将其作为两个名为“training.scoresand
test.scores”的数据框加载到 R 中。拟合模型就像使用 lm 一样简单:
lm.fit = lm(finalscore ~ teacher + subject1score + subject2score + subject3score, training.scores)
然后预测将完成为:
predicted.scores = predict(lm.fit, test.scores)
谷歌搜索“R 线性回归”、“R 线性模型”或类似搜索会发现 许多 可以提供帮助的资源。您还可以了解稍微复杂一些的方法,例如广义线性模型或广义加性模型,它们几乎与上述方法一样容易执行。
ETA:有一些关于解释线性回归主题的书籍——一个简单的示例指南是here。通常,您将打印summary(lm.fit)
以打印大量有关合身的信息。您将在输出中看到如下所示的系数表:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -14.4511 7.0938 -2.037 0.057516 .
setting 0.2706 0.1079 2.507 0.022629 *
effort 0.9677 0.2250 4.301 0.000484 ***
估计值将让您了解该变量的影响有多强,而 p 值 (Pr(>|T|)
) 可以让您了解每个变量是否真的有帮助,还是由于随机噪声。它还有很多内容,但我邀请您阅读在线提供的优秀资源。
plot(lm.fit)
还将绘制残差图(残差表示您的测试集中每个预测的偏离量),它告诉您可以用来确定模型的假设是否公平。
【讨论】:
谢谢,这会很有帮助 - 我会尝试线性回归和线性模型。只是为了让我能更好地理解这个问题,你知道我还可以阅读的任何替代方法吗? 您也可以尝试最近邻或 n-最近邻。这将包括(例如)找到一个有相同老师和相对相似考试成绩的学生,并查看他的分数(n-最近邻会找到 n 个最接近的学生并取平均值)。但是,我认为您会在regression analysis 中使用线性方法和其他模型获得更多运气。广义加性模型和非参数回归将是值得尝试的最复杂的模型。 刚刚意识到(除非我误解了它的工作原理)线性模型必须将教师 ID 列视为数字数据,而不是分类数据。那正确吗?这样做有意义吗?如果不是,我如何将教师 ID 作为一个类别纳入线性模型? 你没有说教师栏是一个ID。在这种情况下(假设您使用R
,将教师列转换为因子。一种简单的方法是training.data$teacher = as.factor(training.data$teacher)
。也可以使用colClasses
方法到read.table
来完成。如果您需要帮助,告诉我你用来读取数据的代码。
感谢大卫再次救了我!我阅读了一些关于“虚拟编码”分类数据的内容,因此对这种因子方法现在的工作方式有一些模糊的了解。最后一个问题 - 评估 (1) 整个线性模型作为预测变量的准确性的最佳方法是什么?以及 (2) 每个贡献变量对这种准确性的价值?以上是关于寻找一种简单的机器学习方法来从训练集中预测期末考试成绩的主要内容,如果未能解决你的问题,请参考以下文章