1.优化目标
一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector
Machine)。与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。
如果有一个 𝑦 = 1的样本,我的意思是不管是在
训练集中或是在测试集中,又或者在交叉验证集中,总之是 𝑦 = 1,现在我们希望ℎ𝜃(𝑥) 趋近 1。因为我们想要正确地将此样本分类,这就意味着当 ℎ𝜃
(𝑥)趋近于 1 时,𝜃𝑇𝑥 应当远大于 0,这里的>>意思是远远大于 0。这是因为由于 𝑧 表示 𝜃𝑇𝑥,当 𝑧远大于 0 时,即到了该图的右边,你不难发现此时逻辑回归的输出将趋近于 1。相反地,如果我们有另一个样本,即𝑦 = 0。我们希望假设函数的输出值将趋近于 0,这对应于𝜃𝑇𝑥,或者就是 𝑧 会远小于 0,因为对应的假设函数的输出值趋近 0。
考虑两种情况:
一种是𝑦等于 1 的情况;另一种是 𝑦 等于 0 的情况。
在第一种情况中,假设 𝑦 = 1 ,此时在目标函数中只需有第一项起作用,因为𝑦 = 1时,(1 − 𝑦)项将等于 0。因此,当在 𝑦 = 1 的样本中时,即在 (𝑥, 𝑦)中 ,我们得到 𝑦 = 1
用 𝑧 表示𝜃𝑇𝑥,即: 𝑧 = 𝜃𝑇𝑥。当𝑧 增大时,也就是相
当于𝜃𝑇𝑥增大时,𝑧 对应的值会变的非常小。对整个代价函数而言,影响也非常小。这也就解释了,为什么逻辑回归在观察到正样本𝑦 = 1时,试图将𝜃
𝑇𝑥设置得非常大。因为,在代价函数中的这一项会变的非常小。
现在开始建立支持向量机,我们从这里开始:
另外一种情况是当𝑦 = 0时,此时如果你仔细观察代价函数只留下了第二项,因为第一项被消除了。如果当𝑦 = 0时,那么这一项也就是 0 了。
支持向量机是一种监督学习算法,用于二分类和多分类问题。其目标是找到一个最优的超平面(或者说决策边界),将不同类别的样本分开,并最大化样本与超平面之间的间隔。
具体而言,支持向量机的优化目标是最小化模型的结构风险,也就是最小化模型的经验风险和结构风险之和。其中,经验风险是指模型在训练集上的分类误差,而结构风险则是为了防止过拟合而引入的正则化项。
支持向量机的经验风险由两部分组成:边界误差和惩罚项。边界误差是指样本被错误分类的程度,而惩罚项是为了避免模型过于复杂而引入的惩罚因子。支持向量机通过最小化经验风险来寻找最优的超平面。
在最小化经验风险的同时,支持向量机还引入了结构风险,通过正则化项来控制模型的复杂度。正则化项的选择可以是L1正则化(Lasso)或L2正则化(Ridge),用于约束模型的参数。
通过最小化经验风险和结构风险的组合,支持向量机能够找到一个最优的超平面,使得样本分类误差最小化,并且具有较好的泛化能力。
总结来说,吴恩达介绍的支持向量机的优化目标是最小化模型的经验风险和结构风险之和,通过最大化间隔来实现样本的有效分类,并控制模型的复杂度以避免过拟合。
2.大边界的直观理解
如果你有一个正样本,𝑦 = 1,则只有在𝑧 >= 1时,代价函数cos𝑡1(𝑧)才等于 0。换句话说,如果你有一个正样本,我们会希望𝜃𝑇𝑥>=1,反之,如果𝑦 = 0,我们观察一下,函数cos𝑡0(𝑧),它只有在𝑧 <= −1的区间里函数值为 0。这是支持向量机的一个有趣性质。事实上,如果你有一个正样本𝑦 = 1,则其实我们仅仅要求𝜃𝑇𝑥大于等于 0,就能将该样本恰当分出,这是因为如果𝜃𝑇𝑥>0 大的话,我们的模型代价函数值为 0,类似地,如果你有一个负样本,则仅需要𝜃𝑇𝑥<=0 就会将负例正确分离,但是,支持向量机的要求更高,不仅要能正确分开输入的样本,即不仅仅要求𝜃𝑇𝑥>0,我们需要的是比 0 值大很多,比如大于等于 1,我也想这个比 0 小很多,比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子。
如果 𝐶非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为 0 的最优解。遵从以下的约束:𝜃𝑇𝑥(𝑖) >= 1,如果 𝑦(𝑖)是等于 1 的,𝜃𝑇𝑥(𝑖) <= −1。
存在一条直线把正负样本分开。当然有多条不同的直线,
可以把正样本和负样本完全分开。
黑色这条线在分离正样本和负样本上它显得的更好,这条黑线有更大的距离,这个距离叫做间距(margin)。
当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距
离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器,
回顾 𝐶 = 1/𝜆,因此:
𝐶 较大时,相当于 𝜆 较小,可能会导致过拟合,高方差。
𝐶 较小时,相当于 𝜆 较大,可能会导致低拟合,高偏差。
在吴恩达的机器学习课程中,他也提到了大边界(large margin)的直观理解,并将其作为支持向量机(Support Vector Machine,SVM)算法的核心概念之一。
吴恩达通过一个简单的二维数据集的例子来解释大边界的直观理解。假设我们有一个二分类问题,其中包含两类不同的数据点。吴恩达指出,支持向量机的目标是找到一个决策边界,使得这个边界在两类数据点之间有尽可能大的间隔。
直观地理解,大边界可以类比为一个街道,而支持向量机的目标是要找到一个决策边界,使得两类数据点在这条街道的两侧。这样的决策边界能够为新的未见过的数据点提供一个相对宽阔的间隔,使得其能够被正确分类。
吴恩达解释说,大边界的直观理解有助于提高模型的泛化能力。当我们遇到新的未见过的数据时,这个大边界可以提供更多的空间,使得模型在分类时更有自信,并减少错误分类的可能性。此外,大边界还能够提高模型对于数据噪声和异常点的鲁棒性,因为它们很可能在这个宽阔的间隔之外。
通过最大化间隔来实现大边界的直观理解是支持向量机算法的关键。支持向量机通过选择最优的支持向量(位于间隔边界上的样本点),来定义决策边界的位置和间隔的宽度。最终,支持向量机的目标是找到一个最优的超平面,使得间隔最大化。
总结来说,吴恩达在他的机器学习课程中强调了大边界的直观理解,并解释了其在支持向量机算法中的重要性。大边界可以提高模型的泛化能力和鲁棒性,使得模型能够更好地应对新的未见过的数据,并减少错误分类的风险。
3. 核函数
支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机。
下面是支持向量机的两个参数𝐶和𝜎的影响:
𝐶 = 1/𝜆
𝐶 较大时,相当于𝜆较小,可能会导致过拟合,高方差;
𝐶 较小时,相当于𝜆较大,可能会导致低拟合,高偏差;
𝜎较大时,可能会导致低方差,高偏差;
𝜎较小时,可能会导致低偏差,高方差。
在吴恩达的机器学习课程中,核函数(kernel function)是支持向量机(Support Vector Machine,SVM)算法中的一个重要概念。
核函数的作用是将输入的数据映射到更高维度的特征空间,以便在该特征空间中更容易找到线性可分的决策边界。通过引入核函数,支持向量机可以在高维特征空间中进行非线性的分类。
吴恩达在课程中介绍了两种常用的核函数:线性核函数和高斯核函数(也称为径向基函数)。
线性核函数:线性核函数是最简单的核函数,它直接计算输入数据的内积。在特征空间中,线性核函数对应着一个线性的决策边界。当数据在原始特征空间中是线性可分的时候,线性核函数可以得到很好的分类结果。
高斯核函数:高斯核函数是一种常用的非线性核函数。它通过计算输入数据与参考点之间的距离的指数函数来进行映射。高斯核函数对应着一个非线性的决策边界,可以处理非线性可分的数据。高斯核函数的参数决定了不同数据点之间的相似度,从而影响了决策边界的形状。
除了线性核函数和高斯核函数,还有其他的核函数可供选择,如多项式核函数、sigmoid核函数等。不同的核函数适用于不同的数据集和问题类型,需要根据具体情况进行选择。
通过使用核函数,支持向量机可以将低维的非线性问题转化为高维的线性问题,从而能够更好地处理复杂的分类任务。
总结来说,吴恩达的机器学习课程介绍了核函数的概念,并重点介绍了线性核函数和高斯核函数。核函数的作用是将数据映射到更高维度的特征空间,以便在该空间中寻找线性可分的决策边界。核函数是支持向量机算法中非常重要的一部分,可以处理非线性可分的数据。
4.使用支持向量机
在高斯核函数之外我们还有其他一些选择,如:
多项式核函数(Polynomial Kernel)
字符串核函数(String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数(histogram intersection kernel)
这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要
满足 Mercer’s 定理,才能被支持向量机的优化软件正确处理。
多类分类问题
假设我们利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有𝑘个类,则我们需要𝑘个模型,以及𝑘个参数向量𝜃。我们同样也可以训练𝑘个支持向量机来解决多类分类问题。但是大多数支持向量机软件包都有内置的多类分类能,我们只要直接使用即可。
尽管你不去写你自己的 SVM 的优化软件,但是你也需要做几件事:
1、是提出参数𝐶的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。
2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的 SVM(支持向量机),这就意味这他使用了不带有核函数的 SVM(支持向量机)。
从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?
下面是一些普遍使用的准则:
𝑛为特征数,𝑚为训练样本数。
(1)如果相较于𝑚而言,𝑛要大许多,即训练集数据量不够支持我们训练一个复杂的非线
性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2)如果𝑛较小,而且𝑚大小中等,例如𝑛在 1-1000 之间,而𝑚在 10-10000 之间,使用高
斯核函数的支持向量机。
(3)如果𝑛较小,而𝑚较大,例如𝑛在 1-1000 之间,而𝑚大于 50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。
今天的 SVM 包会工作得很好,但是它们仍然会有一些慢。当你有非常非常大的训练集,且用高斯核函数是在这种情况下,我经常会做的是尝试手动地创建,拥有更多的特征变量,然后用逻辑回归或者不带核函数的支持向量机。如果你看到这个幻灯片,看到了逻辑回归,或者不带核函数的支持向量机。在这个两个地方,我把它们放在一起是有原因的。原因是:
逻辑回归和不带核函数的支持向量机它们都是非常相似的算法,不管是逻辑回归还是不带核函数的 SVM,通常都会做相似的事情,并给出相似的结果。但是根据你实现的情况,其中一个可能会比另一个更加有效。但是在其中一个算法应用的地方,逻辑回归或不带核函数的SVM 另一个也很有可能很有效。但是随着 SVM 的复杂度增加,当你使用不同的内核函数来学习复杂的非线性函数时,这个体系,你知道的,当你有多达 1 万(10,000)的样本时,也可能是 5 万(50,000),你的特征变量的数量这是相当大的。那是一个非常常见的体系,也许在这个体系里,不带核函数的支持向量机就会表现得相当突出。你可以做比这困难得多需要逻辑回归的事情。