回归问题:输出是实数
分类问题:输出是固定的离散值
在一个模型中,m表示训练集的数量,x表示输入,y表示输出,上标(i)表示数据在训练集中的索引。
单变量的线性回归:
使用梯度下降(gradient descent)的算法,调节θ的值。
设定初始的θ值,然后逐步改变θ,使J(θ1,θ2)减小,直到达到最小值。
每个参数是同步下降的。α称为learning rate,学习速率。既不能太小也不能太大,太小会导致θ的调节非常缓慢,过大又会造成每一次的调整都掠过了最小值,J函数的值反而增大。
随着偏导值的减小,α与偏导的乘积也减小,每一次计算θ移动的step也在减小,从而渐渐下降到最优值。就算一开始就处在最小值的位置,由于偏导是0,θ将不做任何改变,停在最优值处。
在线性回归中,J函数的局部最优值就是最小值。J(θ1,θ2)是一个凸函数(convex function)。
上述梯度下降算法被称为Batch Gradient Descent,这个batch的含义代表每一步都考虑所有的训练集training set。关于其他梯度下降算法可以参考https://blog.csdn.net/llx1990rl/article/details/44001921。
多变量线性回归
即有多个特征,x1,x2,x3,…,令x0=1,则有
多变量的梯度下降算法:
注意把公式向量化了。
由于多个特征xi的取值范围可能差距过大,需要把数据取值规范在某个共同的区间之内(feature scaling和mean normalization)。
feature scaling是把数值限制在-1与1之间,计算方法是用原值除以所有特征值中最大值与最小值的差。
mean normalization是对特征取值做改变,使它们的平均值近似取0,就是使它们均匀的分布在0的两边。计算方法是用原值减去所有特征值的平均值。
综合起来公式是这样的:
learning rate - α的选取:J的取值应该随着迭代次数的增加逐步下降,当每一次迭代,J下降不超过10^(-3)时,说明J已经达到了最优值。
J既增又减,不减反增,减了又增等,都说明α取值过大,需要减小α。
但当α取值过小时,J的下降速率会过慢,也不合适。
Ng通常取一系列的α值,然后选择其中最合适的那个。课程中的例子,每次扩大了约3倍。
对于已知depth和length的预测房价问题,将房子的depth和length相乘,转化为面积,从而将两个特征转化成了一个特征。拟合的函数也是多样的(多项式回归 polynomial regression):
可以将(size)^2等视为x2,转化为多变量的线性回归,此时要注意feature scaling和mean normalization。
正规方程(normal equation):相比于梯度下降,是一种直接计算θ取值的方法。
适用于当特征值不够多的情况,令J(θ)关于θj的偏导等于0,直接求值。
将X,y都用矩阵、向量表示之后,公式如下:
与梯度下降算法相比,正规方程方法可以直接的算出θ的值,不需要选择learning rate - α,也不需要迭代,但它需要做矩阵运算,当特征特别多时,运算速度会很慢。
梯度下降算法需要选择learning rate- α,经过迭代之后得到合适的θ,优点是即使特征特别多,也能很好的运用。
特征数n的取值分界在10,000,当特征数达到10,000时,更倾向于选择迭代的方法。
如果X'X不可逆,有两种情况:
(1)特征有冗余,对应于X矩阵中存在两列成比例,去掉多余的特征即可。
(2)特征数过多,此时m<=n,可以删掉一些特征,或者正则化(regularization)。