本人在学习斯坦福大学的机器学习课程,特记录课程概要内容。课程地址: Andrew Ng机器学习课程
多个特征值
多个特征值的线性回归也被称为“多元线性回归”。
下面介绍的公式符号,可以有任意数量的输入变量。
- x(i)j = 第ith个训练集实例中的第j个特征值
- x(i) = 第ith个训练集实例的输入集合(特征值)
- m = 训练集实例个数
- n = 实例的特征值个数
对应多元特征值的假设函数的变形式如下:
hθ(x) = θ0 + θ1x1 + θ2x2 + θ3x3 + ... + θnxn
为了直观的表示这个方程,我们可以将 θ0 作为房子的基本价格,将 θ1 作为每平方的价格, θ2 作为每层楼的价格等等。x1 将是房子的平方数,x2 是房子的楼层数等。
使用矩阵乘法的定义,我们的多元假设函数可以简洁地表示为:
这是我们对一个训练集示例的假设函数的向量化。
备注:请注意,为了方便起见,我们假设 x(i)0 = 1 (i∈1,...,m)。这使得我们可以用 θ 和 x 进行矩阵运算。因此我们让两个向量 'θ' 和 x(i) 的维度保持一致(即具有相同数量的元素: n + 1 个)。
多元梯度下降
梯度下降方程本身通常是相同的形式; 我们只需重复一下我们的 'n' 功能:
重复直到收敛: {
}
就是说:
重复直到收敛: {
}
以下图将一个变量与多个变量的梯度下降进行了比较:
梯度下降实例 I - 特征缩放
我们可以通过使每个输入值在大致相同的范围内来加快梯度下降。这是因为在较小的范围内,θ 会快速下降,而在较大的范围内会缓慢下降,因此当变量非常不均匀时,它会低效地摆动到最佳状态。
防止这种情况的方法是修改输入值的范围,使其大致相同。理想的情况是:
−1 ≤ x(i) ≤ 1
或者
−0.5 ≤ x(i) ≤ 0.5
这些不需要很精确; 我们只是想加快速度。目标是将所有输入值大致分到这些范围。
做到这点的两种技术是特征缩放和均值归一化。特征缩放包括将输入值除以输入值的范围(即最大值减去最小值),使得新值的范围为 1。均值归一化指把输入值减去输入值的平均值,使新输入值的平均值为零。要实现这两种技术,需如以下公式所示调整输入值:
其中 μi 是所有特征值(i)的平均值,si 是值(最大值-最小值)的范围,或是标准偏差。
需要注意的是除以的范围或除以标准偏差,会得到不同的结果。
例如,如果 xi 代表100到2000范围内的房价,平均值为1000,那么:
梯度下降实例 II - 学习速率
调试梯度下降: 可以以 x 轴为迭代次数绘制一个图。然后梯度下降次数上绘制代价函数J(θ)。如果J(θ)增加,那么您可能需要减小 α 值。
自动收敛测试: 如果在一次迭代中 J(θ) 减小值小于 E ,则代表其已经收敛,其中 E 是一些较小的值,例如 10-3 。但实际上这个阈值很难选择。
已经证明,如果学习率 α 足够小,则 J(θ) 将在每次迭代时减小。
总结:
- 如果 α 值太小: 收敛缓慢。
- 如果 α 值太大: 每次迭代可能不会减小,从而可能不会收敛。
特征值和多项式回归
我们可以通过几种不同的方式改进特征值和假设函数的形式。
我们可以将多个特征值合成一个。例如,我们可以以 x1x2 合并 x1 和 x2 组成新的特征值 x3 。
多项式回归
如果直线不能很好的拟合数据,我们的假设函数也不需要是一条直线。
我们可以通过使其成为二次,立方或平方根函数(或任何其他形式)来改变假设函数的行为或曲线。
例如,如果我们的假设函数是 hθ = θ0 + θ1x1 ,然后我们可以在 x1 基础上增加特征值,获得二次函数 hθ = θ0 + θ1x1 + θ2x12 或者立方函数 hθ = θ0 + θ1x1 + θ2x12 + θ3x13
在立方函数里,我们可以创建新的特征值 x2 和 x3 , 分别为 x2 = x12 和 x3 = x13
使它成为平方根函数则可以是:
一个重要事情是,如果以这种方式选择特征值,则特征缩放将变得非常重要。
例如,如果 x1 的范围为 1 - 1000 ,那么 x12 的范围将变为 1 - 1000,000 ,x13 的范围将变为 1 - 1000,000,000