线性回归是一种基本的回归分析方法,用于预测因变量(Y)和自变量(X)之间的关系。在Python中,使用scikit-learn
库可以非常方便地实现简单线性回归和多元线性回归。本文将介绍这两种回归方法的实现,并提供相应的代码示例。
简单线性回归
简单线性回归是指只有一个自变量与因变量之间的线性关系。假设有一组数据,其中包括自变量X和因变量Y,目标是找到一个最优的直线来描述它们的关系。
示例代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 生成一些示例数据
# 自变量(例如,学习时间)
X = np.array([[1], [2], [3], [4], [5]])
# 因变量(例如,考试分数)
Y = np.array([2, 3, 5, 7, 11])
# 创建线性回归模型
model = LinearRegression()
# 拟合模型
model.fit(X, Y)
# 打印模型的斜率和截距
print("斜率:", model.coef_[0]) # 斜率
print("截距:", model.intercept_) # 截距
# 进行预测
predictions = model.predict(X)
# 可视化结果
plt.scatter(X, Y, color='blue', label='真实数据')
plt.plot(X, predictions, color='red', label='线性回归预测')
plt.xlabel('学习时间')
plt.ylabel('考试分数')
plt.title('简单线性回归示例')
plt.legend()
plt.show()
在这个示例中,我们首先创建了一组简单的数据,表示学习时间与考试分数之间的关系。然后,我们利用LinearRegression
类创建并拟合模型,最后可视化结果显示了真实数据与回归线的关系。
多元线性回归
多元线性回归则是指有多个自变量与因变量之间的线性关系。我们可以扩展上述的线性回归模型,使其能够接受多个输入特征。
示例代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 生成一些示例数据
# 自变量(例如,学习时间和上网时间)
X = np.array([[1, 1], [2, 1], [3, 2], [4, 3], [5, 2]])
# 因变量(例如,考试分数)
Y = np.array([2, 3, 5, 7, 11])
# 创建多元线性回归模型
model = LinearRegression()
# 拟合模型
model.fit(X, Y)
# 打印模型的斜率和截距
print("斜率:", model.coef_) # 多个斜率
print("截距:", model.intercept_) # 截距
# 进行预测
predictions = model.predict(X)
# 可视化结果(这里我们将多元数据降维进行可视化)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 创建网格数据用于绘制平面
X1 = np.linspace(0, 6, 10)
X2 = np.linspace(0, 6, 10)
X1, X2 = np.meshgrid(X1, X2)
Y_plane = model.intercept_ + model.coef_[0] * X1 + model.coef_[1] * X2
# 绘制数据点
ax.scatter(X[:, 0], X[:, 1], Y, color='blue', label='真实数据')
# 绘制回归平面
ax.plot_surface(X1, X2, Y_plane, color='red', alpha=0.5)
ax.set_xlabel('学习时间')
ax.set_ylabel('上网时间')
ax.set_zlabel('考试分数')
ax.set_title('多元线性回归示例')
plt.legend()
plt.show()
在多元线性回归的示例中,我们有两个自变量:学习时间和上网时间。通过拟合模型,我们可以得到多个斜率和一个截距。最后,我们通过三维可视化展示了真实数据点和回归平面。
总结
线性回归是一种简单而有效的预测工具,适用于各种场景。通过Python的scikit-learn
库,我们可以方便地实现简单线性回归和多元线性回归。以上示例展示了如何生成数据、拟合模型和可视化结果,读者可以根据自己的实际需求进行进一步的扩展与应用。