Subject1 2 3 4 分别为政治 英语 数学 408(或经济学综合) 与复试得分的关系 可以看出数学和408(或经济学综合)低分的在复试中仍然有较好给分,而数学408高分考生仍然在复试中可能表现不佳得分较低。
# 假设你有一组新的初试分数
new_scores = np.array([70, 80, 125, 125, 400])
# 使用训练好的模型进行预测
y_predicted = model.intercept_ + np.dot(model.coef_, new_scores)
print("预测的复试分数为:", y_predicted)
做预测的复试分数为: 85.52217683310614
下面是代码
from sklearn.linear_model import LinearRegression
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
用pd.set_option("display.float_format", lambda x: '%.0f' % x)将科学计数显示转化为全数字显示
df_复试 = pd.read_excel('3.xlsx', sheet_name='Sheet1')
df_初试 = pd.read_excel('4.xlsx', sheet_name='Sheet1')
# 设置pandas的显示参数
pd.set_option("display.float_format", lambda x: '%.0f' % x)
df_复试 = df_复试.iloc[:, [1, 4, 5, 6]]
df_初试 = df_初试.iloc[:, [1, 2, 4, 5, 6, 7, 8]]
df_复试.columns = ['id', '初试成绩','复试成绩', '总成绩']
df_初试.columns = ['考生姓名', 'id', '科目1成绩', '科目2成绩', '科目3成绩', '科目4成绩', '初试总成绩']
# 去掉 other 列
# df = df.drop(columns='other')
df_复试.dropna(subset=['id'], inplace=True)
# 删除包含NaN的行
df_复试 = df_复试.dropna()
将两个df按照id连接起来
df_merged = pd.merge(df_初试, df_复试, on='id')
print(df_merged.shape)
df_merged.iloc[:, 2:]
X = df_merged[['科目1成绩', '科目2成绩', '科目3成绩', '科目4成绩', '初试总成绩']]
y = df_merged['复试成绩']
model = LinearRegression()
model.fit(X, y)
print('系数:', model.coef_)
print('截距:', model.intercept_)
print('R^2:', model.score(X, y))
结果:
系数: [-1.18277301e+13 -1.18277301e+13 -1.18277301e+13 -1.18277301e+13 1.18277301e+13]
截距: 94.33467683310614
R^2: 0.09586270152336485
再使用subplots
函数创建一个包含4个小图的大图,然后在每个小图中绘制散点图和线性回归直线。
# 创建一个包含4个小图的大图
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
# 在该图中,红色的直线表示线性回归
# 模型的拟合线,即通过训练数据拟合出来的一条直线,用于表示自变量和因变量之间的关系。可以使用该拟合线来预测新的因变量值,以便进行进一步的分析。
# 绘制第一个小图(科目1成绩与总成绩)
axs[0, 0].scatter(X['科目1成绩'], y, color='blue')
axs[0, 0].set_title('Subject 1 Score')
axs[0, 0].set_xlabel('Score')
axs[0, 0].set_ylabel('Final Score')
# axs[0, 0].plot(X['科目1成绩'], model.predict(X), color='red')
# 绘制第二个小图(科目2成绩与总成绩)
axs[0, 1].scatter(X['科目2成绩'], y, color='blue')
axs[0, 1].set_title('Subject 2 Score')
axs[0, 1].set_xlabel('Score')
axs[0, 1].set_ylabel('Final Score')
# axs[0, 1].plot(X['科目2成绩'], model.predict(X), color='red')
# 绘制第三个小图(科目3成绩与总成绩)
axs[1, 0].scatter(X['科目3成绩'], y, color='blue')
axs[1, 0].set_title('Subject 3 Score')
axs[1, 0].set_xlabel('Score')
axs[1, 0].set_ylabel('Final Score')
# axs[1, 0].plot(X['科目3成绩'], model.predict(X), color='red')
# 绘制第四个小图(科目4成绩与总成绩)
axs[1, 1].scatter(X['科目4成绩'], y, color='blue')
axs[1, 1].set_title('Subject 4 Score')
axs[1, 1].set_xlabel('Score')
axs[1, 1].set_ylabel('Final Score')
# axs[1, 1].plot(X['科目4成绩'], model.predict(X), color='red')
# 调整布局
plt.tight_layout()
# 显示图像
plt.show()
# 假设你有一组新的初试分数
new_scores = np.array([70, 80, 125, 125, 400])
# 使用训练好的模型进行预测
y_predicted = model.intercept_ + np.dot(model.coef_, new_scores)
print("预测的复试分数为:", y_predicted)
以上就是对23软微初试复试多元线性回归分析结果