使用 Python 进行学生学业成绩预测2025年3月17日 | 阅读13分钟 使用监督线性回归 (SLR) 训练和评估机器学习模型,以预测学生在课堂上的学业成绩。 引言![]() 机器学习是利用数据和经验自动学习算法的研究。它是计算智能的一个子集,其前提是机器可以通过从数据中学习并识别潜在趋势和模式,在很少或没有人工干预的情况下做出判断。根据预期的目标和可用数据,可以说人工智能 (AI) 是一种数据分析技术,它允许从业者协助管理层做出更好的决策。 机器学习算法有多种形式。最流行的分类是无监督学习、监督学习和强化学习。 ![]() 算法学习的类型及其可能的分支。
应用A. 用例目标教育领域的机器学习相关研究最近经历了快速增长。一种名为“教育数据挖掘”的新概念应运而生,它指的是在教育环境中使用数据挖掘方法来发现学生表现中未被注意到的趋势和模式。 本研究旨在建立一个基于机器学习的学生学业成功预测模型。任何学生在给定主题中的表现都可以使用该模型来确定。 目标是根据学生的学习时间估算其预期成绩。 B. 数据描述为了便于广泛理解,原始数据经过清理、调整并赋予了美观的外观。如上所示,有两个列,每列包含 25 个值:小时和分数。根据对该数据集的检查和常识的帮助,我们提出的假设是,我们的两个因素之间确实存在正相关关系。让我们继续并确定我们的假设是否成立。 C. 有用的库Python 模块是实用功能的集合,它们可以为您完成所有编写新代码的工作。目前,Python 大约有 137,000 个可用库。但是,此任务将仅使用 Scikit-Learn、Pandas、NumPy、sklearn 和 Matplotlib。
数据科学家可以在这个项目中利用他们在数据科学方面的专业知识,经历许多阶段。定义业务问题、收集需求、从外部来源获取和使用原始数据、清理和解析数据,以及使用机器学习技术进行分析评估。学术顾问、教授和家长只是少数可以利用最终分析的评估来做出判断的利益相关者。由于有几个因素需要考虑,这个项目开放讨论,旨在面向商人和利益相关者。 正在构建预测模型分析策略监督机器学习将预测和评估学生的成绩。首先,我们使用一种称为“简单线性回归模型”的方法来解决当前的问题。该统计模型中广泛使用一条线来估计两个定量变量之间的关系,其中一个变量是因变量,一个或多个变量是自变量。这种方法对于中小型数据库来说快速有效,并且可能有助于快速得出带标签数据的结论。 我们的两个定量因素如下
数据分析1. 加载数据和导入库 将导入相关库。Scikit-Learn 将在稍后加载,请注意。 源代码片段 现在必须将提供的数据加载到我在 Jovian 上使用的 Python 解释器中,以继续模型的训练。Pandas 用于导入 CSV 文件,并在数据成功导入时提供一些验证。 我已将文件放在我的计算机上,与此特定解释器位于同一文件夹中。 源代码片段 2. 可视化数据和获取洞察 在继续之前,我们将简要回顾一下数据的技术细节。info() 方法打印给定 DataFrame 的简洁描述。此函数提供有关 DataFrame 的详细信息,例如但不限于以下内容
源代码片段 一个使用 info() 方法显示 DataFrame 信息的示例。我们可以重申,根据前面提供的信息,有两个列,分别称为“小时”和“分数”,每列有 25 个数字。因此,提供给算法学习的数据有 25 个组成部分。 “小时”数据 (dtype) 是浮点类型,而“分数”数据 (dtype) 是整数类型。为了将来使用,两列应包含相同类型的数据。 如果两个数据类型相同,则简要描述数据帧的元数据。 源代码片段 输出 <class 'pandas.core.frame.DataFrame'> RangeIndex: 25 entries, 0 to 24 Data columns (total two columns): # Column Non-Null Count Dtype - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 Hours 25 non-null float64 1 Scores 25 non-null float64 dtypes: float64(2) memory usage: 528.0 bytes 一段预览数据的代码。最后,收到一条确认消息。 请注意,默认情况下,head() 方法仅显示前五个组件的预览。在括号内添加要显示的组件数量以进行自定义。 成功导入并将两列的数据类型转换为相同类型后,可以使用 head() 方法查看数据。 源代码片段 输出 0 2.5 21.0 1 5.1 47.0 2 3.2 27.0 3 8.5 75.0 4 3.5 30.0 5 1.5 20.0 6 9.2 88.0 7 5.5 60.0 8 8.3 81.0 9 2.7 25.0 一个示例显示了数据集的前十个项目。 成为数据科学家需要多种能力。可以将其分为三类:技术技能、实践能力和软技能。拥有强大的数字能力是最重要的功能技能之一。应该能够解释和分析数据试图告诉你的内容。这需要坚实的统计基础和解释空间。幸运的是,describe() 方法提供了一组重要的值,可用于进一步的统计分析。 输出 Hours Scores count 25.000000 25.000000 mean 5.012000 51.480000 std 2.525094 25.286887 min 1.100000 17.000000 25% 2.700000 30.000000 50% 4.800000 47.000000 75% 7.400000 75.000000 max 9.200000 95.00000 显示数据集统计信息的代码行。 3. 绘制数据 然后必须根据规范输入并绘制分布分数。为了可视化数据集并确定数据之间是否存在任何关系,数据点显示在 2D 图形上。以下脚本用于构建图表 源代码片段 输出 ![]() 一段代码用于绘制 2D 图形,以查找数据集中的相关性。 从上面的图表中可以看出,这两个变量具有正线性关系,这意味着学习小时数和分数比例直接相关。 4. 为机器学习算法准备数据 数据以各种形式、结构和来源涌入。清理、组织和优化这些数据以供最终用户使用是数据科学家工作中的关键组成部分。业务利益相关者、专家和程序员是最终用户的例子。然后使用“准备好的”数据解释结果,并将信息传达给管理层,以帮助他们做出更明智的决策。 源代码片段 输出 Hours 0 Scores 0 dtype: int64 源代码片段 输出 Hours Scores 0 2.5 21.0 1 5.1 47.0 2 3.2 27.0 3 8.5 75.0 4 3.5 30.0 确定我们的数据集没有空值后,下一步是将数据分成特征(也称为输入)和标签(也称为输出)。 一段代码将数据分成属性和标签。 在确定了特征和标签之后,下一步是将这些数据分成训练集和测试集。为此,我们使用 Scikit-Learn 的内置 train_test_split() 方法。 当数据成功划分为测试集和训练集后,就该训练算法了。如前所述,必须使用简单的线性回归模型。 C. 使用机器学习算法进行训练 一段代码演示了我们的算法是如何训练的。最后,收到一条确认消息。 现在训练已完成,我们将绘制回归线。 2D 图的一部分显示了这两个变量的正相关关系。 2D 图上的回归线显示了我们的两个变量之间存在正相关关系。这加强了我们早期理论的有效性,该理论现在已被广泛认可。 D. 做出预测 现在是使用我们系统训练好的版本进行预测的时候了。 我们的机器学习模型生成的预测样本。 一个示例,展示了我们的机器学习模型如何比较实际结果与预测分数。 我们的机器学习模型的结果表明,我们的两个因素直接相关。预测分数表现出一些高估和低估。 E. 使用自定义数据进行测试 一段代码使用一个随机整数进行预测。 如您所见,在 9.25 小时内,预期分数为 93.692,而实际分数为 100(四舍五入到小数点后两位)。 F. 评估机器学习算法 评估算法的性能是最后阶段。这个最后阶段对于评估各种算法在给定数据集上的性能至关重要。可以使用许多指标。但我们将使用均方误差。 结果与讨论
使用 Python 预测学生学业表现的综合代码输出 <class 'pandas.core.frame.DataFrame'> RangeIndex: 25 entries, 0 to 24 Data columns (total two columns): # Column Non-Null Count Dtype - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 Hours 25 non-null float64 1 Score 25 non-null float64 dtypes: float64(2) memory usage: 528.0 bytes 输入 输出 <class 'pandas.core.frame.DataFrame'> RangeIndex: 25 entries, 0 to 24 Data columns (total 2 columns): # Column Non-Null Count Dtype - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 Hours 25 non-null float64 1 Score 25 non-null float64 dtypes: float64(2) memory usage: 528.0 bytes 输入 输出 Hours Scores 0 2.5 21.0 1 5.1 47.0 2 3.2 27.0 3 8.5 75.0 4 3.5 30.0 输入 输出 Hours Scores 0 2.5 21.0 1 5.1 47.0 2 3.2 27.0 3 8.5 75.0 4 3.5 30.0 5 1.5 20.0 6 9.2 88.0 7 5.5 60.0 8 8.3 81.0 9 2.7 25.0 成为数据科学家需要掌握一些功能技能,例如对数字有很好的感觉。一个人应该能够分析和翻译数字所表达的含义。这需要对统计学有扎实的掌握。幸运的是,describe() 函数提供了一组重要的值,可用于进一步的统计分析。 输入 输出 Hours Scores count 25.000000 25.000000 mean 5.012000 51.480000 std 2.525094 25.286887 min 1.100000 17.000000 25% 2.700000 30.000000 50% 4.800000 47.000000 75% 7.400000 75.000000 max 9.200000 95.000000 输入 ![]() 输入 输出 Hours 0 Scores 0 dtype: int64 输入 输出 <class 'pandas.core.frame.DataFrame'> RangeIndex: 25 entries, 0 to 24 Data columns (total 2 columns): # Column Non-Null Count Dtype - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 Hours 25 non-null float64 1 Score 25 non-null float64 dtypes: float64(2) memory usage: 528.0 bytes 输入 输出 Hours Scores 0 2.5 21.0 1 5.1 47.0 2 3.2 27.0 3 8.5 75.0 4 3.5 30.0 输入 输出 Algorithm's training has been completed. 输入 ![]() 输入 输出 [3.2] [7.4] [2.5] [5.9]] [[1.5] [3.2] [7.4] [2.5] [5.9]] 输入 输出 Actual Scores Predicted Scores 0 20.0 16.88414 1 27.0 33.73226 2 69.0 75.35701 3 30.0 26.79480 4 62.0 60.49103 输入 输出 Hours Actual Scores Predicted Scores 0 1.5 20.0 16.88414 1 3.2 27.0 33.73226 2 7.4 69.0 75.35701 3 2.5 30.0 26.79480 4 5.9 62.0 60.49103 输入 输出 Mean Absolute Error: 4.18385989902982 结论由于多种变量,选择和投入最佳实践和环境来改善学生的学业表现可能是一个困难而艰巨的斗争。但在当今时代,随着如此多的人类活动在线进行,丰富的数据和先进的机器学习算法使我们更容易理解我们选择的主题和相关实体。这使利益相关者、企业主和企业家都能够做出由数据和研究支持的合理决策。 |
我们请求您订阅我们的新闻通讯以获取最新更新。