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

主要内容来自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表示矩阵的逆矩阵。


原文地址:https://www.cnblogs.com/yxysuanfa/p/6863223.html