回归是统计学和机器学习中的一种基本方法,用于建模变量之间的关系,特别是用一个或多个自变量(输入变量)来预测一个因变量(输出变量)的值。回归分析广泛应用于预测、趋势分析和关联研究中。根据目标和数据的性质,可以使用不同类型的回归方法。
1. 回归的基本概念:
- 自变量(Independent Variable): 也称为预测变量、解释变量,是模型中的输入变量,用于预测或解释因变量的变化。
- 因变量(Dependent Variable): 也称为响应变量,是模型中的输出变量,是自变量的函数,并且我们试图对其进行预测或解释。
- 回归系数(Regression Coefficients): 表示自变量对因变量的影响程度。在简单线性回归中,回归系数就是斜率。
2. 常见的回归类型:
2.1 线性回归(Linear Regression):
-
简单线性回归 : 只有一个自变量和一个因变量,回归方程为 y = β 0 + β 1 x + ϵ y = \beta_0 + \beta_1 x + \epsilon y=β0+β1x+ϵ,其中 β 0 \beta_0 β0 是截距, β 1 \beta_1 β1 是斜率, ϵ \epsilon ϵ 是误差项。
pythonfrom sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)
-
多元线性回归 : 包含多个自变量,回归方程为 y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ϵ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n + \epsilon y=β0+β1x1+β2x2+⋯+βnxn+ϵ。
pythonmodel = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)
-
优点:
- 简单易解释。
- 在自变量和因变量呈线性关系时效果较好。
-
缺点:
- 假设自变量和因变量之间是线性关系,可能不适合复杂数据。
- 对多重共线性敏感。
2.2 岭回归(Ridge Regression):
-
在线性回归的基础上引入了 ( L2 ) 正则化项,防止模型过拟合。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ ∑ i = 1 n β i 2 y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda \sum_{i=1}^{n}\beta_i^2 y=β0+∑i=1nβixi+λ∑i=1nβi2。
pythonfrom sklearn.linear_model import Ridge ridge = Ridge(alpha=1.0) ridge.fit(X_train, y_train) y_pred = ridge.predict(X_test)
-
优点:
- 减少过拟合,提高模型的泛化能力。
-
缺点:
- 仍然假设线性关系。
2.3 Lasso回归(Lasso Regression):
-
引入 ( L1 ) 正则化项,会导致部分回归系数缩小到零,从而实现特征选择。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ ∑ i = 1 n ∣ β i ∣ y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda \sum_{i=1}^{n}|\beta_i| y=β0+∑i=1nβixi+λ∑i=1n∣βi∣。
pythonfrom sklearn.linear_model import Lasso lasso = Lasso(alpha=0.1) lasso.fit(X_train, y_train) y_pred = lasso.predict(X_test)
-
优点:
- 自动进行特征选择,简化模型。
-
缺点:
- 可能导致特征过多时过度简化。
2.4 弹性网回归(Elastic Net Regression):
-
结合了 Ridge 和 Lasso 的优点,同时引入 ( L1 ) 和 ( L2 ) 正则化项。回归方程为 y = β 0 + ∑ i = 1 n β i x i + λ 1 ∑ i = 1 n ∣ β i ∣ + λ 2 ∑ i = 1 n β i 2 y = \beta_0 + \sum_{i=1}^{n}\beta_i x_i + \lambda_1 \sum_{i=1}^{n}|\beta_i| + \lambda_2 \sum_{i=1}^{n}\beta_i^2 y=β0+∑i=1nβixi+λ1∑i=1n∣βi∣+λ2∑i=1nβi2。
pythonfrom sklearn.linear_model import ElasticNet elastic = ElasticNet(alpha=1.0, l1_ratio=0.5) elastic.fit(X_train, y_train) y_pred = elastic.predict(X_test)
-
优点:
- 结合了 Ridge 和 Lasso 的特性,平衡了特征选择和防止过拟合。
-
缺点:
- 需要调参。
2.5 多项式回归(Polynomial Regression):
-
适用于非线性数据,通过引入多项式特征,使模型可以拟合更复杂的曲线。回归方程为 y = β 0 + β 1 x + β 2 x 2 + ⋯ + β n x n y = \beta_0 + \beta_1 x + \beta_2 x^2 + \cdots + \beta_n x^n y=β0+β1x+β2x2+⋯+βnxn。
pythonfrom sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) X_poly = poly.fit_transform(X) model = LinearRegression() model.fit(X_poly, y) y_pred = model.predict(poly.transform(X_test))
-
优点:
- 可以拟合更复杂的关系。
-
缺点:
- 容易过拟合,需要仔细选择多项式的阶数。
2.6 逻辑回归(Logistic Regression):
-
尽管名为回归,但逻辑回归是用于二分类问题的。它使用 sigmoid 函数将线性回归的输出映射到 0 和 1 之间,表示某类的概率。
pythonfrom sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)
-
优点:
- 简单且有效。
- 可以解释模型输出为概率值。
-
缺点:
- 只能处理二分类问题,且假设自变量与因变量的关系是线性可分的。
2.7 决策树回归(Decision Tree Regression):
-
基于决策树的模型,通过递归划分特征空间,将复杂的决策问题分解为一系列简单的决策。适用于处理非线性关系。
pythonfrom sklearn.tree import DecisionTreeRegressor model = DecisionTreeRegressor() model.fit(X_train, y_train) y_pred = model.predict(X_test)
-
优点:
- 不需要特征缩放。
- 能处理非线性数据。
-
缺点:
- 容易过拟合,需要剪枝或限制树的深度。
2.8 随机森林回归(Random Forest Regression):
-
集成多个决策树的结果,减少过拟合,提升模型的泛化能力。
pythonfrom sklearn.ensemble import RandomForestRegressor model = RandomForestRegressor(n_estimators=100) model.fit(X_train, y_train) y_pred = model.predict(X_test)
-
优点:
- 强大的泛化能力。
- 处理高维数据和缺失值的能力强。
-
缺点:
- 相对黑箱,不易解释。
3. 回归模型的评价指标:
- 均方误差(MSE) : MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2 MSE=n1∑i=1n(yi−y^i)2,用来衡量模型预测值与实际值之间的误差。
- 均方根误差(RMSE) : RMSE = MSE \text{RMSE} = \sqrt{\text{MSE}} RMSE=MSE ,它是 MSE 的平方根,更直观地反映误差的大小。
- 平均绝对误差(MAE) : MAE = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i| MAE=n1∑i=1n∣yi−y^i∣,它比 MSE 对异常值不敏感。
- R 2 R^2 R2 决定系数 : 表示模型解释数据方差的比例, R 2 R^2 R2 越接近 1,模型的拟合效果越好。
python
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
4. 回归模型的应用:
- boston房价预测