zoukankan      html  css  js  c++  java
  • 机器学习

    机器学习 - 2 - 线性回归

    首先吐槽我们的老师上课上得真是太烂了

    • PPT里有很多对本章内容没有意义的公式,而且还不解释是在干什么。。
    • 没有约定好数学符号
    • 没有说明是行向量还是列向量,一开始用列向量计算,然后改成了行向量,也没有说明

    回归

    1. 什么是回归

      • 定义:

        首先回归属于监督学习的一种,回归问题中,尝试预测连续的输出,与尝试预测离散的输出的分类问题恰恰相反。

      • 举个例子:

        • 预测房价
        • 预测身高
        • ...
    2. 回归模型

      • 素材:

        • 特征 (x)
        • 预测值 (y)
        • 训练集 ((x_i,y_i))
        • 学习算法
        • 回归函数 (f)
      • 线性回归时:

        [f(x_1,dots,x_m) = w_0 + sum_{i = 1}^{m}w_ix_i ]

      • 矩阵化(增加 (x_0 = 1),表示截距项):

        [f(X_{m×n}) = w^TX_{m×n} ]

        注:此时 (w) 是列向量;(X) 是一个矩阵,代表整个测试集,m 行,代表测试数据共有 m 个特征值,共 n 列,代表 n 组数据,其每一列都是一组测试

      • 一般化(当基函数不是多项式基函数时):

        [y(X,w) = sum_{i = 0}^{M-1}w_iphi_j(X) = w^TPhi(X) ]

    3. 问题本质

      • 拆分一下:

        • 定义目标函数
          • 使用训练集数据(真实数据)
          • 最小化预测值 (f) 与真实输出值 (y) 的差异
        • 确定模型中的参数 (w^T)
      • 目标函数(代价函数):

        [J(w) = frac{1}{2}sum_{i=1}^{N}(f(X_i)-y_i)^2 ]

        注:(X_i) 是 训练集矩阵中的第 i 列,还是个列向量

        进一步求出使 (J(w)) 最小的 (w) 即可。

    解回归

    1. 梯度下降法

      • 策略:

        • 随机赋 (w) 初值
        • 改变 (w_i) 的值,使 (J(w)) 越来越小
        • 沿梯度相反方向下降

        梯度为一个向量,表示某一函数在某一点的方向导数沿该方向时取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。

      • 举个例子:

        在爬山时,沿与等高线垂直的方向爬山,路最陡

      • 怎么操作:

        [w_j^t = w_j^{t-1}-alphafrac{partial}{partial w_j}J(w) ]

        [frac{partial}{partial w_j}J(w) = sum_{i=1}^{N}(f(X_i)-y_i)cdot X_{j,i} ]

        所有 (w_i) 同时更新,其中 (alpha) 为学习率/更新步长

        注:(X)代表训练集,其每一列(X_i)都是一组训练数据;(X_{j,i})表示第 i 组训练数据的第 j 个元素(有点绕弯,因为训练数据是竖着排的,但是横竖排本质是一样的)

      • 一些衍生:

        • 批处理梯度下降
          • 每次更新都利用所有数据
          • 大样本下,迭代速度很慢
        • 随机梯度下降
          • 每次只用一个样本
          • 迭代速度快,大样本下较为有效,又被称为在线学习
      • 一点补充:

    2. 标准方程组

      • 矩阵化:

        [J(w) = frac{1}{2}sum_{i=1}^{N}(f(X_i)-y_i)^2 = frac{1}{2}(w^TX-y^T)(w^TX-y^T)^T ]

        [= frac{1}{2}(w^TXX^Tw-w^TXy-y^TX^Tw+y^Ty) ]

        [= frac{1}{2}(w^TX-2y^T)X^Tw ]

        注:(y)是个列向量,另外 (w^TXy)(y^TX^Tw) 因为是一个数(列向量×行向量),所以值一样

      • 求导,令其为0:

        [frac{partial}{partial w}J(w) =frac{1}{2}(w^TX-2y^T)X^Tw ]

        [= XX^Tw-y^TX^T = 0 ]

        解得:

        [w = (XX^T)^{-1}y^TX^T ]

      • 一点补充:

    3. 孰优孰劣

      • 比较:

        梯度下降 标准方程
        需要选择学习率 不需要
        迭代很多次 一次
        (O(kn^2)) (O(n^3))
        n很大时表现良好 n很大时很慢
        数据需要归一化 不需要
      • 结论:

        样本量较小时选用标准方程组求解,样本量较大时选用梯度下降法求解

    补充链接

    1. matrix vector derivatives for machine learning
  • 相关阅读:
    JavaScript——类型检测
    JavaScript——语法与数据类型
    .NET下使用 Seq结构化日志系统
    Vs Code搭建 TypeScript 开发环境
    Entity Framework Core一键生成实体命令
    使用TestServer测试ASP.NET Core API
    Entity Framework Core导航属性加载问题
    Autofac创建实例的方法总结
    .NET Exceptionless 日志收集框架本地环境搭建
    依赖注入和控制反转
  • 原文地址:https://www.cnblogs.com/ChildishChange/p/9746265.html
Copyright © 2011-2022 走看看