机器学习框架(1)

发布于:2025-06-29 ⋅ 阅读:(20) ⋅ 点赞:(0)

以吴恩达的《机器学习》课程为蓝本,整理课程框架,自己学习的简单记录。
课程讲解很清楚,建议有空可以看看原课程。

01 单变量线性回归

回归偏向于连续属性,分类偏向于离散属性。
监督学习是给定标签的学习;而无监督学习,未给定标签,以聚类算法为典型。

1.1 模型表达

对于单变量,一种可能的表达方式为:表达式1

1.2 代价函数

代价函数可简单理解为,表达的是模型所预测的值与训练集中实际值之间的差距(即,建模误差)。常用表达式为:
表达式2
也有其他代价函数,只是上述比较常用。
可画图,观察不同参数对代价函数的影响。

1.3 梯度下降

梯度下降是一个用来求函数最小值的算法。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum)。
选择不同的初始参数组合,可能会找到不同的局部最小值。
批量梯度下降(batch gradient descent)算法的公式为:
批量梯度下降其中α是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大。
α太小,移动可能很慢,需要很久才能达到局部/全局最低点。
α太大,移动步伐太大,可能会超过最低点,无法收敛。

注意参数需要同时更新(代码部分容易不同步):
同步更新

02 多变量线性回归

只是参数变多,其他处理和单变量类似。
求出最优解的方式,引入“正规方程”:
正规方程
比较

03 逻辑回归

3.1 逻辑函数

一个常用的逻辑函数为 S 形函数(Sigmoid function),公式为:
公式
函数图像为:
函数图像
假定:
在这里插入图片描述
ℎ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性。如:
解释说明

3.2 判定边界

已知,z=0, g(z)=0.5,则边界条件为z=0时的条件,且有:
在这里插入图片描述

3.3 代价函数

代价函数
函数有许多局部最小值,将会影响梯度下降算法寻找全局最小值。
对比

3.4 简化的成本函数和梯度下降

上面的表达式可以变化为:
代价函数
最小化代价函数的方法,是使用梯度下降法(gradient descent)。
需要反复更新每个参数,式子如下:
更新式子优化代价函数的不同方法,共轭梯度法 BFGS (变尺度法) 和 L-BFGS (限制变尺度法)

04 正则化

4.1 过拟合问题

过拟合问题
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。
对于第三个模型,可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。
出现过拟合问题,常从两个角度思考处理方法:
1)丢弃一些不能帮助我们正确预测的特征(如PCA)
2)正则化。(保留所有的特征,但是减少参数的大小)

4.2 代价函数

若在之前的回归问题中,我们的模型为:
过拟合的模型
我们可以清楚,是高次项导致了过拟合的产生,尝试思考在一定程度上让高次项的系数减小。
因此,我们尝试对代价函数进行修改,对高次项的系数设置一些“惩罚”。这样做的话,是尝试最小化代价时将这个“惩罚”也纳入考虑,并导致最终选择较小一些的高次项的系数。
修改后的代价函数为:
修改后的代价函数假如有非常多的特征,不知道其中哪些特征我们要惩罚,直接将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。
这样得到了一个较为简单的能防止过拟合问题的假设:
修正公式
其中,λ也被称为“正则化参数”。
根据惯例,我们不对 公式进行惩罚。
注意,正则化参数λ不可过大,过大则会把所有参数都最小化。

对于逻辑回归的正则化表达式为:
正则化表达式

05 神经网络

了解基本结构:输入层,隐含层,输出层。
将神经网络的分类定义为两种:二类分类和多类分类。
从前往后,算到最后一层输出的预测方式,称为正向传播方法。

5.1 代价函数

原来只有一个输出变量时的代价函数为:
代价函数
我们可以有多个输出变量。这里假设我们的输出维度为K,即K个输出变量,代价函数更新为:
代价函数2
这个更复杂一点的代价函数,与之前代价函数的区别是:
对于每一行特征,我们都会给出K个预测。利用循环,对每一行特征都可预测出K个不同结果,然后再利用循环在K个预测中选择可能性最高的一个,将其与y中实际数据进行比较。

5.2 反向传播算法

之前在计算神经网络预测结果时,我们采用的是正向传播方法,即从第一层正向到最后一层的计算。
但是,为了计算代价函数的偏导数,偏导数,我们需要采用的事一种反向传播算法。即,先计算最后一层的误差,再从后往前,求出一层又一层的误差。
以一个四层的神经网络为例:
向前传播
从最后一层的误差开始计算,误差是激活单元表达式之间的误差。
误差表达
由于第一层是输入变量,故不存在误差。
当有了所有误差的表达式后,便可以计算代价函数的偏导数:
计算其中,
l代表目前所计算的是第几层。
j代表目前计算层中的激活单元的下标,也将是下一层的第j个输入变量的下标。
i代表下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。
PS:反向传播会有点难以理解,先学会用,再说是否搞明白了原理。

5.3 梯度检验

对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误。即,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。
为了避免这样的问题,采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。这种方法,是通过估计梯度值来检验计算出的导数值是否真的是要求的。
对梯度的估计采用的方法,是在代价函数上沿着切线的方向,选择离两个非常近的点,然后计算两个点的平均值用以估计梯度。

5.4 模型的检验

通常将数据集分为训练集、交叉验证集、测试集。
例如,下面按照6:2:2 的比例分:
模型检验

5.5 诊断偏差和方差

当运行一个学习算法时,如果这个算法的表现不理想,常为两种情况:偏差比较大;方差比较大。对应的问题就是欠拟合和过拟合的问题。
例如:
示意图
通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:
示意图2
对于训练集,当d 较小时,模型拟合程度更低,误差较大;随着d的增长,拟合程度提高,误差减小。
对于交叉验证集,当d较小时,模型拟合程度低,误差较大;但是随着d的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。
则有:
示意图3
训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合

5.6 正则化和偏差/方差

在训练模型的过程中,常会使用一些正则化方法来防止过拟合。
但可能会正则化的程度太高或太小了,即在选择 λ 的值时,也需要注意λ的选择问题。
示意图4
我们选择一系列的想要测试的λ值,通常是 0-10 之间的呈现 2 倍关系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共 12 个)。
同样把数据分为训练集、交叉验证集和测试集。将训练集和交叉验证集模型的代价函数误差与 λ 的值绘制在一张图表上。

5.7 学习曲线

也可使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。
对于高偏差/欠拟合:作为例子,尝试用一条直线来适应下面的数据,可以看出,无论训练集有多么大误差都不会有太大改观:
欠拟合
即,在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。

对于高方差/过拟合:假设使用一个非常高次的多项式模型,并且正则化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。
高方差
即,在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。
解决思路:

  1. 获得更多的训练实例——解决高方差
  2. 尝试减少特征的数量——解决高方差
  3. 尝试获得更多的特征——解决高偏差
  4. 尝试增加多项式特征——解决高偏差
  5. 尝试减少正则化程度 λ——解决高偏差
  6. 尝试增加正则化程度 λ——解决高方差

5.8 其他概念

类偏斜情况表现为:训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。
例如,我们希望用算法来预测癌症是否是恶性的。在我们的训练集中,只有 0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有 0.5%。然而我们通过训练而得到的神经网络算法却有 1%的误差。这时,误差的大小是不能视为评判算法效果的依据的。
因此,我们将算法预测的结果分为四类:

  1. 正确肯定(True Positive,TP):预测为真,实际为真
  2. 正确否定(True Negative,TN):预测为假,实际为假
  3. 错误肯定(False Positive,FP):预测为真,实际为假
  4. 错误否定(False Negative,FN):预测为假,实际为真
    定义:
    查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
    查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
    对于刚才那个总是预测病人肿瘤为良性的算法,其查全率是 0。
    因此,查准率和查全率,可作为遇到偏斜类问题的评估度量值。再很多应用中,我们希望能够保证查准率和查全率的相对平衡。

网站公告

今日签到

点亮在社区的每一天
去签到