19 简单线性回归

19 简单线性回归

简单线性回归是一种用于建模两个变量之间线性关系的统计方法。通常,我们希望通过一个自变量(或称为解释变量)来预测一个因变量(或称为响应变量)。本文将通过案例、公式和代码,详细介绍简单线性回归的基本概念。

简单线性回归模型

简单线性回归模型可以用以下公式表示:

$$
y = \beta_0 + \beta_1 x + \epsilon
$$

其中:

  • $y$ 表示因变量(被预测的变量)
  • $x$ 表示自变量(用于预测的变量)
  • $\beta_0$ 是截距(即当 $x=0$ 时 $y$ 的预测值)
  • $\beta_1$ 是斜率($x$ 每增加一个单位 $y$ 的变化量)
  • $\epsilon$ 是误差项(表示其他不可预测的因素)

案例分析

假设我们想研究一辆汽车的油耗($y$,以升/百公里为单位)与其速度($x$,以公里/小时为单位)之间的关系。我们收集了以下数据:

速度 (km/h) 油耗 (L/100km)
60 8.5
70 7.5
80 6.5
90 5.5
100 5.0

我们希望使用简单线性回归来预测油耗。

数据可视化

首先,我们可以使用 Python 的 matplotlib 库来可视化这些数据点:

1
2
3
4
5
6
7
8
9
10
11
12
13
import matplotlib.pyplot as plt

# 数据
speed = [60, 70, 80, 90, 100]
fuel_consumption = [8.5, 7.5, 6.5, 5.5, 5.0]

# 绘图
plt.scatter(speed, fuel_consumption, color='blue', label='Data points')
plt.xlabel('Speed (km/h)')
plt.ylabel('Fuel Consumption (L/100km)')
plt.title('Speed vs Fuel Consumption')
plt.legend()
plt.show()

这将生成速度与油耗的散点图。

拟合线性模型

接下来,我们使用 scikit-learn 来拟合简单线性回归模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sklearn.linear_model import LinearRegression
import numpy as np

# 数据准备
X = np.array(speed).reshape(-1, 1) # 自变量
y = np.array(fuel_consumption) # 因变量

# 创建线性回归模型
model = LinearRegression()
model.fit(X, y)

# 获取参数
intercept = model.intercept_
slope = model.coef_[0]

print(f'截距 (β0): {intercept:.2f}')
print(f'斜率 (β1): {slope:.2f}')

理解模型参数

假设输出结果为:

  • 截距 (β0): 10.00
  • 斜率 (β1): -0.05

这意味着当速度为 0 km/h 时,油耗预测为 10.00 L/100km。斜率为 -0.05 意味着速度每增加 1 km/h,油耗减少 0.05 L/100km。

进行预测

我们可以使用模型来预测特定速度下的油耗。例如,预测速度为 85 km/h 时的油耗:

1
2
3
speed_to_predict = np.array([[85]])
predicted_fuel_consumption = model.predict(speed_to_predict)
print(f'预测油耗 (85 km/h): {predicted_fuel_consumption[0]:.2f} L/100km')

模型评估

评估模型的好坏通常使用 $R^2$ 决定系数,它反映了模型对因变量变异的解释程度。可以使用以下代码计算 $R^2$:

1
2
r_squared = model.score(X, y)
print(f'R²: {r_squared:.2f}')

$R^2$ 的值范围在 0 到 1 之间,值越接近 1 表示模型解释的变异越大。

结论

简单线性回归是分析两个变量之间关系的有效工具。通过本教程,我们学习了如何建立模型、进行预测以及评估模型的表现。掌握简单线性回归的基本概念和技巧,对进一步学习更复杂的模型有着重要的意义。

20 多元回归分析

20 多元回归分析

多元回归分析是一种统计方法,用于探索一个因变量与多个自变量之间的关系。与简单线性回归相比,多元回归能够考虑更复杂的情形,帮助我们理解多个因素对一个结果变量的影响。

概念介绍

在多元回归中,因变量通常被表示为 $Y$,自变量可以表示为 $X_1, X_2, \ldots, X_k$。多元回归的基本模型形式为:

$$
Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_k X_k + \epsilon
$$

其中:

  • $Y$ 是因变量。
  • $\beta_0$ 是截距。
  • $\beta_1, \beta_2, \ldots, \beta_k$ 是各自变量的回归系数。
  • $\epsilon$ 是误差项。

案例分析

假设我们想研究某城市房价($Y$)与多个因素(例如:房间数量$X_1$,房屋面积$X_2$,距离市中心的距离$X_3$)之间的关系。我们可以通过数据收集来构建我们的模型。

数据准备

假设我们有以下数据:

房间数量 ($X_1$) 房屋面积 ($X_2$) 距离市中心 ($X_3$) 房价 ($Y$)
3 120 5 300000
2 80 3 200000
4 150 10 400000
3 100 7 320000

建立模型

可以使用 Python 中的 statsmodels 库进行多元回归分析。以下是一个简单的实现示范:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd
import statsmodels.api as sm

# 创建数据框
data = {
'房间数量': [3, 2, 4, 3],
'房屋面积': [120, 80, 150, 100],
'距离市中心': [5, 3, 10, 7],
'房价': [300000, 200000, 400000, 320000]
}
df = pd.DataFrame(data)

# 定义自变量和因变量
X = df[['房间数量', '房屋面积', '距离市中心']]
y = df['房价']

# 添加常数项
X = sm.add_constant(X)

# 拟合模型
model = sm.OLS(y, X).fit()

# 输出结果
print(model.summary())

在这里,使用 sm.OLS 函数来拟合线性回归模型,并通过 model.summary() 查看模型的详细统计信息。

结果解释

模型的输出中会包含以下重要信息:

  • R-squared: 反映模型对数据的解释能力,值越接近 1,模型越好。
  • Coefficients: 每个自变量的回归系数,表明在控制其他变量不变的情况下,自变量变化一个单位对因变量的影响。
  • P-values: 用于检验回归系数是否显著,通常小于 0.05 被认为是显著的。

例如,如果房间数量的回归系数为 50000,意味着房间数量每增加一个单位,房价平均增加 50000 元。

模型评估

在完成模型拟合后,重要的是对模型进行评估。常见的评估方法包括:

  • 残差分析: 检查残差的正态性和独立性。
  • 多重共线性: 检查自变量之间是否存在严重的共线性(可以使用方差膨胀因子 VIF)。

注意事项

  1. 线性关系: 确保自变量与因变量之间存在线性关系。
  2. 数据量: 自变量的数量不应超过样本量的一半,以避免过拟合。
  3. 异常值: 识别和处理数据中的异常值,以免影响模型的稳定性。

小结

多元回归分析是一种强大的工具,能够帮助我们理解多个因素如何相互作用并影响一个结果变量。通过案例和实际代码,我们可以有效地构建模型并进行分析,帮助决策者做出明智的选择。

21 回归模型评估

21 回归模型评估

在回归分析中,评估模型的性能是至关重要的步骤。通过评估,我们可以了解模型的预测能力,从而判断模型是否足够好以用于实际应用。本节将介绍几个常用的回归模型评估指标,并结合案例进行说明。

1. 均方误差 (MSE)

均方误差是评估回归模型预测误差的一种常用方法。其计算公式为:

$$
MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
$$

其中,$y_i$ 是实际值,$\hat{y}_i$ 是预测值,$n$ 是观测值的数量。

案例

假设我们有一个简单的回归模型预测房价,实际房价和模型预测值如下表所示:

实际值 ($y$) 预测值 ($\hat{y}$)
300000 290000
350000 360000
250000 240000

我们可以计算 MSE:

1
2
3
4
5
6
7
import numpy as np

y_actual = np.array([300000, 350000, 250000])
y_predicted = np.array([290000, 360000, 240000])

mse = np.mean((y_actual - y_predicted) ** 2)
print("均方误差 (MSE):", mse)

2. 均方根误差 (RMSE)

均方根误差是均方误差的平方根,具有与原始数据相同的单位。其计算公式为:

$$
RMSE = \sqrt{MSE}
$$

案例

继续使用上述案例,我们可以计算 RMSE:

1
2
rmse = np.sqrt(mse)
print("均方根误差 (RMSE):", rmse)

RMSE 的优点是更容易与实际值进行比较。

3. 决定系数 (R²)

决定系数是用来衡量模型解释能力的指标,取值范围为 0 到 1。其计算公式为:

$$
R^2 = 1 - \frac{SS_{res}}{SS_{tot}}
$$

其中,$SS_{res}$ 是残差平方和,$SS_{tot}$ 是总平方和。对所有数据点 $i$,它们的计算公式为:

$$
SS_{res} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
$$

$$
SS_{tot} = \sum_{i=1}^{n} (y_i - \bar{y})^2
$$

这里,$\bar{y}$ 是 $y_i$ 的平均值。

案例

我们同样继续使用之前的数据来计算 R² 值:

1
2
3
4
5
6
y_mean = np.mean(y_actual)
ss_res = np.sum((y_actual - y_predicted) ** 2)
ss_tot = np.sum((y_actual - y_mean) ** 2)

r_squared = 1 - (ss_res / ss_tot)
print("决定系数 (R²):", r_squared)

4. 解释标准误 (SE)

解释标准误是回归分析中的另一个重要评估指标,通常用于评估回归系数的估计精度,其计算公式为:

$$
SE = \sqrt{\frac{1}{n-2} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2}
$$

结论

对于给定的回归模型,上述这些评估指标能够全面地反映模型的性能与准确性。在实际应用中,通常需要结合多个指标来综合判断模型的好坏。模型评估不仅帮助我们识别不足之处,更指导我们进一步的模型改进与选择。

在进行实际分析时,不妨多尝试不同的评估指标,以全面理解模型的表现。