课程目录 小象学院 - 人工智能
关注公众号【Python家庭】领取1024G整套教材、交流群学习、商务合作。整理分享了数套四位数培训机构的教材,现免费分享交流学习,并提供解答、交流群。
你要的白嫖教程,这里可能都有喔~
恭喜你闯进了第10关,让我们继续探索机器学习的奥秘,体验算法的魔力Amazing~
本关内容概述
本关我们要学习一个性价比最高的机器学习算法,它就是宇宙人都知道的逻辑回归算法(Logistic Regression),简称LR。
为什么要说它是性价比最高的机器学习算法呢?
有几下几点原因:
-
面试算法工程师必考题,学会了LR就已经可以去和面试官一决高下了!
-
可解释性强,给老板解释的时候,一说他就明白,有一种不对着牛弹琴的错觉^_^
-
训练速度快,如丝般顺滑~
逻辑回归原理
听我说了这么多逻辑的诸多优点,是不是已经忍不住想赶紧探究下逻辑回归的设计原理了?Are you ready ? Go !
逻辑回归虽然名字里带”回归“两个字,但是逻辑回归算法它解决的是分类问题,而不是回归问题。
What? 纳尼?你说神么?没搞错吧?
Of course ! 嗨!对的!你没听错。
逻辑回归怎么解决分类问题呢?
逻辑回归的原理是将样本的特征和样本发生的概率联系起来,根据概率值划定一个分类边界,高于边界值的概率是一个分类,低于边界值的概率是另外一个分类。
机器学习算法的本质是:求出一个函数 f(x),一个样本 x 经过函数 f 运算得到一个预测值 y,即:。
在逻辑回归中同样是要找到一个函数f(x),只是f(x)输出的结果是一个概率值,即: 表示概率预测值。
然后根据概率值P对样本进行分类:概率大于等于0.5,分到类别是 1 的那一类;概率小于0.5,分到类别是 0 的那一类。
逻辑回归作为分类算法使用时,只能解决二分类问题,所以逻辑回归预测出来的分类结果只有类别1和类别2两种类别。
基于逻辑回归只能解决二分类问题的特点,那么它就在一些场景下非常适用,例如:广告点击率预估,预测一个用户会不会点击广告,如果预测这个用户会点击广告,那么就把这条广告展示给他,这个预测结果只有两种情况点击和不点击,可以把点击和不点击看作是两种分类。
那么逻辑回归通过什么方式得到一个事件发生的概率值?
这个问题问的非常好!这个事情还要从线性回归开始说起。
我们知道线性回归的一般形式是 y = ax + b,y的取值范围是负无穷到正无穷 [-∞, +∞],也就是通过线性回归计算得到的 y 可以是任意值。
一个事件发生的概率值在 [0,1]值域范围内,概率值不可能小于0,也不可能大于1。
但是使用线性回归无法预测出一个事件的概率值,伟大的数学家早就已经解决了这个问题,数学家是怎么用线性回归公式计算出一个概率值呢?
Sigmoid函数
数学家想到了一个函数,它就是Sigmoid函数 ,以t为横坐标,以S(t)为纵坐标。
t 的取值范围是负无穷到正无穷 [-∞, +∞] ,sigmoid函数值域是 [0,1]。
当 t > 0 时,S(t) > 0.5,t越大S(t)的值越大,当t趋近于无穷大时,S(t)接近于1。
当 t < 0 时,S(t) < 0.5,t越小S(t)的值越小,当t趋近于无穷小时,S(t)接近于0。
也就是说函数中的t无论取什么值,S(t)的值都在[0,1]的区间内。
你是不是已经发现了逻辑回归为什么要引入Sigmoid函数,Sigmoid函数的值以0.5为分界点,最大值是1,最小值是0。
我们再多想一步,概率的值在0到1之间,Sigmoid函数S(t)的值也在0到1之间。如果使用Sigmoid函数来表示一个事件发生的概率呢?Sigmoid函数S(t)中的t表示一个事件,S(t)的值就可以表示成事件t发生的概率。
我们可以通过一个事件发生的概率,来预测它是发生还是不发生。事件发生用1表示,事件不发生用0表示,可以把事件的发生和不发生看成是两个类别,概率值大于0.5是类别1,概率小于0.5是类别0。这正是我们想要的解决二分类问题的方法,所以逻辑回归引入了Sigmoid函数来解决二分类问题。
又来了一个新问题,我们应该怎么把样本特征和Sigmoid函数结合起来呢?
逻辑回归的模型表达
我们回忆之前学过的算法里,线性回归的值域是 [-∞, +∞],与Sigmoid函数中参数t的值域相同,并且线性回归可以很好的表达样本特征与目标变量(类别)之间的关系,那么我们就把线性回归函数f(x)带入Sigmoid函数S(t),替换掉公式中的t,得到公式:
。
我们之前学习的简单线性回归表达式:f(x) = ax + b,那我们把这个公式中的系数a用替换,把截距b用
替换,得到表达式新的表示方法:
这里只是变换一下公式中的字母表示,不影响公式的意义。
我们再进一步对表达式 进行变换,我们知道简单线性回归处理的样本只有一个特征,那我们可以统一下特征的表示方法。
公式中的小写字母 x 表示样本的一个特征,那我们可以给x加个数字下标,用 来表示样本的第1个特征。
公式中的可以转换成
乘以 1的形式:
,这种表达方式对原公式没有任何影响,因为任何数乘以1都是它本身。我们可以把数字1看成是样本的第0个特征
,它是个固定值,这样做的目的是为了让
也能够与样本特征产生联系。
那么表达是f(x)又可以更新一种表达方式了,即: ,
恒等于1。
这里再扩展一个知识点,针对数据集中的样本只有一个特征的简单线性回归预测函数 ,注意:
是恒等于1的。
之所以叫简单线性回归,就是因为使用的样本只有一个特征。
实际上,我们使用的样本可能会有多个特征,对于数据集中的样本具有个多个特征的线性回归预测函数的表达方式:,用向量化的方式表达:
,公式里的
和X都是向量。
我们刚才费半天劲为什么要用向量形式来表达简单线性回归的预测函数呢? 一是因为简洁,二是因为在实现算法时,要用到数值计算里的矩阵运算来提高效率,比如Numpy库里的矩阵运算。
我们现在得到了f(x)新的表达式,那么逻辑回归的预测表达式S(t)也可以用替换t,以新的形式表达,即:
接下来我们要针对逻辑回归预测表达式S(t)来研究要解决的问题:对于给定的样本数据集,样本的特征X和标签y是已知的,在S(t)的表达式中,只有参数是未知的。要解决的关键问题就找到了,就是我们如何找到参数
,使得用这样的方式,可以最大程度地获得样本数据集X对应的分类输出y。
要解决的问题明确了,那我们就想办法解决这个问题。
逻辑回归的损失函数
首先要做的就是找到S(t)的损失函数。
当我们用一个逻辑回归模型对一个样本进行分类时,模型的损失情况要分两种情况讨论:
1) 如果样本属于类别1,也就是y=1,通过逻辑回归模型计算得到的概率p的值越大,预测的样本类别就越接近真实类别,模型的损失就越小,也就是模型的预测效果越好。
2) 如果样本属于类别0,也就是y=0,通过逻辑回归模型计算得到的概率p的值越大,预测的样本类别就越偏离真实类别,模型的损失就越大,也就是模型的预测效果越差。
我们根据上面讨论的两种情况分别画出相应的变化曲线。
看到这样的曲线是不是想起了什么?好像似曾相识的赶脚!
没错!跟我们熟悉的那个log(x)曲线非常相似,那就让我们画出那个熟悉的log(x)曲线吧。
通过上图的图1-3可以看出来,-log(x) 在定义域[0,1]之间,符合概率的值域区间,随着定义域x(类比到LR的概率p)的值不断增大,y值(类比到LR的cost)从正无穷到0逐渐递减,符合逻辑回归中,当样本真实值y=1时,概率p值越大,损失越小的规律。
现在就可以把函数-log(x)作为y=1时逻辑回归的损失函数。
那我们用同样的方法,找到与逻辑回归中y=0时的损失函数曲线相同的函数。
通过上图的图0-3可以看出来,-log(1-x) 在定义域[0,1]之间,符合概率的值域区间,随着定义域x(类比到LR的概率p)的值不断增大,y值(类比到LR的cost)从正无穷到0逐渐递增,符合逻辑回归中,当样本真实值y=0时,概率p值越大,损失越大的规律。
现在就可以把函数-log(1-x)作为y=0时逻辑回归的损失函数。
经过分析之后,把函数-log(x)和-log(1-x)中的x替换成概率p,同时将这两种情况统一成一个表达式:
我们再动动脑筋思考下,能不能把上面的两个函数整合成一个函数来表达损失函数呢?
我先你一步想出来了,它就是,肯定你会问什么要这样整合呢?
当y=1时,把1带入公式得:
当y=0时,把0带入公式得:
通过刚才的解释相信你已经明白了,用这一个公式可以表达逻辑回归中一个样本的损失函数。
在实际操作的时候,我们使用的是一个样本集,需要求出逻辑回归整体的一个损失函数。
这个需求So easy !我们把每个样本的损失值累加起来,就得出了能够表达逻辑回归整体的一个损失函数:
公式里有个负号看着有些难受,我们把求和公式里的负号提到外面来,这样
公式里的负号变正号,得到的公式如下:
提示:m表示样本个数。
逻辑回归的损失函数我们已经得到了,就等于我们已经掌握了逻辑回归的精髓!
对于逻辑回归这个损失函数不能像线性回归的损失函数一样,非常容易地得出一个参数的计算公式,直接计算出未知参数的值。
但是不要伤心,我们还有其他大招可以解决这个问题。
本关的内容有些烧脑,我们先到这里,拜拜~
联系我们,一起学Python吧
分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。
关注公众号「Python家庭」领取1024G整套教材、交流群学习、商务合作