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表示矩阵的逆矩阵。