• 机器学习笔记:线性规划,梯度下降


    主要内容来自stanford Andrew Ng视频课程的总结。

    讲的非常好,还有相应的习题,课程能够在以下站点搜索到。

    https://www.coursera.org/

    机器学习的目的是在训练数据的基础上得出一个模型,该模型对于给定的输入x。给出对应的输出y。

    用公式表示就是:y = h(x)。

    注意x表示一维向量,x={x1,x2,x3...}。这里的xi也就是特征(feature),h就是模型。


    若输出y是连续值。则是回归预測问题。若y是离散值,则是分类问题。假设给定的训练数据是(输入-输出)对的形式。也就是明白指出某个输入x。其相应的输出是何值,这样的输入有监督学习。若训练数据中仅仅包括x,没有输出y,则是无监督学习。

    线性回归:
    输入和输出是一次相应关系。直观的说:二维空间中,x和y的关系能够用一条直线表示。在三维空间中,x和y的关系能够用一个平面表示。更高维的以此类推。属于一种预測问题。
    公式表演示样例如以下:
    二维:h(x) = θ0 + θ1*x1, 这个公式也能够看成 h(x) = θ0*x0 + θ1*x1,当中x0 = 1。

    普遍:h(x) = θ*x  (当中θ和x表示一维向量,包括n+1个元素,n就是特征的个数)
    当中x表示特征向量(和线性代数里的特征向量不是一个概念)。θ表示特征的系数。

    h(x)是依据模型计算出的结果,y是真正的输出。

    用J(θ)表示训练模型hθ计算出的结果和实际输出的差异:

    J(θ) = 1/2m * sum((hθ(x) - y)^2),当中m是训练集的大小。
    注意,J(θ)是关于系数θ的函数,因此公式中的模型用hθ(x)表示。
    线性回归问题中的目标就是找到一组θ使,J(θ)取到最小值。那么相应的hθ就是训练出的模型了。

    梯度下降:
    梯度下降是一种能找到J(θ)最小值的方法。
    该方法先随机指定一组系数θ,然后进行迭代。每次迭代通过改变θ的值来减小J(θ),直到J(θ)不再变小,或者达到要求。


    改变θ的方法:
    依次改变θ中的每一个元素。对于θi,求J(θ)对θi的偏导数J'(θi),再乘上每次改变θ的幅度。


    直观理解(不是非常准确):J'(θi)表示在维度θi上的梯度。也就是变化方向。若J'(θi)大于0,则随着θi增大,J(θi)也在增大,因此要减小θi的值。

    反之要增大θi的值。

    对J(θ)求偏导后,以上公式能够写成:
    θi = θi - α/m * sum( (hθ(xi) - yi) * xi )

    理论上梯度下降存在局部最小值。可是线性回归的J(θ)是一种类似高斯函数的钟形函数,是存在全局最小值的。

    详细的梯度下降法有batch gradient descent 和 随机梯度下降
    batch法,就是在每次迭代的过程中用所有m条训练数据求出J(θ)的偏导数,再更新θ。这种结果比較精准,可是每轮迭代就须要m*n次计算。

    若迭代T次,那么复杂度就是O(T*m*n)

    随即梯度下降法,是在一轮迭代过程中,每遍历一条训练数据,就更新一次θ。

    用公式表示就是:

    θi = θi - α * (hθ(xi) - yi)*xi
    尽管复杂度仍然是O(T*m*n),可是随机法的T比batch法T要小非常多,也就是迭代次数要少非常多。


    数据规范化:
    不同的特征的范围不同。比方x={x1,x2}。当中x1∈[1,1000],x2∈[1,10]。这样得出的结果误差大,因此须要将数据范围差异减小。

    一种方法是求得训练数据中每一个特征的均值mu,再求出标准差sig,将x = (x-mu)/sig,作为训练和预測的值。可是不用处理x0


    正规方程式:
    不管是哪种梯度下降,都要迭代。正规方程式不须要迭代。推到过程须要良好的数学基础,这里仅仅给出结果:
    θ = (x'*x)^-1*x'*y
    当中x'表示矩阵的装置。x^-1表示矩阵的逆矩阵。


  • 相关阅读:
    How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
    Android中MVC、MVP、MVVM具体解释
    破坏性创新第一原则
    Android学习笔记(八)——显示运行进度对话框
    Hadoop知识汇总
    mybatis collection和association使用区别
    mybatis $和#
    IDEA新建一个多maven模块工程(有图)
    可输入的下拉框
    springboot 使用i18n进行国际化
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6863223.html
Copyright © 2020-2023  润新知