我正在尝试根据已知的之前成绩来预测测试结果。测试由三个科目组成,每个科目都对期末考试成绩有贡献。对于所有学生,我都有他们在三个科目中的小测验成绩,并且我知道他们是由哪位老师教的。对于一半的学生(训练集),我有他们的最终成绩,而对于另一半学生(测试集),我没有。我想预测他们的最终成绩。
所以测试集看起来像这样:
student teacher subject1score subject2score subject3score finalscore
而测试集与此相同,但没有最终成绩
student teacher subject1score subject2score subject3score
所以我想预测测试集学生的最终成绩。有什么简单的学习算法或统计技术可以使用吗?
回答:
尝试的最简单和最合理的方法是线性回归,使用老师和三个成绩作为预测因子。(这是基于假设老师和三个测试成绩各自对期末考试有一定的预测能力,但它们的贡献可能不同——例如,第三次测试可能最重要)。
你没有提到特定的语言,但假设你将数据加载到R中作为两个数据框,分别称为’training.scores’和’test.scores’。拟合模型可以简单地使用lm来完成:
lm.fit = lm(finalscore ~ teacher + subject1score + subject2score + subject3score, training.scores)
然后预测将这样进行:
predicted.scores = predict(lm.fit, test.scores)
在谷歌上搜索”R线性回归”、”R线性模型”或类似的搜索将找到许多可以帮助的资源。你还可以了解稍微复杂一些的方法,如广义线性模型或广义加性模型,这些方法几乎和上述方法一样容易执行。
补充说明:关于解释线性回归的话题已经有书籍撰写——一个简单的示例指南在这里。一般来说,你会打印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)
会生成残差图(残差意味着在你的测试集中每个预测的偏差量),这可以用来判断模型的假设是否合理。