线性回归原理与进阶

线性回归是机器学习和统计学中的基础工具,能直观呈现变量关系,也是复杂模型的基石,在预测房价、分析股票等场景中应用广泛。

线性回归基础原理

线性关系假设

  • 一元线性回归:y = \beta_0 + \beta_1x + \epsilon,其中y为因变量,x为自变量,\beta_0是截距,\beta_1是斜率,\epsilon是误差项。
  • 多元线性回归:y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \epsilonx_1x_n为多个自变量,\beta_1\beta_n是对应系数。

参数估计 - 最小二乘法

最小二乘法旨在最小化残差平方和SSR = \sum_{i=1}^{m} (y_i - \hat{y}_i)^2

一元线性回归参数闭式解:

\hat{\beta}_1 = \frac{\sum_{i=1}^{m} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m} (x_i - \bar{x})^2}\hat{\beta}_0 = \bar{y} - \hat{\beta}_1\bar{x}

代码实现:

import numpy as np

def 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 / denominator

beta0 = y_mean - beta1 * x_mean

return beta0, beta1

模型评估指标

  • MSE:\frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2
  • RMSE:\sqrt{MSE}
  • MAE:\frac{1}{m} \sum_{i=1}^{m} |y_i - \hat{y}_i|
  • \(R^2\):1 - \frac{\sum_{i=1}^{m} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{m} (y_i - \bar{y})^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_j = \frac{1}{1 - R_j^2}VIF_j > 10时多重共线性严重)。
  • 解决:删除高度相关变量、主成分分析、正则化回归。

VIF 计算代码:

from sklearn.linear_model import LinearRegression

def 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\)正则化,L(\beta) = \sum (y_i - \hat{y}_i)^2 + \lambda \sum \beta_j^2,缓解过拟合和多重共线性。
from sklearn.linear_model import Ridge

ridge = Ridge(alpha=0.1)
  • Lasso 回归:损失函数含\(L_1\)正则化,L(\beta) = \sum (y_i - \hat{y}_i)^2 + \lambda \sum |\beta_j|,可实现特征选择。
from sklearn.linear_model import Lasso

lasso = Lasso(alpha=0.01)

模型诊断与改进

  • 残差分析:通过残差图检查线性关系、误差独立性和方差齐性。
  • 过拟合与欠拟合:过拟合可通过增加数据、交叉验证解决;欠拟合可增加模型复杂度、进行特征工程。

残差图绘制代码:

import matplotlib.pyplot as plt

lr = LinearRegression()

lr.fit(X_train, y_train)

y_pred = lr.predict(X_test)

residuals = y_test - y_pred

plt.scatter(y_pred, residuals)

plt.axhline(y=0, color='r', linestyle='--')

plt.show()

交叉验证代码:

from sklearn.model_selection import cross_val_score

lr = LinearRegression()

scores = cross_val_score(lr, X, y, cv=5, scoring='neg_mean_squared_error')

mse_scores = -scores

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值