线性回归原理与进阶
线性回归是机器学习和统计学中的基础工具,能直观呈现变量关系,也是复杂模型的基石,在预测房价、分析股票等场景中应用广泛。
线性回归基础原理
线性关系假设
- 一元线性回归:
,其中y为因变量,x为自变量,
是截距,
是斜率,
是误差项。
- 多元线性回归:
,
到
为多个自变量,
到
是对应系数。
参数估计 - 最小二乘法
最小二乘法旨在最小化残差平方和。
一元线性回归参数闭式解:
,
代码实现:
import numpy as npdef linear_regression(x, y):m = len(x)x_mean, y_mean = np.mean(x), np.mean(y)numerator = np.sum((x - x_mean) * (y - y_mean))denominator = np.sum((x - x_mean) **2)beta1 = numerator / denominatorbeta0 = y_mean - beta1 * x_meanreturn beta0, beta1
模型评估指标
- MSE:
- RMSE:
- MAE:
- \(R^2\):
代码实现:
def calculate_metrics(y_true, y_pred):mse = np.mean((y_true - y_pred)** 2)rmse = np.sqrt(mse)mae = np.mean(np.abs(y_true - y_pred))ss_total = np.sum((y_true - np.mean(y_true)) **2)ss_residual = np.sum((y_true - y_pred)** 2)r2 = 1 - (ss_residual / ss_total)return mse, rmse, mae, r2
线性回归进阶
处理多重共线性
- 检测:计算自变量相关系数或方差膨胀因子
(
时多重共线性严重)。
- 解决:删除高度相关变量、主成分分析、正则化回归。
VIF 计算代码:
from sklearn.linear_model import LinearRegressiondef calculate_vif(X):vif = []for i in range(X.shape[1]):X_rest = np.delete(X, i, axis=1)X_i = X[:, i]lr = LinearRegression()lr.fit(X_rest, X_i)r2 = lr.score(X_rest, X_i)vif.append(1 / (1 - r2))return np.array(vif)
正则化回归
- 岭回归:损失函数含\(L_2\)正则化,
,缓解过拟合和多重共线性。
from sklearn.linear_model import Ridgeridge = Ridge(alpha=0.1)
- Lasso 回归:损失函数含\(L_1\)正则化,
,可实现特征选择。
from sklearn.linear_model import Lassolasso = Lasso(alpha=0.01)
模型诊断与改进
- 残差分析:通过残差图检查线性关系、误差独立性和方差齐性。
- 过拟合与欠拟合:过拟合可通过增加数据、交叉验证解决;欠拟合可增加模型复杂度、进行特征工程。
残差图绘制代码:
import matplotlib.pyplot as pltlr = LinearRegression()lr.fit(X_train, y_train)y_pred = lr.predict(X_test)residuals = y_test - y_predplt.scatter(y_pred, residuals)plt.axhline(y=0, color='r', linestyle='--')plt.show()
交叉验证代码:
from sklearn.model_selection import cross_val_scorelr = LinearRegression()scores = cross_val_score(lr, X, y, cv=5, scoring='neg_mean_squared_error')mse_scores = -scores