diff --git a/image/20180112_085630.png b/image/20180112_085630.png new file mode 100644 index 0000000..0e9c5c2 Binary files /dev/null and b/image/20180112_085630.png differ diff --git a/image/20180112_091654.png b/image/20180112_091654.png new file mode 100644 index 0000000..2c63a08 Binary files /dev/null and b/image/20180112_091654.png differ diff --git a/image/20180112_092027.png b/image/20180112_092027.png new file mode 100644 index 0000000..d8940a4 Binary files /dev/null and b/image/20180112_092027.png differ diff --git a/week2.html b/week2.html index 31f91ff..4f0387a 100644 --- a/week2.html +++ b/week2.html @@ -220,8 +220,8 @@ header, .context-menu, .megamenu-content, footer { font-family: "Segoe UI", Aria -

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 Vectorization5.x 常用函数整理

4 多变量线性回归(Linear Regression with Multiple Variables)

4.1 多特征(Multiple Features)

对于一个要度量的对象,一般来说会有不同维度的多个特征。比如之前的房屋价格预测例子中,除了房屋的面积大小,可能还有房屋的年限、房屋的层数等等其他特征:

这里由于特征不再只有一个,引入一些新的记号

: 特征的总数

: 代表样本矩阵中第 行,也就是第 个训练实例。

: 代表样本矩阵中第 行的第 列,也就是第 个训练实例的第 个特征。

参照上图,则有

多变量假设函数 表示为:

对于 ,和单特征中一样,我们将其看作基础数值。例如,房价的基础价格。

参数向量的维度为 ,在特征向量中添加 后,其维度也变为 , 则运用线性代数,可简化

: 矩阵的转置

: 某个样本的特征向量, 维特征量向量

: 为了计算方便我们会假设

注:该部分记号较多,记不住可随时回顾!

 

4.2 多变量梯度下降(Gradient Descent for Multiple Variables)

多变量损失函数类似于单变量损失函数,

,其中

前文提到梯度下降对于最小化损失函数的通用性,则多变量梯度下降公式即

解出偏导得:

可展开为:

当然,同单变量梯度下降一样,计算时需要同时更新所有参数。

,则得到同时更新参数的向量化(Vectorization)实现:

: 训练集数据, 维矩阵(包含额外特征

4.3 梯度下降实践1-特征值缩放(Gradient Descent in Practice I - Feature Scaling)

在应用梯度下降算法实践时,由于各特征值的范围不一,可能会影响损失函数收敛速度。

以房价预测问题为例,这里选取房屋面积大小和房间数量这两个特征。

下图中,左图是以原始数据绘制的损失函数轮廓图,右图为采用特征缩放(都除以最大值)后图像。左图中呈现的图像较扁,相对于使用特征缩放方法的右图,梯度下降算法需要更多次的迭代。

 

为了优化梯度下降的收敛速度,采用特征缩放的技巧,使各特征值的范围尽量一致

除了以上图人工选择并除以一个参数的方式,均值归一化(Mean normalization)方法更为便捷,可采用它来对所有特征值统一缩放:

使

对于特征的范围,并不一定需要使得 ,类似于 等也是可取的,而诸如 ,就显得过大/过小了。

另外注意,一旦采用特征缩放,我们就需对所有的输入采用特征缩放,包括训练集、测试集、预测输入等。

4.4 梯度下降实践2-学习速率(Gradient Descent in Practice II - Learning Rate)

通常,有两种方法来确定函数是否收敛

对于梯度下降,一般采用多次迭代收敛法来得出最小化损失函数的参数值,自动化测试收敛法(如设定 时判定收敛)则几乎不会被使用。

我们可以通过绘制损失函数关于迭代次数的图像,可视化梯度下降的执行过程,借助直观的图形来发现损失函数趋向于多少时能趋于收敛,依据图像变化情况,确定诸如学习速率的取值,迭代次数的大小等问题。

对于学习速率 ,一般上图展现的为适中情况,下图中,左图可能表明 过大,损失函数无法收敛,右图可能表明 过小,损失函数收敛的太慢。当然, 足够小时,损失函数在每轮迭代后一定会减少。

通过不断改变 值,绘制并观察图像,并以此来确定合适的学习速率。 尝试时可取

4.5 特征和多项式回归(Features and Polynomial Regression)

在特征选取时,我们也可以自己归纳总结,定义一个新的特征,用来取代或拆分旧的一个或多个特征。比如,对于房屋面积特征来说,我们可以将其拆分为长度和宽度两个特征,反之,我们也可以合并长度和宽度这两个特征为面积这一个特征。

线性回归只能以直线来对数据进行拟合,有时候需要使用曲线来对数据进行拟合,即多项式回归(Polynomial Regression)

比如一个二次方模型:

或者三次方模型:

或者平方根模型:

在使用多项式回归时,要记住非常有必要进行特征缩放,比如 的范围为 1-1000,那么 的范围则为 1- 1000000,不适用特征缩放的话,范围更有不一致,也更易影响效率。

4.6 正规方程(Normal Equation)

对于一些线性回归问题来说,正规方程法给出了一个更好的解决问题的方式。

正规方程法,即令 ,通过解析函数的方式直接计算得出参数向量的值 ,Octave 中代码为 theta = inv(X'*X)*X'*y

: 矩阵 的逆,在 Octave 中,inv 函数用于计算矩阵的逆,类似的还有 pinv 函数。

下表列出了正规方程法与梯度下降算法的对比

条件梯度下降正规方程
是否需要选取 需要不需要
是否需要迭代运算需要不需要
特征量大1适用,不适用, 复杂度
适用范围2各类模型只适用线性模型,且矩阵需可逆

正规方程法的推导过程

展开上式可得

注意到 都为标量,实际上是等价的,则

接下来对 求偏导,根据矩阵的求导法则:

所以有:

, 则有

4.7 不可逆性正规方程(Normal Equation Noninvertibility)

(本部分内容为选讲)

正规方程无法应用于不可逆的矩阵,发生这种问题的概率很小,通常由于

如果发现 的结果不可逆,可尝试:

对于这类不可逆的矩阵,我们称之为奇异矩阵退化矩阵

这种情况下,如果还想使用正规方程法,在Octave中,可以选用 pinv 函数,pinv 区别于 invpinv 函数被称为伪逆函数,在矩阵不可逆的时候,使用这个函数仍可正确地计算出 的值。

5 Octave/Matlab Tutorial

复习时可直接倍速回顾视频,笔记整理暂留。

5.1 Basic Operations

5.2 Moving Data Around

5.3 Computing on Data

5.4 Plotting Data

5.5 Control Statements_ for, while, if statement

5.6 Vectorization

5.x 常用函数整理


-
1 一般来说,当 超过 10000 时,对于正规方程而言,特征量较大。
+

4 多变量线性回归(Linear Regression with Multiple Variables)

4.1 多特征(Multiple Features)

对于一个要度量的对象,一般来说会有不同维度的多个特征。比如之前的房屋价格预测例子中,除了房屋的面积大小,可能还有房屋的年限、房屋的层数等等其他特征:

这里由于特征不再只有一个,引入一些新的记号

: 特征的总数

: 代表样本矩阵中第 行,也就是第 个训练实例。

: 代表样本矩阵中第 行的第 列,也就是第 个训练实例的第 个特征。

参照上图,则有

多变量假设函数 表示为:

对于 ,和单特征中一样,我们将其看作基础数值。例如,房价的基础价格。

参数向量的维度为 ,在特征向量中添加 后,其维度也变为 , 则运用线性代数,可简化

: 矩阵的转置

: 某个样本的特征向量, 维特征量向量

: 为了计算方便我们会假设

注:该部分记号较多,记不住可随时回顾!

 

4.2 多变量梯度下降(Gradient Descent for Multiple Variables)

多变量损失函数类似于单变量损失函数,

,其中

前文提到梯度下降对于最小化损失函数的通用性,则多变量梯度下降公式即

解出偏导得:

可展开为:

当然,同单变量梯度下降一样,计算时需要同时更新所有参数。

,则得到同时更新参数的向量化(Vectorization)实现:

: 训练集数据, 维矩阵(包含额外特征

4.3 梯度下降实践1-特征值缩放(Gradient Descent in Practice I - Feature Scaling)

在应用梯度下降算法实践时,由于各特征值的范围不一,可能会影响损失函数收敛速度。

以房价预测问题为例,这里选取房屋面积大小和房间数量这两个特征。

下图中,左图是以原始数据绘制的损失函数轮廓图,右图为采用特征缩放(都除以最大值)后图像。左图中呈现的图像较扁,相对于使用特征缩放方法的右图,梯度下降算法需要更多次的迭代。

 

为了优化梯度下降的收敛速度,采用特征缩放的技巧,使各特征值的范围尽量一致

除了以上图人工选择并除以一个参数的方式,均值归一化(Mean normalization)方法更为便捷,可采用它来对所有特征值统一缩放:

使

对于特征的范围,并不一定需要使得 ,类似于 等也是可取的,而诸如 ,就显得过大/过小了。

另外注意,一旦采用特征缩放,我们就需对所有的输入采用特征缩放,包括训练集、测试集、预测输入等。

4.4 梯度下降实践2-学习速率(Gradient Descent in Practice II - Learning Rate)

通常,有两种方法来确定函数是否收敛

  • 多次迭代收敛法

    • 无法确定需要多少次迭代
    • 较易绘制关于迭代次数的图像
    • 根据图像易预测所需的迭代次数
  • 自动化测试收敛法(比较阈值)

    • 不易选取阈值
    • 损失函数近乎直线时无法确定收敛情况

对于梯度下降,一般采用多次迭代收敛法来得出最小化损失函数的参数值,自动化测试收敛法(如设定 时判定收敛)则几乎不会被使用。

我们可以通过绘制损失函数关于迭代次数的图像,可视化梯度下降的执行过程,借助直观的图形来发现损失函数趋向于多少时能趋于收敛,依据图像变化情况,确定诸如学习速率的取值,迭代次数的大小等问题。

对于学习速率 ,一般上图展现的为适中情况,下图中,左图可能表明 过大,损失函数无法收敛,右图可能表明 过小,损失函数收敛的太慢。当然, 足够小时,损失函数在每轮迭代后一定会减少。

通过不断改变 值,绘制并观察图像,并以此来确定合适的学习速率。 尝试时可取

4.5 特征和多项式回归(Features and Polynomial Regression)

在特征选取时,我们也可以自己归纳总结,定义一个新的特征,用来取代或拆分旧的一个或多个特征。比如,对于房屋面积特征来说,我们可以将其拆分为长度和宽度两个特征,反之,我们也可以合并长度和宽度这两个特征为面积这一个特征。

线性回归只能以直线来对数据进行拟合,有时候需要使用曲线来对数据进行拟合,即多项式回归(Polynomial Regression)

比如一个二次方模型:

或者三次方模型:

或者平方根模型:

在使用多项式回归时,要记住非常有必要进行特征缩放,比如 的范围为 1-1000,那么 的范围则为 1- 1000000,不适用特征缩放的话,范围更有不一致,也更易影响效率。

4.6 正规方程(Normal Equation)

对于一些线性回归问题来说,正规方程法给出了一个更好的解决问题的方式。

正规方程法,即令 ,通过解析函数的方式直接计算得出参数向量的值 ,Octave 中代码为 theta = inv(X'*X)*X'*y

: 矩阵 的逆,在 Octave 中,inv 函数用于计算矩阵的逆,类似的还有 pinv 函数。

下表列出了正规方程法与梯度下降算法的对比

条件梯度下降正规方程
是否需要选取 需要不需要
是否需要迭代运算需要不需要
特征量大1适用,不适用, 复杂度
适用范围2各类模型只适用线性模型,且矩阵需可逆

正规方程法的推导过程

展开上式可得

注意到 都为标量,实际上是等价的,则

接下来对 求偏导,根据矩阵的求导法则:

所以有:

, 则有

4.7 不可逆性正规方程(Normal Equation Noninvertibility)

(本部分内容为选讲)

正规方程无法应用于不可逆的矩阵,发生这种问题的概率很小,通常由于

  • 特征之间线性相关

    比如同时包含英寸的尺寸和米为单位的尺寸两个特征,它们是线性相关的

  • 特征数量大于训练集的数量

如果发现 的结果不可逆,可尝试:

  • 减少多余/重复特征
  • 增加训练集数量
  • 使用正则化(后文)

对于这类不可逆的矩阵,我们称之为奇异矩阵退化矩阵

这种情况下,如果还想使用正规方程法,在Octave中,可以选用 pinv 函数,pinv 区别于 invpinv 函数被称为伪逆函数,在矩阵不可逆的时候,使用这个函数仍可正确地计算出 的值。

5 Octave/Matlab Tutorial

复习时可直接倍速回顾视频,笔记整理暂留。

5.1 Basic Operations

5.2 Moving Data Around

5.3 Computing on Data

5.4 Plotting Data

5.5 Control Statements_ for, while, if statement

5.6 向量化(Vectorization)

5.x 常用函数整理


+
1 一般来说,当 超过 10000 时,对于正规方程而言,特征量较大。
2 梯度下降算法的普适性好,而对于特定的线性回归模型,正规方程是很好的替代品。
\ No newline at end of file diff --git a/week2.md b/week2.md index a0a575b..d1bb22f 100644 --- a/week2.md +++ b/week2.md @@ -214,6 +214,8 @@ $$ ## 5.5 Control Statements_ for, while, if statement -## 5.6 Vectorization +## 5.6 向量化(Vectorization) + +$\sum\limits_{j=0}^n\theta_jx_j=\theta^Tx$ ## 5.x 常用函数整理 \ No newline at end of file diff --git a/week3.html b/week3.html index a7ea504..19cfa8c 100644 --- a/week3.html +++ b/week3.html @@ -332,16 +332,19 @@ header, .context-menu, .megamenu-content, footer { font-family: "Segoe UI", Aria -

6 逻辑回归(Logistic Regression)

6.1 分类(Classification)

在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。

  • 垃圾邮件判断
  • 金融欺诈判断
  • 肿瘤诊断

讨论肿瘤诊断问题:

肿瘤诊断问题的目的是告诉病人是否为恶性肿瘤,是一个二元分类问题(binary class problems),则定义 ,其中 0 表示负向类(negative class),代表恶性肿瘤("-"),1 为正向类(positive class),代表良性肿瘤("+")。如图,定义最右边的样本为偏差项

在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定

,预测为 ,即正向类;

,预测为 ,即负向类。

即以 0.5 为阈值(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果

 

接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。

不仅如此,线性回归算法的值域为 ,则当线性回归函数给出诸如 等很大/很小(负数)的数值时,结果 ,这显得非常怪异。

 

区别于线性回归算法,逻辑回归算法是一个分类算法,其输出值永远在 0 到 1 之间,即

6.2 假设函数表示(Hypothesis Representation)

为了使 ,引入逻辑回归模型,定义假设函数

对比线性回归函数 表示逻辑函数(logistic function),复合起来,则称为逻辑回归函数。

逻辑函数是 S 形函数,会将所有实数映射到 范围。

sigmoid 函数(如下图)是逻辑函数的特殊情况,其公式为

sigmoid function

应用 sigmoid 函数,则逻辑回归模型:

逻辑回归模型中, 的作用是,根据输入 以及参数 ,计算得出”输出 “的可能性(estimated probability),概率学中表示为:

 

以肿瘤诊断为例, 表示病人有 的概率得了恶性肿瘤。

6.3 决策边界(Decision Boundary)

决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。

在逻辑回归中,有假设函数

为了得出分类的结果,这里和前面一样,规定以 为阈值:

回忆一下逻辑函数的图像:

sigmoid function

观察可得当 时,有 ,即

同线性回归模型的不同点在于:

直观一点来个例子, 是下图模型的假设函数:

根据上面的讨论,要进行分类,那么只要 时,就预测 ,即预测为正向类。

如果取 ,则有 ,当 时,易绘制图中的品红色直线即决策边界,为正向类(以红叉标注的数据)给出 的分类预测结果。

 

上面讨论了逻辑回归模型中线性拟合的例子,下面则是一个多项式拟合的例子,和线性回归中的情况也是类似的。

为了拟合下图数据,建模多项式假设函数:

这里取 ,决策边界对应了一个在原点处的单位圆(),如此便可给出分类结果,如图中品红色曲线:

 

当然,通过一些更为复杂的多项式,还能拟合那些图像显得非常怪异的数据,使得决策边界形似碗状、爱心状等等。

 

简单来说,决策边界就是分类的分界线,分类现在实际就由 (中的 )决定啦。

6.4 损失函数(Cost Function)

上节又留下了个问题,我们怎么知道决策边界是啥样? 多少时能很好的拟合数据?当然,见招拆招,总要来个

如果直接套用线性回归的损失函数:

其中 ,可绘制关于 的图像,如下图

回忆线性回归中的损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中有许多局部最小点,这样梯度下降算法将无法确定收敛点是全局最优。

如果是一个凸函数,可以对其进行最优化分析,这类最优化问题,称为凸优化问题。还好,损失函数不止平方损失函数一种。

对于逻辑回归,更换平方损失函数为对数损失函数:

则可绘制关于 的图像如下:

如左图,当训练集的结果为 (正样本)时,随着假设函数趋向于 ,损失函数的值会趋于 ,即意味着拟合程度很好。如果假设函数此时趋于 ,则会给出一个很高的损失,拟合程度,算法会根据其迅速纠正 值,右图 同理。

区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。

6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)

由于懒得分类讨论,对于二元分类问题,我们把损失函数简化为一个函数: -

,左边式子整体为 ,当 ,则 ,右边式子整体为0,也就和上面的分段函数一样了,而一个式子计算起来更方便。

向量化实现:

 

为了最优化 ,仍使用梯度下降法,算法同线性回归中一致:

解出偏导得:

注意,虽然形式上梯度下降算法同线性回归一样,但其中的假设函不同,即,不过求导后的结果也相同。

向量化实现:

 

对数损失函数求导的推导过程:

带入得

-

根据求偏导的性质,没有 的项都消去,则得:

所以有:

- - - - - - -

则可得对数损失函数的导数:

6.6 进阶优化(Advanced Optimization)

运行梯度下降算法,其能最小化损失函数 并得出 的最优值,在使用梯度下降算法时,如果不需要观察损失函数的收敛情况,则直接计算 的导数项即可,而不需要计算 值。

我们编写代码给出损失函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化损失函数给出参数的最优解。这类算法被称为最优化算法(Optimization Algorithms),梯度下降算法不是唯一的最小化算法1

一些最优化算法:

  • 梯度下降法(Gradient Descent)

  • 共轭梯度算法(Conjugate gradient)

  • 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)

    • DFP算法
    • 局部优化法(BFGS)
    • 有限内存局部优化法(L-BFGS)
  • 拉格朗日乘数法(Lagrange multiplier)

比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 (少一个参数少一份痛苦啊!)。

Octave/Matlab 中对这类高级算法做了封装,易于调用。

 

假设有 ,要求参数 的最优值。

下面为 Octave/Matlab 求解最优化问题的代码实例:

  1. 创建一个函数以返回损失函数及其偏导数:
 
  1. costFunction 函数及所需参数传入最优化函数 fminunc,以求解最优化问题:
 

'GradObj', 'on': 启用梯度目标参数(则需要将梯度传入算法)

'MaxIter', 100: 最大迭代次数为 100 次

@xxx: Octave/Matlab 中的函数指针

optTheta: 最优化得到的参数向量

functionVal: 引用函数最后一次的返回值

exitFlag: 标记损失函数是否收敛

注:Octave/Matlab 中可以使用 help fminunc 命令随时查看函数的帮助文档。

  1. 返回结果
 

6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)

一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。(⊙﹏⊙)有点累,让我歇歇,丢张图去休息啦。。。

原理是,转化多类别分类问题为多个二元分类问题,这种方法被称为 One-vs-all。

正式定义:

: 输出 (属于第 个分类)的可能性

: 类别总数,如上图

注意多类别分类问题中 的结果不再只是一个实数而是一个向量,如果类别总数为 ,现在 就是一个 维向量。

对于某个样本实例,需计算所有的 种分类情况得到 ,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即

7 Regularization

7.1 The Problem of Overfitting

7.2 Cost Function

7.3 Regularized Linear Regression

7.4 Regularized Logistic Regression


+

6 逻辑回归(Logistic Regression)

6.1 分类(Classification)

在分类问题中,预测的结果是离散值(结果是否属于某一类),逻辑回归算法(Logistic Regression)被用于解决这类分类问题。

  • 垃圾邮件判断
  • 金融欺诈判断
  • 肿瘤诊断

讨论肿瘤诊断问题:

肿瘤诊断问题的目的是告诉病人是否为恶性肿瘤,是一个二元分类问题(binary class problems),则定义 ,其中 0 表示负向类(negative class),代表恶性肿瘤("-"),1 为正向类(positive class),代表良性肿瘤("+")。如图,定义最右边的样本为偏差项

在未加入偏差项时,线性回归算法给出了品红色的拟合直线,若规定

,预测为 ,即正向类;

,预测为 ,即负向类。

即以 0.5 为阈值(threshold),则我们就可以根据线性回归结果,得到相对正确的分类结果

 

接下来加入偏差项,线性回归算法给出了靛青色的拟合直线,如果阈值仍然为 0.5,可以看到算法在某些情况下会给出完全错误的结果,对于癌症、肿瘤诊断这类要求预测极其精确的问题,这种情况是无法容忍的。

不仅如此,线性回归算法的值域为 ,则当线性回归函数给出诸如 等很大/很小(负数)的数值时,结果 ,这显得非常怪异。

 

区别于线性回归算法,逻辑回归算法是一个分类算法,其输出值永远在 0 到 1 之间,即

6.2 假设函数表示(Hypothesis Representation)

为了使 ,引入逻辑回归模型,定义假设函数

对比线性回归函数 表示逻辑函数(logistic function),复合起来,则称为逻辑回归函数。

逻辑函数是 S 形函数,会将所有实数映射到 范围。

sigmoid 函数(如下图)是逻辑函数的特殊情况,其公式为

sigmoid function

应用 sigmoid 函数,则逻辑回归模型:

逻辑回归模型中, 的作用是,根据输入 以及参数 ,计算得出”输出 “的可能性(estimated probability),概率学中表示为:

 

以肿瘤诊断为例, 表示病人有 的概率得了恶性肿瘤。

6.3 决策边界(Decision Boundary)

决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。

在逻辑回归中,有假设函数

为了得出分类的结果,这里和前面一样,规定以 为阈值:

回忆一下逻辑函数的图像:

sigmoid function

观察可得当 时,有 ,即

同线性回归模型的不同点在于:

直观一点来个例子, 是下图模型的假设函数:

根据上面的讨论,要进行分类,那么只要 时,就预测 ,即预测为正向类。

如果取 ,则有 ,当 时,易绘制图中的品红色直线即决策边界,为正向类(以红叉标注的数据)给出 的分类预测结果。

 

上面讨论了逻辑回归模型中线性拟合的例子,下面则是一个多项式拟合的例子,和线性回归中的情况也是类似的。

为了拟合下图数据,建模多项式假设函数:

这里取 ,决策边界对应了一个在原点处的单位圆(),如此便可给出分类结果,如图中品红色曲线:

 

当然,通过一些更为复杂的多项式,还能拟合那些图像显得非常怪异的数据,使得决策边界形似碗状、爱心状等等。

 

简单来说,决策边界就是分类的分界线,分类现在实际就由 (中的 )决定啦。

6.4 损失函数(Cost Function)

上节又留下了个问题,我们怎么知道决策边界是啥样? 多少时能很好的拟合数据?当然,见招拆招,总要来个

如果直接套用线性回归的损失函数:

其中 ,可绘制关于 的图像,如下图

回忆线性回归中的损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中有许多局部最小点,这样梯度下降算法将无法确定收敛点是全局最优。

如果是一个凸函数,可以对其进行最优化分析,这类最优化问题,称为凸优化问题。还好,损失函数不止平方损失函数一种。

对于逻辑回归,更换平方损失函数为对数损失函数,可由统计学中的最大似然估计方法推出损失函数 :

则可绘制关于 的图像如下:

如左图,当训练集的结果为 (正样本)时,随着假设函数趋向于 ,损失函数的值会趋于 ,即意味着拟合程度很好。如果假设函数此时趋于 ,则会给出一个很高的损失,拟合程度,算法会根据其迅速纠正 值,右图 同理。

区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值。

6.5 简化的成本函数和梯度下降(Simplified Cost Function and Gradient Descent)

由于懒得分类讨论,对于二元分类问题,我们把损失函数简化为一个函数: +

,左边式子整体为 ,当 ,则 ,右边式子整体为0,也就和上面的分段函数一样了,而一个式子计算起来更方便。

向量化实现:

 

为了最优化 ,仍使用梯度下降法,算法同线性回归中一致:

解出偏导得:

注意,虽然形式上梯度下降算法同线性回归一样,但其中的假设函不同,即,不过求导后的结果也相同。

向量化实现:

 

对数损失函数求导的推导过程:

带入得

+

根据求偏导的性质,没有 的项都消去,则得:

所以有:

+ + + + + + +

则可得对数损失函数的导数:

6.6 进阶优化(Advanced Optimization)

运行梯度下降算法,其能最小化损失函数 并得出 的最优值,在使用梯度下降算法时,如果不需要观察损失函数的收敛情况,则直接计算 的导数项即可,而不需要计算 值。

我们编写代码给出损失函数及其偏导数然后传入梯度下降算法中,接下来算法则会为我们最小化损失函数给出参数的最优解。这类算法被称为最优化算法(Optimization Algorithms),梯度下降算法不是唯一的最小化算法1

一些最优化算法:

  • 梯度下降法(Gradient Descent)

  • 共轭梯度算法(Conjugate gradient)

  • 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods)

    • DFP算法
    • 局部优化法(BFGS)
    • 有限内存局部优化法(L-BFGS)
  • 拉格朗日乘数法(Lagrange multiplier)

比较梯度下降算法:一些最优化算法虽然会更为复杂,难以调试,自行实现又困难重重,开源库又效率也不一,哎,做个调包侠还得碰运气。不过这些算法通常效率更高,并无需选择学习速率 (少一个参数少一份痛苦啊!)。

Octave/Matlab 中对这类高级算法做了封装,易于调用。

 

假设有 ,要求参数 的最优值。

下面为 Octave/Matlab 求解最优化问题的代码实例:

  1. 创建一个函数以返回损失函数及其偏导数:
 
  1. costFunction 函数及所需参数传入最优化函数 fminunc,以求解最优化问题:
 

'GradObj', 'on': 启用梯度目标参数(则需要将梯度传入算法)

'MaxIter', 100: 最大迭代次数为 100 次

@xxx: Octave/Matlab 中的函数指针

optTheta: 最优化得到的参数向量

functionVal: 引用函数最后一次的返回值

exitFlag: 标记损失函数是否收敛

注:Octave/Matlab 中可以使用 help fminunc 命令随时查看函数的帮助文档。

  1. 返回结果
 

6.7 多类别分类: 一对多(Multiclass Classification: One-vs-all)

一直在讨论二元分类问题,这里谈谈多类别分类问题(比如天气预报)。(⊙﹏⊙)有点累,让我歇歇,丢张图去休息啦。。。

原理是,转化多类别分类问题为多个二元分类问题,这种方法被称为 One-vs-all。

正式定义:

: 输出 (属于第 个分类)的可能性

: 类别总数,如上图

注意多类别分类问题中 的结果不再只是一个实数而是一个向量,如果类别总数为 ,现在 就是一个 维向量。

对于某个样本实例,需计算所有的 种分类情况得到 ,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即

7 正则化(Regularization)

7.1 过拟合问题(The Problem of Overfitting)

对于拟合的表现,可以分为三类情况:

  • 欠拟合(Underfitting)

    无法很好的拟合训练集中的数据,预测值和实际值的误差很大,这类情况被称为欠拟合。拟合模型比较简单(特征选少了)时易出现这类情况。类似于,你上课不好好听,啥都不会,下课也差不多啥都不会。

  • 优良的拟合(Just right)

    不论是训练集数据还是不在训练集中的预测数据,都能给出较为正确的结果。类似于,学霸学神!

  • 过拟合(Overfitting)

    能很好甚至完美拟合训练集中的数据,即 ,但是对于不在训练集中的新数据,预测值和实际值的误差会很大,泛化能力弱,这类情况被称为过拟合。拟合模型过于复杂(特征选多了)时易出现这类情况。类似于,你上课跟着老师做题都会都听懂了,下课遇到新题就懵了不会拓展。

线性模型中的拟合情况(左图欠拟合,右图过拟合): +

逻辑分类模型中的拟合情况: +

 

为了度量拟合表现,引入:

  • 偏差(bias)

    指模型的预测值与真实值的偏离程度。偏差越大,预测值偏离真实值越厉害。偏差低意味着能较好地反应训练集中的数据情况。

  • 方差(Variance)

    指模型预测值的离散程度或者变化范围。方差越大,数据的分布越分散,函数波动越大,泛化能力越差。方差低意味着拟合曲线的稳定性高,波动小。

据此,我们有对同一数据的各类拟合情况如下图: +

据上图,高偏差意味着欠拟合,高方差意味着过拟合。

我们应尽量使得拟合模型处于低方差(较好地拟合数据)状态且同时处于低偏差(较好地预测新值)的状态。

避免过拟合的方法有:

  • 减少特征的数量

    • 手动选取需保留的特征
    • 使用模型选择算法来选取合适的特征(如 PCA 算法)
    • 减少特征的方式易丢失有用的特征信息
  • 正则化(Regularization)

    • 可保留所有参数(许多有用的特征都能轻微影响结果)
    • 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响参数
    • 当有很多参数对于模型只有轻微影响时,正则化方法的表现很好

7.2 代价函数(Cost Function)

 

7.3 Regularized Linear Regression

7.4 Regularized Logistic Regression

\ No newline at end of file diff --git a/week3.md b/week3.md index 8c85c03..831edbc 100644 --- a/week3.md +++ b/week3.md @@ -124,7 +124,7 @@ ${h_\theta}\left( x \right)=g\left( {\theta_0}+{\theta_1}{x_1}+{\theta_{2}}{x_{2 如果是一个凸函数,可以对其进行最优化分析,这类最优化问题,称为**凸优化问题**。还好,损失函数不止平方损失函数一种。 -对于逻辑回归,更换平方损失函数为**对数损失函数:** +对于逻辑回归,更换平方损失函数为**对数损失函数**,可由统计学中的最大似然估计方法推出损失函数 $J(\theta)$: $\begin{align*}& J(\theta) = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) \newline & \mathrm{Cost}(h_\theta(x),y) = -\log(h_\theta(x)) \; & \text{if y = 1} \newline & \mathrm{Cost}(h_\theta(x),y) = -\log(1-h_\theta(x)) \; & \text{if y = 0}\end{align*}$ @@ -293,10 +293,62 @@ exitFlag = 1 对于某个样本实例,需计算所有的 $k$ 种分类情况得到 $h_\theta(x)$,然后看分为哪个类别时预测输出的值最大,就说它输出属于哪个类别,即 $y = \mathop{\max}\limits_i\,h_\theta^{\left( i \right)}\left( x \right)$。 -# 7 Regularization -## 7.1 The Problem of Overfitting +# 7 正则化(Regularization) +## 7.1 过拟合问题(The Problem of Overfitting) + +对于拟合的表现,可以分为三类情况: +- **欠拟合(Underfitting)** + + 无法很好的拟合训练集中的数据,预测值和实际值的误差很大,这类情况被称为欠拟合。拟合模型比较简单(特征选少了)时易出现这类情况。类似于,你上课不好好听,啥都不会,下课也差不多啥都不会。 + +- **优良的拟合(Just right)** + + 不论是训练集数据还是不在训练集中的预测数据,都能给出较为正确的结果。类似于,学霸学神! + +- **过拟合(Overfitting)** + + 能很好甚至完美拟合训练集中的数据,即 $J(\theta) \to 0$,但是对于不在训练集中的**新数据**,预测值和实际值的误差会很大,**泛化能力弱**,这类情况被称为过拟合。拟合模型过于复杂(特征选多了)时易出现这类情况。类似于,你上课跟着老师做题都会都听懂了,下课遇到新题就懵了不会拓展。 + +线性模型中的拟合情况(左图欠拟合,右图过拟合): +![](image/20180112_091654.png) + + +逻辑分类模型中的拟合情况: +![](image/20180112_092027.png) + + + +为了度量拟合表现,引入: + +- 偏差(bias) + + 指模型的预测值与真实值的**偏离程度**。偏差越大,预测值偏离真实值越厉害。偏差低意味着能较好地反应训练集中的数据情况。 + +- 方差(Variance) + + 指模型预测值的**离散程度或者变化范围**。方差越大,数据的分布越分散,函数波动越大,泛化能力越差。方差低意味着拟合曲线的稳定性高,波动小。 + +据此,我们有对同一数据的各类拟合情况如下图: +![](image/20180112_085630.png) + +据上图,高偏差意味着欠拟合,高方差意味着过拟合。 + +我们应尽量使得拟合模型处于低方差(较好地拟合数据)状态且同时处于低偏差(较好地预测新值)的状态。 + +避免过拟合的方法有: + +- 减少特征的数量 + - 手动选取需保留的特征 + - 使用模型选择算法来选取合适的特征(如 PCA 算法) + - 减少特征的方式易丢失有用的特征信息 +- 正则化(Regularization) + - 可保留所有参数(许多有用的特征都能轻微影响结果) + - 减少/惩罚各参数大小(magnitude),以减轻各参数对模型的影响参数 + - 当有很多参数对于模型只有轻微影响时,正则化方法的表现很好 + +## 7.2 代价函数(Cost Function) + -## 7.2 Cost Function ## 7.3 Regularized Linear Regression