【MindSpore(跟着小Mi一起机器学习吧!】逻辑回归(一))

小Mi学习,向上积极!在前面几周的学习中,小Mi终于带着大家完完整整学完了线性回归,同时小Mi也收到了大家的很多反馈,在后续的学习中,小Mi会一一改进的!今天我们就开启新的章节学习—logistic回归(Logistic Regression) 算法吧(冲鸭)!
1 分类问题
在logistic回归算法中,我们通常遇到的是所需预测的变量y是一个离散值这种情况下的分类问题,在介绍篇中,小Mi就已经带着大家稍微了解了哪些问题是分类问题,比如垃圾邮件分类问题,还有就是对肿瘤进行分类的例子,确定其是恶性癌症还是良性肿瘤。在所有的这些问题中,我们尝试预测的变量y,都只有两个取值的变量,0或1,垃圾邮件或者非垃圾邮件,恶性或良性。我们将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量 ,其中0表示负向类,1 表示正向类。两个类别中,例如垃圾邮件或非垃圾邮件,到底哪个是正类/1,哪个是负类/0,这都是任意的,并没有什么区别。但通常来说,我们默认负类表示没有某样东西,例如没有恶性肿瘤,而1即正类,表示具有我们要寻找的东西。当然啦,这都不重要,重要的是如何解决分类问题,对不对!当然还会有多分类问题,例如变量y可以选取0,1,2,3这几个值,这就是多分类问题,现在我们就先从二分类问题开始了解吧!
说到这小Mi不由得灵机一动,话说之前学习的线性回归是否适用于分类问题呢?废话不多说,我们一起来验证一下!假设下图中的数据集,是对肿瘤进行恶性或良性分类,得到的数据只有两个值,0/否或者1/是,根据线性回归算法用直线对数据进行拟合。最终得到的假设为:,而分类器输出的阈值设为0.5,即纵坐标值如果大于等于0.5,预测y为1;如果小于0.5,预测y等于为0。
在这个例子中,似乎线性回归拟合的效果还不错,但是,尝试增加些难度,假如我们还有另一个训练样本,位于右边最远边,如果依旧运行线性回归,我们会得到另一条蓝色的直线。
如果还跟之前一样将阈值设为0.5,这时候就能明显看出来是一个相当差劲的线性回归了。毫无疑问,学习算法会将这个样本判定为恶性,但加了这个样本后,使得线性回归对数据的拟合直线从红色变成蓝色这条直线,变成了一个更坏的假设。因此,把线性回归应用于分类问题,通常并不是一个好主意。在这个例子中,在额外加这个样本之前,之前的线性回归运气很好,我们得到了一个假设,效果不错。但通常对数据集进行线性回归,只是偶尔效果会很好,所以并不推荐将线性回归用于分类问题。
总的来说,如果我们要用线性回归算法来解决一个分类问题,首先分类问题中,取值只有 0 或者1,但如果假设函数的输出值远大于 1,或者远小于0,就无法解决这种情况了。所以我们的逻辑回归算法就闪亮登场啦!这个算法的性质是:它的输出值永远在0到 1 之间,即。
BTW,我们把logistic回归视为一种分类算法,因为名字中有“回归”,有些时候可能会让你产生误解,但logistic回归实际上是一种分类算法,用在标签y为离散值0或1的情况下,适用于标签取值离散的情况,如:1 0 0 1。
2 假说表示
那么在logistic回归中,我们要使用哪个方程来表示我们的假设呢?此前,我们提到希望我们分类器的输出值在0和1之间,另外,当我们使用线性回归的时候,假设形式为,现在我们可以稍作修改,假设,sigmoid/logistic函数,z是一个实数,将这两个函数结合起来,得出的结果为:,的图像如下图所示,介于0~1之间。现在需要做的就是用参数来拟合我们的数据。因此,拿到一个数据集,我们需要给参数选定一个值,假设函数会帮助我们做出预测。
python代码实现:
【【MindSpore(跟着小Mi一起机器学习吧!】逻辑回归(一))】import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
在这里,假设函数的输出,假若输出某个数字,可以把这个数字当作对一个输入,y=1的概率估计。
举例:
我们使用肿瘤分类的例子,可能有一个特征向量,同样,,然后我们的一个特征是肿瘤的大小,假设有一个病人,他的肿瘤大小确定,把他的特征向量带入我们的假设中,并且假设输出为0.7,说明对于一个特征为的患者,y=1的概率是0.7,也就是说,该病人有70%的可能性是恶性肿瘤,可以更加正式地写成数学表达式,假设函数的输出等于(知识点:表示在给定x的条件下y=1的概率,即病人的特征为x的情况下,病人的特征也就是代表肿瘤的大小,这个概率的参数是),所以基本上依赖假设函数来估计y=1的概率是多少,因为这是一个分类任务,y必须是0或1,无论是在训练集中还是未来可能走进医生办公室的新患者,同时也可以计算y=0的概率,另外,还有个表达式需要了解一下:(可以参照来理解),给定参数,对具有特征x的病人,y=0的概率与同样给定参数,对具有特征x的病人,y=1的概率相加和为1。
本节介绍的是logistic回归中假设函数的表示方法,下面将更直观地认识假设函数是什么样子的,会涉及到决定边界这个概念,也会有一些可视化的展现帮助大家更好地理解。
3 判定边界
现在讲下决策边界(decision boundary)的概念。这个概念能更好地帮助我们理解逻辑回归的假设函数在计算什么。
Logistic回归的表达式可以写成:,(sigmoid函数),g(z)图像如下图所示,从零开始慢慢增加至1,并逐渐逼近1。现在可以进一步理解,这个假设函数何时会将y预测为1,什么时候又将y预测为0,并且可以更好地理解这个假设函数的形状,特别是当我们的数据有多个特征的时候。
那么什么时候将大于或等于0.5呢?我们最终预测y=1,看sigmoid函数的曲线图,只要z大于或等于0,g(z)就大于等于0.5,由于logistic回归的假设函数,只要大于等于0,就大于或等于0.5,所以这里取代了z的位置,所以,我们的假设函数将会预测y=1,只要大于或等于0。假设函数预测y=0的情况,类似地,将会小于0.5,只要g(z)小于0.5,这是因为z的取值,使得g(z)小于0.5的部分,是z小于0的部分,当g(z)小于0.5时,我们的假设函数将会预测y=0,根据与之前类似的原因,,因此,只要小于0,我们就能预测y等于0。总体来说,如果我们决定要预测y=1或y=0,取决于估值概率是大于等于0.5还是小于0.5,换句话说,我们将预测y=1的话,只需要大于或等于0,另外,我们将预测y=0,只需要小于0。通过这些,我们能更好地理解logistic回归的假设函数是如何做出预测的。
现在,我们假设有一个训练集,假定假设函数是(如何模拟此模型中的参数后续将会讨论,目前假设我们已经拟合好了参数),目前我们选择为3,和均为1,这意味着我的参数向量,这样我们就有了这样的一个参数选择,然后开始试着找出假设函数何时将预测y=1/0,使用公式,我们会发现y更有可能是1,或者说y=1的概率大于等于0.5,只要满足大于0,即大于0。转换一下,对于任何样本和,只需要满足即可。而在图片中也可以直接显示出来,画出这条直线,直线的右半部分将预测y=1,左半部分将预测y=0。因此,这条直线就被成为决策边界,在该实例中就是这条直线对应的一系列的点,也恰好对应正好等于0.5的区域,将整个平面分成了两部分。决策边界是假设函数的一个属性,包括参数、和,决定于其参数。事后,我们将讨论如何拟合参数,将使用训练集结合我们的数据来确定参数的取值,但是,一旦我们有确定的参数取值,如参数、和,我们就可以完全确定决策边界。我们实际上并不需要通过绘制训练集来确定决策边界。
现在我们看一个更加复杂的例子,和往常一样,使用x表示我们的正样本,圆圈表示我们的负样本,给定一个这样的数据集,呈现这样的分布情况,怎样才能使用logistic回归来拟合这些数据呢?
之前我们提到过多项式回归或线性回归时,谈到可以在特征中添加额外的高阶多项式项,我们也可以对logistic回归使用相同的方法,具体地说,假设函数为:,添加了两个额外的特征和,所以我们现在有五个参数(如何选择,,...,的取值),假使我们已经确定,为-1,和均为0,和取值为1,这意味着在这个参数的选择下,得到的参数向量是。也就是说,预测y=1时,只需要即可,更为简单地说也就是只要就行。从而可以知道决策边界是,这是以原点为中心半径为1的圆,只要在圆外面,都将预测y=1,而在圆内的话,都将预测y=0。通过在特征中增加这些复杂的多项式,还可以得到更为复杂的决策边界,并不全是以直线划分正负样本。再次强调,决策边界并不是训练集的属性,而是假设本身及其参数的属性,只要给定了参数向量,决定边界就确定了,并不是用训练集来确定决策边界,而是用训练集来拟合参数。
还有比这更为复杂的决策边界吗?,比如我们有更高阶的多项式:,这种就可以得到更为复杂的决策边界,而logistic回归可以用于寻找决策边界,例如这样一个椭圆,参数不同,也许会得到另一个不同的决策边界,还有一些其他有趣的形状。因此,这些高阶多项式特征可以让我们得到非常复杂的决策边界。从而可以让我们更加清晰地认识到,什么样的假设函数,我们可以使用logistic回归来表示。
现在我们知道了,接下来将学习如何自动选择参数,使我们能在给定一个训练集时,根据数据自动拟合参数。
好啦,今天小Mi带领大家全新认识了逻辑回归的基本函数表示,下期我们还将进一步学习其代价函数、梯度下降法以及多类别的分类问题。我们,下期再见呦~

    推荐阅读