当前位置: 首页 > article >正文

机器学习:线性回归

什么是线性回归?

线性回归是一种监督学习算法,用于预测一个连续的数值目标变量。它通过一条直线(在单变量情况下)或超平面(在多变量情况下)来建模自变量与因变量之间的关系。

单变量线性回归

  • 模型形式y = β0 + β1x
    • y:因变量(预测值)
    • x:自变量(特征)
    • β0:截距项
    • β1:斜率系数
  • 目标是最小化预测值与实际值之间的误差,通常使用均方误差(MSE)作为损失函数。

多变量线性回归

  • 模型形式y = β0 + β1x1 + β2x2 + ... + βnxn
    • xn:自变量(特征)
    • 其他符号同上。

线性回归的参数调优方法

1. 梯度下降

概述:
梯度下降是一种迭代优化算法,通过逐步调整参数来最小化损失函数。

步骤:

  • 初始化参数: 设置初始的回归系数β₀和β₁。
  • 计算损失函数: 使用均方误差(MSE)衡量预测值与实际值之间的差异。
  • 计算梯度: 分别对β₀和β₁求损失函数关于它们的偏导数,得到当前参数下的梯度。
  • 更新参数: 按照梯度下降的方向调整参数值,即减去学习率乘以梯度。
  • 重复迭代: 重复上述步骤,直到达到预设的迭代次数或损失函数收敛。

代码实现:

def gradient_descent(X, y, beta, learning_rate, iterations):
    m = len(y)
    for _ in range(iterations):
        # 计算预测值
        y_pred = np.dot(X, beta)
        # 计算误差
        error = y_pred - y
        # 梯度计算
        gradient_0 = (1/m) * np.dot(error.T, X[:, 0])
        gradient_1 = (1/m) * np.dot(error.T, X[:, 1])
        # 参数更新
        beta[0] -= learning_rate * gradient_0
        beta[1] -= learning_rate * gradient_1
    return beta

2. 正规方程(Normal Equation)

概述:
正规方程通过直接求解损失函数的导数为零的条件,找到最优参数。

步骤:

  • 构建设计矩阵X: 包含所有特征。
  • 计算参数向量β: 使用公式β = (XᵀX)⁻¹Xᵀy求得。

代码实现:

def normal_equation(X, y):
    # 计算正规方程
    theta = np.linalg.inv(np.dot(X.T, X)).dot(np.dot(X.T, y))
    return theta

3. K折交叉验证(K-fold Cross Validation)

概述:
通过将数据集划分为多个子集,轮流使用其中一个作为验证集,其余的作为训练集,评估模型性能。

步骤:

  • 划分数据集: 将数据集分成k个子集。
  • 迭代评估: 在每个子集上进行一次评估,其他子集用于训练。
  • 计算平均性能: 综合所有折叠的评估结果,得到最终的模型性能指标。

代码实现:

from sklearn.model_selection import KFold

def cross_validation(X, y, model, k):
    kf = KFold(n_splits=k)
    scores = []
    for train_index, test_index in kf.split(X):
        X_train, X_test = X[train_index], X[test_index]
        y_train, y_test = y[train_index], y[test_index]
        model.fit(X_train, y_train)
        score = model.score(X_test, y_test)
        scores.append(score)
    return np.mean(scores), np.std(scores)

4. 正则化(Regularization)

概述:
加入惩罚项限制参数大小,防止过拟合。

  • L1正则化(Lasso): 使用绝对值的和作为惩罚项。
  • L2正则化(Ridge): 使用平方和作为惩罚项。

步骤:

  • 构建损失函数: 在原损失函数中加入正则化的惩罚项,比例由λ控制。
  • 优化参数: 通过梯度下降或其他方法最小化新损失函数。

代码实现:

def regularized_gradient_descent(X, y, beta, learning_rate, iterations, lambd):
    m = len(y)
    for _ in range(iterations):
        # 计算预测值
        y_pred = np.dot(X, beta)
        error = y_pred - y
        # 正则化项的梯度
        gradient_0 = (1/m) * np.dot(error.T, X[:, 0]) + lambd * beta[0]
        gradient_1 = (1/m) * np.dot(error.T, X[:, 1]) + lambd * beta[1]
        # 参数更新
        beta[0] -= learning_rate * gradient_0
        beta[1] 

http://www.kler.cn/a/544306.html

相关文章:

  • Java 同步锁性能的最佳实践:从理论到实践的完整指南
  • 使用 SDKMAN! 在 Mac(包括 ARM 架构的 M1/M2 芯片)安装适配 Java 8 的 Maven
  • Spring基于文心一言API使用的大模型
  • 渗透利器:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)
  • CEF132编译指南 MacOS 篇 - 构建 CEF (六)
  • PySpark查找Dataframe中的非ASCII字符并导出Excel文件
  • excel里的函数技巧(持续更新中)
  • route 与 router 之间的差别
  • 深挖vue3基本原理之一 —— 响应式系统(Reactivity System)
  • Rust学习总结之所有权(一)
  • 使用DeepSeek建立一个智能聊天机器人0.07
  • 【STM32】H743的以太网MAC控制器的一个特殊功能
  • phpipam1.7安装部署
  • DeepSeek遇袭后的深思:ManageEngine ITOM如何筑牢安全防线
  • Json-RPC框架项目(一)
  • 华为HCNA(华为认证网络工程师)大纲
  • # 解析Excel文件:处理Excel xlsx file not supported错误 [特殊字符]
  • 【数据结构】_堆排序问题
  • 【学习记录】AVL树及相关链表,线程池实现
  • 【matlab优化算法-16期】基于遗传算法的电热气及储能综合优化项目实践
  • HCIA项目实践--动态路由的相关知识
  • 六西格玛设计培训如何破解风电设备制造质量与成本困局
  • 如何使用deepseek等AI工具辅助前端工作的开发
  • 网络跨域问题深度解析与解决方案
  • 3. CSS中@scope
  • Haskell语言的软件工程