4 多变量线性回归(Linear Regression with Multiple Variables)4.1 多特征(Multiple Features)4.2 多变量梯度下降(Gradient Descent for Multiple Variables)4.3 梯度下降实践1-特征值缩放(Gradient Descent in Practice I - Feature Scaling)4.4 梯度下降实践2-学习速率(Gradient Descent in Practice II - Learning Rate)4.5 特征和多项式回归(Features and Polynomial Regression)4.6 正规方程(Normal Equation)4.7 不可逆性正规方程(Normal Equation Noninvertibility)5 Octave/Matlab Tutorial5.1 Basic Operations5.2 Moving Data Around5.3 Computing on Data5.4 Plotting Data5.5 Control Statements: for, while, if statement5.6 向量化(Vectorization)5.x 常用函数整理
对于一个要度量的对象,一般来说会有不同维度的多个特征。比如之前的房屋价格预测例子中,除了房屋的面积大小,可能还有房屋的年限、房屋的层数等等其他特征:
这里由于特征不再只有一个,引入一些新的记号
: 特征的总数
: 代表样本矩阵中第 行,也就是第 个训练实例。
: 代表样本矩阵中第 行的第 列,也就是第 个训练实例的第 个特征。
参照上图,则有
多变量假设函数 表示为:
对于 ,和单特征中一样,我们将其看作基础数值。例如,房价的基础价格。
参数向量的维度为 ,在特征向量中添加 后,其维度也变为 , 则运用线性代数,可简化 :
: 矩阵的转置
: 某个样本的特征向量, 维特征量向量
: 为了计算方便我们会假设
注:该部分记号较多,记不住可随时回顾!
多变量代价函数类似于单变量代价函数,
即 ,其中 。
前文提到梯度下降对于最小化代价函数的通用性,则多变量梯度下降公式即
解出偏导得:
可展开为:
当然,同单变量梯度下降一样,计算时需要同时更新所有参数。
,则得到同时更新参数的向量化(Vectorization)实现:
: 训练集数据, 维矩阵(包含基本特征 )
在应用梯度下降算法实践时,由于各特征值的范围不一,可能会影响代价函数收敛速度。
以房价预测问题为例,这里选取房屋面积大小和房间数量这两个特征。
下图中,左图是以原始数据绘制的代价函数轮廓图,右图为采用特征缩放(都除以最大值)后图像。左图中呈现的图像较扁,相对于使用特征缩放方法的右图,梯度下降算法需要更多次的迭代。
为了优化梯度下降的收敛速度,采用特征缩放的技巧,使各特征值的范围尽量一致。
除了以上图人工选择并除以一个参数的方式,均值归一化(Mean normalization)方法更为便捷,可采用它来对所有特征值统一缩放:
, 使得
对于特征的范围,并不一定需要使得 ,类似于 等也是可取的,而诸如 ,,就显得过大/过小了。
另外注意,一旦采用特征缩放,我们就需对所有的输入采用特征缩放,包括训练集、测试集、预测输入等。
通常,有两种方法来确定函数是否收敛
多次迭代收敛法
自动化测试收敛法(比较阈值)
对于梯度下降,一般采用多次迭代收敛法来得出最小化代价函数的参数值,自动化测试收敛法(如设定 时判定收敛)则几乎不会被使用。
我们可以通过绘制代价函数关于迭代次数的图像,可视化梯度下降的执行过程,借助直观的图形来发现代价函数趋向于多少时能趋于收敛,依据图像变化情况,确定诸如学习速率的取值,迭代次数的大小等问题。
对于学习速率 ,一般上图展现的为适中情况,下图中,左图可能表明 过大,代价函数无法收敛,右图可能表明 过小,代价函数收敛的太慢。当然, 足够小时,代价函数在每轮迭代后一定会减少。
通过不断改变 值,绘制并观察图像,并以此来确定合适的学习速率。 尝试时可取 如
在特征选取时,我们也可以自己归纳总结,定义一个新的特征,用来取代或拆分旧的一个或多个特征。比如,对于房屋面积特征来说,我们可以将其拆分为长度和宽度两个特征,反之,我们也可以合并长度和宽度这两个特征为面积这一个特征。
线性回归只能以直线来对数据进行拟合,有时候需要使用曲线来对数据进行拟合,即多项式回归(Polynomial Regression)。
比如一个二次方模型:
或者三次方模型:
或者平方根模型:
在使用多项式回归时,要记住非常有必要进行特征缩放,比如 的范围为 1-1000,那么 的范围则为 1- 1000000,不适用特征缩放的话,范围更有不一致,也更易影响效率。
对于一些线性回归问题来说,正规方程法给出了一个更好的解决问题的方式。
正规方程法,即令 ,通过解析函数的方式直接计算得出参数向量的值 ,Octave/Matlab 代码: theta = inv(X'*X)*X'*y
。
: 矩阵 的逆,在 Octave 中,
inv
函数用于计算矩阵的逆,类似的还有pinv
函数。
X'
: 在 Octave 中表示矩阵 X 的转置,即
下表列出了正规方程法与梯度下降算法的对比
正规方程法的推导过程:
展开上式可得
注意到 与 都为标量,实际上是等价的,则:
接下来对 求偏导,根据矩阵的求导法则:
所以有:
令, 则有
(本部分内容为选讲)
正规方程无法应用于不可逆的矩阵,发生这种问题的概率很小,通常由于
特征之间线性相关
比如同时包含英寸的尺寸和米为单位的尺寸两个特征,它们是线性相关的
即 。
特征数量大于训练集的数量。
如果发现 的结果不可逆,可尝试:
对于这类不可逆的矩阵,我们称之为奇异矩阵或退化矩阵。
这种情况下,如果还想使用正规方程法,在Octave中,可以选用 pinv
函数,pinv
区别于 inv
,pinv
函数被称为伪逆函数,在矩阵不可逆的时候,使用这个函数仍可正确地计算出 的值。
复习时可直接倍速回顾视频,笔记整理暂留。