关注一下再走八
(看完这篇应该蛮久)
小编觉得如果一篇内容说完一个机器学习方法是不可能,想着不如循序渐进,细节化处理。写多了之后在菜单栏里放入方法导航,大家就可以系统的看;所以接下来关于一个方法会有>1篇的论述。
今天开始逻辑回归
先用被说烂了的一句话:
假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。$(不用记)$
$目录$:
Logistic equation原始追溯...
从线性回归到逻辑回归思考
-- (为什么要引入logistic函数)
从广义线性模型到逻辑回归思考
-- (为什么要是logistic函数)
逻辑回归结果是概率么
下章期待
Logistic equation追溯
https://mathworld.wolfram.com/LogisticEquation.html 是关于一些数学方法的历史。直接给你link到Logistic
% 1) 从人口增长的计算来
N(t): 人口的数量
t: 时刻; r: 变化率 - 人口数量的变化率
如果不加任何的限制人口的数量会随着时间的增长而增长。
% 2) 加入限制( 人口增长必定收到自然限制)
N是人口数量,K表示最大承载量, 变换:
即当加入了(1-N(t)/K) 后,N
% 3) 抽象一下函数
两边同除K,并且让x = N/ K
被挡住的是rx(1-x)
% 4) 求解得出x(t),感兴趣求解过程看最后附录推导
% 5)手动在python看下这个图
import numpy as np import math import matplotlib.pyplot as plt x=np.arange(0,20,0.1) x0 = np.arange(0,2,0.1) r=0.8 y=[] for t in x: y0=1/(1+(1/x0 - 1)*math.exp(-r*t)) y.append(y0) plt.plot(x,y,label="Logistic Equation") plt.xlabel('x') plt.ylabel('y') plt.ylim(0,2.2)
% 6) 观感
曲线多因为我x初始值[0,2]设定了很多个
无论初始值是几,就算大于1,曲线都会回归1
最底部蓝色的线(x轴重叠), 刚开始是0就一直是0
% 7) 抽出logistic等式形式
上图所示:在1以下的时候,并且无限接近0的时候(橙色),是一条S形的曲线,当我们试着把这个曲线抽离出来,设置x的范围是(-5,5),x0=0.5, r=1 得出的图为:
带入数值得函数变成
这里只是看下logistic等式原生态(多年前,(感觉小编有点硬凑哈哈)当然不是因为这样有了等式,我们就去拍脑袋用它。请往后看其中的联系。记住这个S曲线图的感觉。
从线性回归到逻辑回归的联系看
为什么要引入logistic /sigmoid函数
大家应该会比较熟悉线性回归。
从线性回归说起。我们一般用线性回归去做连续目标值的预测。如果用其做分类问题,不是很适合,因为它的数值是不确定的,没有范围的,如果要是做分类预测,是需要把数值映射到一个区间范围的。如果是二分类的问题,那就是映射到0,1之间,此时是一个概率问题。(想象每本书总要举的例子掷硬币, 非黑即白)。
第一反应,阶梯函数,比如
但是这个函数不连续,有断层,不能作为一个连接渠道,所以想有没有近似的连续函数作为一个联系。这里联想到了引入logistic函数,也叫做sigmoid函数。
sigmoid函数特征(再放一次图)
sigmoid单调递增且连续
sigmoid函数关于(0,0.5)对称
sigmoid可以将输出值映射到0~1之间
其次是现实问题会有类似的非线性关系,当自变量很大或很小时对因变量影响很小,但是在某个阈值范围上时影响很大
当把t输入到这个函数中,结果会被映射到0,1之间。
再来,这里单看的t,表示一个数值。但是如果把t看成空间中一系列样本的特征线性组合,每一个样本都有很多特征点t,特征点也有自己的权重a。此时可以变成:
这权重a看成一个矩阵,t本身也看成一个
即
所以logistic函数也可以表示成
如果g(t) > 0,f(t)分母 < 2, f(t) >0.5
反之g(t) < 0, f(t) <0.5,
y=0.5 是一个分界点,分类无法确定。
所以当f(t)越小,越靠近0分类,f(t) 越大越靠近1分类,靠近临界点,分类的准确性会降低。
所以:简单来说为什么要用sigmoid,即线性回归的预测是一个数,但是二分类效果是01结果,我们需要有一个联系在其中映射 ,sigmoid是连续的可微的,是能够把实数转换成一个01区间内的数值,并且数值约接近1,我们认为1的可能性更大。
到这里会觉得logistic/sigmoid真的有很多优点,又可以帮助映射区间,所以我们才使用,是的也不完全是,因为如果有数学的方式能够推导出这个函数,是不是可信度更高?那从推导角度看看。
从数学推导的角度看
逻辑回归为什么是logistic /sigmoid形式?
在ML中很多模型都是广义线性模型,比如线性回归,逻辑回归, 多项式回归等。我们是可以从广义线性模型推导出各种回归,他们的区别是各个回归的样本数据分布不同,比如样本和噪声服从高斯分布那就是线性回归,服从伯努利分布就是逻辑回归等。
我们的步骤是
了解广义线性模型和其基本假设
了解伯努利分布
证明伯努利分布属于指数分布族
-- 因为GML是基于指数分布族的
而逻辑回归的假设前提是伯努利分布
在此基础上推导出逻辑回归的sigmoid函数
广义线性模型有三个假设
1. GML是基于指数分布族的
即给定样本以及参数,样本分类服从指数家族中的某一个分布; 指数分布族的形式为
不要觉得很可怕我简单解释一下
η 是自然参数,η 不同的时候,分布就会不同
你熟悉的高斯分布,泊松分布,伯努利分布等都是指数分布家族成员
我们看到的原始分布表达式(参数概率分布)不一样,但是都可以通过数学上的变换得到上图的表达形式。(下文会证明伯努利分布是指数分布家族成员)。
2. 分布模型的参数η 与输入的样本为线性关系
3. 给定一个输入x,我们的目标函数为h(θ)=E[T(y)/x]
解释: 即1是我们能在指数分布范围内部讨论y的概率,第二条是为了设计决策函数是线性的,第三个是我们的预测值具有有实际均值的分布。
伯努利分布
简单想一下,逻辑回归主要去解决01二分类的问题,可以很自然的联想到用伯努利分布
伯努利分布指的是对于随机变量X有, 参数为p(0
伯努利分布函数的形式为:
(1)
还简单可以写成
p(y=1;p) = p, p(y=0;p) = 1-p ,p看成均值
如果你掷硬币,y=1or0代表正面和反面,你得到正面的概率就是p,反面的概率是1-p
验证伯努利是指数分布族成员
推出sigmoid函数
把(1)进行如下变换,(2)是指数分布族的形式
结果
1和2可以完全对应上;证明了伯努利是指数家族
P是伯努利函数里唯一参数, η 指数分布族里的分布决定参数, 通过等式12对应,关注橙色部分,这两个参数之间隐藏了sigmoid函数的形式。
根据GLM的假设3:h(θ) = E[y/x, θ] 又因为伯努利的期望就是 p ,所以 h(θ) = E = p =
以上推出二项式分布要用sigmoid形式作为响应函数
逻辑回归输出的数值真的是概率么?
我们的逻辑回归是建立在服从伯努利分布的基础上的,但是事实情况大多不会完全满足数学上的假设,这就不能完全把结果当晨一个概率数值,所以我们最好只看作数值越靠近1,1的可能性就越大,反之。
后续发展
之后我会紧接着更新逻辑回归2甚至3,讲解损失函数,一些积累的面试问题(当然我会去收集),python实现,案例实际操作等。期待吧。我觉得调包很多人都会,拉开距离的还是基础和细节,所以从源头开始慢慢梳理。
附录:上面有一步细节证明
END
如果觉得还ok,可以点点关注和在看哈哈 谢谢