问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于机器学习的学生成绩预测

创作时间:
作者:
@小白创作中心

基于机器学习的学生成绩预测

引用
CSDN
1.
https://blog.csdn.net/qq_42034590/article/details/132921635

学生成绩预测是一个经典的机器学习案例,通过分析学生的学习时间和选课数量等特征,可以预测其考试成绩。本文将使用Python中的机器学习库,基于线性回归算法,详细讲解如何完成这一预测任务。

数据集介绍

我们将使用一个包含学生学习数据的数据集,其中包含以下信息:

  1. 学生选择的课程数目
  2. 学生每天平均学习时间
  3. 学生成绩

你可以从这里下载数据集。

数据预处理

首先,导入必要的Python库并加载数据集:

import numpy as np
import pandas as pd
import plotly.express as px
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

data = pd.read_csv("Student_Marks.csv")
print(data.head(10))

输出结果如下:

   number_courses  time_study   Marks
0               3       4.508  19.202
1               4       0.096   7.734
2               4       3.133  13.811
3               6       7.909  53.018
4               8       7.811  55.299
5               6       3.211  17.822
6               3       6.063  29.889
7               5       3.413  17.264
8               4       4.410  20.348
9               3       6.173  30.862

数据集中只有三列。其中,Marks列是目标列,我们需要预测学生的分数。

检查数据集是否包含任何null值:

print(data.isnull().sum())

输出结果:

number_courses    0
time_study        0
Marks             0
dtype: int64

由于数据中没有空值,数据集可以直接使用,不需要其他预处理。

数据探索

让我们分析一下数据中各列的分布情况:

查看学生选择的课程数量分布:

data["number_courses"].value_counts()

输出结果:

3    22
4    21
6    16
8    16
7    15
5    10
Name: number_courses, dtype: int64

从上可知,学生选择的课程最少三门,最多八门。让我们来绘制一个散点图,看看课程的数量是否会影响学生的分数:

figure = px.scatter(data_frame=data, x="number_courses", 
                    y="Marks", size="time_study", 
                    title="Number of Courses and Marks Scored")
figure.show()

从图中可以看出,课程数量与分数之间没有明显的线性关系。让我们再看看每天学习的时间和学生得分之间的关系:

figure = px.scatter(data_frame=data, x="time_study", 
                    y="Marks", size="number_courses", 
                    title="Time Spent and Marks Scored", trendline="ols")
figure.show()

从图中可以看出,学习时间和分数之间存在明显的线性关系。这意味着学生花在学习上的时间越多,他们的成绩就越好。

最后,让我们计算各特征与分数之间的相关性:

correlation = data.corr()
print(correlation["Marks"].sort_values(ascending=False))

输出结果:

Marks             1.000000
time_study        0.942254
number_courses    0.417335
Name: Marks, dtype: float64

可以看出,time_study列与Marks的相关性要高于number_courses列。

模型训练与预测

现在,让我们转向训练机器学习模型来预测学生的分数的任务。

首先将数据分为训练集和测试集:

x = np.array(data[["time_study", "number_courses"]])
y = np.array(data["Marks"])
xtrain, xtest, ytrain, ytest = train_test_split(x, y, 
                                                test_size=0.2, 
                                                random_state=42)

这里将使用最简单的线性回归算法训练机器学习模型:

model = LinearRegression()
model.fit(xtrain, ytrain)
model.score(xtest, ytest)

输出结果:

0.9459936100591212

模型的R²分数为0.946,说明模型的预测效果非常好。

模型预测

现在,让我们测试这个机器学习模型的性能,根据我们用来训练模型和预测学生成绩的特征提供输入:

# Features = [["time_study", "number_courses"]]
features = np.array([[4.508, 3]])
model.predict(features)

输出结果:

array([22.30738483])

以上,这就是如何使用Python通过机器学习来预测学生成绩的完整过程。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号