使用公式法与scikit-learn实现多元线性回归的技术解析
多元线性回归是机器学习中的基础算法,用于建立多个特征与目标变量之间的线性关系。本文通过两种实现方式(公式法与scikit-learn工具)演示多元线性回归的建模过程,并验证结果的一致性。
好的!以下是一篇基于你提供的代码内容的CSDN技术博客,主题是 “使用scikit-learn实现多元线性回归”。这篇博客将详细介绍多元线性回归的原理、手动计算方法以及使用scikit-learn库的实现方式,并通过可视化展示结果。
使用scikit-learn实现多元线性回归
在机器学习中,线性回归是一种非常基础且重要的预测模型。当我们需要预测的目标变量与多个特征变量之间存在线性关系时,多元线性回归就派上了用场。本文将通过一个简单的例子,详细介绍如何使用Python中的scikit-learn库实现多元线性回归,并对比手动计算和库函数计算的结果。
一、多元线性回归简介
1.1 什么是多元线性回归?
多元线性回归是线性回归的扩展,它允许我们同时考虑多个特征变量对目标变量的影响。其数学表达式为:
Y=θ0+θ1X1+θ2X2+⋯+θnXn+ϵ
其中:
-
Y 是目标变量。
-
X1,X2,…,Xn 是特征变量。
-
θ0,θ1,…,θn 是模型参数。
-
ϵ 是误差项,假设其服从正态分布。
1.2 损失函数
多元线性回归的目标是最小化均方误差(MSE),即预测值与真实值之间差的平方的平均值:
MSE=m1∑i=1m(y(i)−y^(i))2
其中,m 是样本数量,y(i) 是第 i 个样本的真实值,y^(i) 是预测值。
二、手动实现多元线性回归
2.1 数据准备
我们首先生成一些模拟数据,假设目标变量 Y 与两个特征变量 X1 和 X2 之间存在线性关系:
Python复制
import numpy as np
import matplotlib.pyplot as plt
# 生成模拟数据
np.random.seed(42)
X1 = 2 * np.random.rand(100, 1) # 特征变量 X1
X2 = 2 * np.random.rand(100, 1) # 特征变量 X2
Y = 4 + 3 * X1 + 5 * X2 + np.random.randn(100, 1) # 目标变量 Y
2.2 手动计算模型参数
我们可以使用正规方程来计算模型参数 θ:
θ=(XTX)−1XTY
其中,X 是特征矩阵,包含截距项(全为1)和特征变量 X1 和 X2。
Python复制
# 添加截距项
X0 = np.ones((100, 1))
X = np.c_[X0, X1, X2]
# 使用正规方程计算模型参数
Theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y)
print("手动计算的模型参数:", Theta)
2.3 预测新数据
假设我们有新的数据点 Xnew,我们可以使用计算得到的模型参数进行预测:
Python复制
# 新数据点
my_list = [0, 0, 2, 1]
X_new = np.array(my_list).reshape(2, 2)
X_new_b = np.c_[np.ones((2, 1)), X_new]
# 预测新数据点
Y_predict = X_new_b.dot(Theta)
print("手动预测的结果:", Y_predict)
2.4 可视化结果
我们可以将预测结果可视化,展示模型的拟合效果:
Python复制
plt.plot(X_new[:, 0], Y_predict, 'r-', label='预测结果')
plt.plot(X1, Y, 'b.', label='真实数据')
plt.xlabel('X1')
plt.ylabel('Y')
plt.title('多元线性回归预测结果')
plt.legend()
plt.show()
三、使用scikit-learn实现多元线性回归
3.1 使用LinearRegression类
scikit-learn提供了LinearRegression类,可以方便地实现多元线性回归。我们使用该类来训练模型并进行预测:
Python复制
from sklearn.linear_model import LinearRegression
# 创建线性回归模型
reg = LinearRegression(fit_intercept=True)
# 训练模型
reg.fit(X, Y)
# 输出模型参数
print("scikit-learn计算的截距项:", reg.intercept_)
print("scikit-learn计算的系数:", reg.coef_)
# 预测新数据点
Y_predict = reg.predict(X_new_b)
print("scikit-learn预测的结果:", Y_predict)
3.2 可视化结果
我们可以将scikit-learn的预测结果可视化,与手动计算的结果进行对比:
Python复制
plt.plot(X_new[:, 0], Y_predict, 'g-', label='scikit-learn预测结果')
plt.plot(X1, Y, 'b.', label='真实数据')
plt.xlabel('X1')
plt.ylabel('Y')
plt.title('scikit-learn多元线性回归预测结果')
plt.legend()
plt.show()
四、总结
通过上述实验,我们展示了如何手动实现多元线性回归,并使用scikit-learn库中的LinearRegression类进行实现。两种方法都成功地拟合了数据,并给出了相似的预测结果。scikit-learn库提供了更简洁的API和强大的功能,使得实现多元线性回归变得非常容易。
希望本文对你理解多元线性回归及其在Python中的实现有所帮助!如果你有任何问题或建议,欢迎在评论区留言。
源码链接:https://gitee.com/jinwaifei/artificial-intelligence-project/tree/master/scikit_learn
如果你对这篇博客有任何修改意见,或者希望我补充更多内容,请随时告诉我!
更多推荐




所有评论(0)