案例:
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。
二元分类问题:
将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量 y属于1 0,其中 0 表示负向类,1 表示正向类。
逻辑回归算法的性质是:它的输出值永远在 0 到 1 之间。但逻辑回归算法实际上是一种分类算法,它适用于标签 𝑦 取值离散的情况,如:1 0 0 1。
分类问题属于监督学习中的一个核心问题,其目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。根据类别的数量,分类问题可以分为二元分类和多元分类。例如,在邮件管理中,将一封邮件归类为“垃圾邮件”或者“非垃圾邮件”就是一个典型的二元分类问题;银行对信用卡客户进行信用等级分类和上市公司股票类型的划分则属于多元分类问题。
在分类问题的解决过程中,首先需要对数据进行预处理,包括数据清洗、相关分析和数据转换等步骤。数据清洗主要解决噪声和数据遗失的问题,相关分析用于去除无关属性和冗余属性,数据转换则根据分类方法的要求对数据进行相应转换。
分类算法有很多种,如决策树、贝叶斯、SVM、逻辑回归等。这些算法的性能指标包括预测准确度、计算复杂度和模型的简洁度等。在实际应用中,需要根据具体问题和数据特征选择合适的分类算法。
分类问题的应用非常广泛,包括银行领域的客户分类、非法入侵检测、图像领域的人脸检测、手写识别、搜索领域的网页抓取和排序等。通过分类问题,人们可以对大量数据进行有效处理和预测,从而更好地理解数据和做出决策。
问题:在分类问题中,能用什么样的函数来表示我们的假设?
需求:希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在 0 和 1 之间。
如果用概率大于等于0.5,预测值取1,概率小于0.5,预测值取0。这种方法有个弊端,当概率是0.5作为阈值时,这个时候是不太适用的。可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。
所以引入一个新的模型,逻辑回归,该模型的输出变量范围始终在 0 和 1 之间。 逻辑回归模型的假设是:
其中: 𝑋 代表特征向量 𝑔 代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(Sigmoid function),公式为:
?𝜃(𝑥)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性(estimated probablity)即?𝜃(𝑥) = 𝑃(𝑦 = 1|𝑥; 𝜃)。例如:?𝜃
(𝑥)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性(estimated probablity)即?𝜃(𝑥) = 𝑃(𝑦 = 1|𝑥; 𝜃)。
其实就是求函数的边界函数或者边界值。
在逻辑回归中,我们预测:
当?𝜃(𝑥) >= 0.5时,预测 𝑦 = 1。
当?𝜃(𝑥) < 0.5时,预测 𝑦 = 0 。
根据上面绘制出的 S 形函数图像,我们知道当
𝑧 = 0 时 𝑔(𝑧) = 0.5
𝑧 > 0 时 𝑔(𝑧) > 0.5
𝑧 < 0 时 𝑔(𝑧) < 0.5
并且参数𝜃 是向量[-3 1 1]。 则当?3 + 𝑥1 + 𝑥2 ≥ 0,即𝑥1 + 𝑥2 ≥ 3时,模型将预测 𝑦 =1。 我们可以绘制直线𝑥1 + 𝑥2 = 3,这条线便是我们模型的分界线,将预测为 1 的区域和预测为 0 的区域分隔开。
问题:如何选择拟合逻辑回归模型的参数𝜃。
具体来说,定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。
(选择合适的拟合参数𝜃)
对于线性回归模型,定义的代价函数是所有模型误差的平方和。理论上来说,也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将?𝜃(𝑥) 带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
可以看到代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
选择合适的代价函数:
这样构建的𝐶𝑜𝑠𝑡(?𝜃(𝑥), 𝑦)函数的特点是:当实际的 𝑦 = 1 且?𝜃(𝑥)也为 1 时误差为 0,当 𝑦 = 1 但?𝜃(𝑥)不为 1 时误差随着?𝜃(𝑥)变小而变大;当实际的 𝑦 = 0 且?𝜃(𝑥)也为 0 时,代价为 0,当𝑦 = 0 但?𝜃(𝑥)不为 0 时误差随着 ?𝜃(𝑥)的变大而变大。
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数。算法为:
定义了单训练样本的代价函数,凸性分析的内容是超出这门课的范
围的,但是可以证明我们所选的代价值函数会给我们一个凸优化问题。代价函数𝐽(𝜃)会是一个凸函数,并且没有局部最优值。
除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS) ,fminunc 是 matlab 和 octave中都带的一个最小值优化函数,使用时我们需要提供代价函数和每个参数的求导。
目的是找出一种稍微简单一点的方法来写代价函数,来替换我们现在用的方法。同时我们还要弄清楚如何运用梯度下降法,来拟合出逻辑回归的参数。
实际上还是去求J(𝜃)最小值。
要想获得J(𝜃)的最小值,实际上还是需要获得某个参数𝜃。所以,接下来就是弄清楚如何最大限度地最小化代价函数𝐽(𝜃),作为一个关于𝜃的函数,这样我们才能为训练集拟合出参数𝜃。
最小化代价函数的方法,是使用梯度下降法(gradient descent)。这是我们的代价函数:
如果我们要最小化这个关于𝜃的函数值,这就是我们通常用的梯度下降法的模板。
我把它写在这里,将后面这个式子,在 𝑖 = 1 到 𝑚 上求和,其实就是预测误差乘以
我们就可以将梯度下降算法写作如下形式:
补充内容:
因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。
之前在谈线性回归时讲到的特征缩放,我们看到了特征缩放是如何
提高梯度下降的收敛速度的,这个特征缩放的方法,也适用于逻辑回归。如果你的特征范围差距很大的话,那么应用特征缩放的方法,同样也可以让逻辑回归中,梯度下降收敛更快。
问题:什么优化方法使通过梯度下降,进行逻辑回归的速度大大提高?
有个代价函数𝐽(𝜃),而我们想要使其最小化,那么我们需要做的是编写代码,当输入参数 𝜃 时,它们会计算出两样东西:𝐽(𝜃) 以及𝐽 等于 0、1 直到 𝑛 时的偏导数项。
那么这些算法就是为我们优化代价函数的不同方法,共轭梯度法 BFGS (变尺度法) 和 L-BFGS (限制变尺度法) 就是其中一些更高级的优化算法,它们需要有一种方法来计算 𝐽(𝜃),以及需要一种方法计算导数项,然后使用比梯度下降更复杂的算法来最小化代价函数。
问题:如何使用逻辑回归 (logistic regression)来解决多类别分类问
题?
具体来说,通过一个叫做"一对多" (one-vs-all) 的分类算法。
案例:
第一个例子:假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用𝑦 = 1、𝑦 = 2、𝑦 = 3、𝑦 = 4 来代表。
第二个例子是有关药物诊断的,如果一个病人因为鼻塞来到你的诊所,他可能并没有生病,用 𝑦 = 1 这个类别来代表;或者患了感冒,用 𝑦 = 2 来代表;或者得了流感用𝑦 = 3来代表。
第三个例子:如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天是晴天、多云、雨天、或者下雪天,对上述所有的例子,𝑦 可以取一个很小的数值,一个相对"谨慎"的数值,比如 1 到 3、1 到 4 或者其它数值,以上说的都是多类分类问题,顺便一提的是,对于下标是 0 1 2 3,还是 1 2 3 4 都不重要,我更喜欢将分类从 1 开始标而不是0,其实怎样标注都不会影响最后的结果。
多分类问题图示:
3 种不同的符号来代表 3 个类别,问题就是给出 3 个类型的数据集,我们如何得到一个学习算法来进行分类呢?
二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。
然后训练逻辑回归分类器:
一对多多类别分类解决方法:
选择一个分类器可信度最高效果最好,那么就可认为得到一个正确的分类,无论𝑖值是多少,我们都有最高的概率值,我们预测𝑦就是那个值。
正则化(regularization)的技术,它可以改善或者减少过度拟合问题。
如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集(代价函数可能几乎为 0),但是可能会不能推广到新的数据。
回归模型的例子:
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。
分类问题中也存在这样的问题:
就以多项式理解,𝑥 的次数越高,拟合的越好,但相应的预测的能力就可能变差。
这些都是过拟合问题。
怎么解决过拟合问题?
1.丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如 PCA)
2.正则化。 保留所有的特征,但是减少参数的大小(magnitude)。
过拟合是指模型在训练数据上表现良好,但在测试数据上表现较差的情况。这通常是由于模型过于复杂,并且对训练数据进行了过多的拟合,导致模型泛化能力下降。过拟合问题主要表现在以下几个方面:
训练误差和测试误差的差距过大:过拟合的模型在训练数据上的误差通常很小,但在测试数据上的误差很大。这意味着模型没有很好地泛化到新的数据集上。
模型复杂度过高:过拟合往往是由于模型复杂度过高导致的。如果模型过于复杂,它可能会尝试拟合训练数据中的噪声和异常值,而不是真正的学习数据的内在规律和模式。这会导致模型在新的、未见过的数据上表现不佳。
数据量不足:当训练数据量不足时,模型可能会将训练数据中的噪声和异常值视为重要特征,并进行过度拟合。因此,过拟合问题可以通过增加训练数据量来解决。
特征选择不当:如果选择的特征与目标变量无关或相关性较弱,那么模型可能无法从中学习到有用的信息,导致过拟合问题。因此,需要进行特征选择和特征工程,以选择与目标变量高度相关的特征,并消除无关特征的影响。
为了解决过拟合问题,可以采用以下方法:
增加训练数据量:通过增加训练数据量,可以使得模型更好地泛化到新的数据集上,减少过拟合问题。
减少模型复杂度:可以通过简化模型、减少特征数量等方法降低模型复杂度,从而避免过拟合问题。
正则化:正则化是一种常用的方法,用于防止过拟合。它通过对模型的参数施加惩罚项,从而使得模型更加简单,避免了过拟合问题。常用的正则化方法包括L1正则化、L2正则化和dropout等。
早停法:早停法是一种防止过拟合的技术,通过监视验证集的误差来停止迭代。当验证集的误差开始增加时,意味着模型开始过拟合,此时停止迭代可以避免过拟合问题。
集成学习:集成学习是一种通过结合多个模型的预测结果来提高整体性能的技术。通过将多个简单的模型组合起来,可以降低单一模型的过拟合风险。常用的集成学习方法包括随机森林、梯度提升等。
高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于 0 的话,我们就能很好的拟合了。所以我们要做的就是在一定程度上减小这些参数𝜃 的值,这就是正则化的基本方法。我们决定要减少𝜃3和𝜃4的大小,我们要做的便是修改代价函数,在其中𝜃3和𝜃4 设置一点惩罚。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的𝜃3和𝜃4。
若 λ 的值太大了,那么𝜃(不包括𝜃0)都会趋近于 0,这样我们所得到的只能是一条平行于𝑥轴的直线。选择合适的𝜆 的值,这样才能更好的应用正则化。
线性回归的求解,我们之前推导了两种学习算法:一种基于梯度下降,一种基于正规方程。
正则化线性回归的代价函数为:
已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数𝐽(𝜃),接下来学习了更高级的优化算法,这些高级优化算法需要你自己设计代价函数𝐽(𝜃)。
注意:
正则化的逻辑回归模型是在逻辑回归的基础上,通过添加正则化项来防止过拟合的一种机器学习模型。正则化项通常包括L1正则化和L2正则化,它们通过对模型参数施加惩罚,以减少模型复杂度并提高模型的泛化能力。
在正则化的逻辑回归模型中,代价函数通常包括两部分:一个是逻辑回归的代价函数,另一个是正则化项。逻辑回归的代价函数是用于衡量模型的预测误差的,而正则化项是用来控制模型的复杂度的。正则化项的系数决定了模型复杂度的惩罚程度,这个系数通常被称为正则化参数。
在训练正则化的逻辑回归模型时,我们需要最小化代价函数。这个过程通常需要迭代地更新模型参数,以逐渐减小代价函数的值。常用的优化算法包括梯度下降、随机梯度下降等。
正则化的逻辑回归模型在许多领域都有广泛的应用,例如文本分类、二分类问题、回归分析等。它能够很好地处理各种数据类型和问题规模,并且具有简单、快速、稳定等优点。然而,正则化的逻辑回归模型也有一些局限性,例如对非线性关系的处理能力较弱等。因此,在实际应用中,需要根据具体问题和数据特征选择合适的机器学习模型。