楼主看看这个可以吗?
[Python] 纯文本查看 复制代码 #展示了如何使用Python进行多元线性回归分析,包括数据生成、模型训练、参数输出、
#模型评估以及结果的可视化。代码中还包含了设置中文字体的步骤,以确保在matplotlib生成的图表中中文能够正确显示。
# 以确保在matplotlib生成的图表中中文能够正确显示。
# 导入所需的库
import numpy as np # 导入NumPy库,用于进行数学运算
from sklearn.linear_model import LinearRegression # 从scikit-learn库导入线性回归模型
import matplotlib.pyplot as plt # 导入matplotlib的pyplot模块,用于数据可视化
from matplotlib.font_manager import FontProperties # 导入FontProperties,用于指定字体
from sklearn.metrics import mean_squared_error # 导入mean_squared_error,用于计算均方误差
# 设置随机种子以保证结果的可重复性
np.random.seed(0)
# 定义样本数量
n_samples = 2222 # 设置样本数为2222
# 生成4个特征的随机数据,假设每个特征都来自标准正态分布
X = np.random.randn(n_samples, 4) # 生成一个形状为(2222, 4)的随机正态分布矩阵
# 定义一个多元线性回归模型的函数,简化为4个特征
def model(X, b0, b1, b2, b3):
# 定义模型的线性表达式,包括截距b0和系数b1, b2, b3
return b0 + b1*X[:,0] + b2*X[:,1] + b3*X[:,2] + b3*X[:,3]
# 生成目标变量y,使用模型函数生成,并添加一些高斯噪声
y = model(X, 0.5, 1.5, -1.0, 0.5) + np.random.randn(n_samples) * 0.1 # 根据模型生成y并添加噪声
# 创建LinearRegression实例,用于多元线性回归
lr_model = LinearRegression() # 实例化线性回归模型
# 使用fit方法拟合模型,X是特征数据,y是目标数据
lr_model.fit(X, y) # 拟合模型
# 打印模型参数,即每个特征的系数和截距
print("模型参数:")
for i, coef in enumerate(lr_model.coef_):
print(f"b{i+1}: {coef}") # 打印每个特征的系数
print(f"截距: {lr_model.intercept_}") # 打印截距
# 计算R²分数,评估模型的拟合优度
r_squared = lr_model.score(X, y)
print(f"R²分数: {r_squared}") # 打印R²分数
# 使用拟合好的模型对特征数据进行预测
y_pred = lr_model.predict(X) # 根据模型进行预测
# 设置中文字体,以确保中文能够正确显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体为SimHei
plt.rcParams['axes.unicode_minus'] = False # 确保负号显示正常
# 绘制数据点和拟合线
plt.scatter(X[:, 0], y, color='blue', label='原始数据') # 绘制第一个特征与目标变量的散点图
plt.plot(X[:, 0], y_pred, color='red', label='拟合线') # 绘制第一个特征的拟合线
# 添加图例
plt.legend() # 显示图例
# 设置图表标题和轴标签
plt.title('多元线性回归拟合') # 设置图表标题
plt.xlabel('特征1') # 设置x轴标签
plt.ylabel('目标变量') # 设置y轴标签
# 显示图表
plt.show() # 显示图表
# 以下是计算测试集上均方误差(MSE)的示例代码,需要您提供测试数据集
# 以下是注释掉的代码,因为测试数据集没有在这段代码中定义
# 如果您有测试数据集,请取消注释并使用您的数据
# y_pred_test = lr_model.predict(X_test) # 使用模型对测试数据集进行预测
# mse_test = mean_squared_error(y_test, y_pred_test) # 计算测试数据集上的MSE
# print(f"测试集上的均方误差(MSE): {mse_test}") # 打印MSE
# 绘制残差图,分析模型的预测准确性
residuals = y - y_pred # 计算残差
# 绘制残差图
plt.scatter(y_pred, residuals, color='blue', label='残差') # 绘制残差散点图
plt.hlines(y=0, xmin=y_pred.min(), xmax=y_pred.max(), color='red', label='残差为0') # 绘制残差为0的水平线
# 添加图例和轴标签
plt.legend() # 显示图例
plt.title('残差图') # 设置图表标题
plt.xlabel('预测值') # 设置x轴标签
plt.ylabel('残差') # 设置y轴标签
# 显示残差图
plt.show() # 显示图表
|