文档章节

logistics算法

tantexian
 tantexian
发布于 2017/06/28 17:44
字数 1927
阅读 51
收藏 0

作者:煎挠橙
链接:https://www.zhihu.com/question/36714044/answer/78680948
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

稍微系统的讲讲 Logistic 方程在生态学上的出现背景,意义和应用场景。

1.来源

 

1798年的时候一个叫 Malthus 的英国牧师在查看当地的人口出生记录的时候发现人口的变化率是和人口的数目成正比的,当然你也可以认为这个正比的关系是生态学上的一个基本假设。

如果用N(t)这个函数来表示t时刻某个地区的人口总数(或者是牛羊的数目或者是细菌的数目)的话我们得到的应该是下面这个方程:

\frac{d N(t)}{d t} = r N(t)

其中r是常数,表示N(t)的变化率。(注意这里为了方便我直接写了连续极限下的方程并且忽略掉了一些随机效应的影响,理论上讲只有系统尺寸趋于无穷大的情况下这个描述才是准确的,但这样写并不影响我们理解问题的本质。下面用了同样的处理。)

这个微分方程可以直接积分解出:

N(t) = N_0 e^{r t}

其中N_0是积分常数,不过这里可以理解为系统的初值即N(0)=N_0。如果考虑r>0的情况下显然N(t)会随着时间指数增长(如下图),如果自然界确实是按照这个规律工作的那么地球早该被各种生物塞的满满的。另一方面如果 r<0 那么 N(t) 就会指数衰减,这部分就不细说了,后面主要还是关注种群增长的问题。

图1:N(t)随时间指数增长

为了克服数目无限增长的问题,模型必须做出修改才行,这个修改最早由 Pierre-François Verhulst 在1838年提出:

\frac{d N(t)}{d t} = r N(t)\left(1-\frac{N(t)}{K}\right)

这就是所谓的 Logistic 方程了。能看出是在原有模型的基础上增加了(1-N/K)这一项。K也是个常数,用来表示系统的容量(capacity),这里认为不管是什么物种生存环境总是有限制的,这个限制可以体现在空间或者资源上。

多了这一项最直接的结果就是系统不能无限制的增长了:随着N(t)随时间的增长并不断接近系统的容量KN(t)的增长率是逐渐减小的。后面我们会更详细的考察这个方程的性质,这里先直观的看看模型设计成这样的意义。

Logistic 方程描述的系统中人口的增长率除了和当时的人口数目成正比以外还要受到系统容量的限制;或者你可以理解为人口的增长速度除了和当时的人口数目成正比以外还和系统中的空位成正比。

为了下面讨论方便,我们先把 Logistic 方程重新标度一下,令:

f(t) = \frac{N(t)}{K}

并在方程两边同时除以K,方程变为:

\frac{d f(t)}{d t} = r f(1-f)

这是 Logistic 方程更一般的形式,这里f(t)表示人口在容量确定的系统中所占的比例。

2. Logistic 方程的性质

 

实际上 Logistic 方程是可以直接解出的:

f(t)=\frac{f_0 e^{rt}}{1+f_0(e^{rt}-1)}

为了更直观的考察方程的性质,现在我们假设初始时刻f(0)的取值是多种多样的,我们关心的是随着时间的流逝,f(t)是如何变化的,看图:

图2:f(0)分别取[0,1.4]区间上一些不同的值的情况下f(t)随时间的变化情况

 

从图中可以看到很多有意思的东西:

最明显的,不管初值如何取,f(t)最终都会变到1!无限制增长的问题被解决了。

细心的朋友应该发现图中有些f(0)是大于1的,如果要求一个萝卜一个坑的话这当然是不可能的,但如果系统容量的限制没有那么强允许大家都挤一挤的话这种情况还是可以理解的。有意思的尽管初值大于1f(t)还是很快就变到1了,完全符合逻辑。这么一看 Logistic 方程虽然简单但实在很巧妙。

另外图中还有一条f(t)=f(0)=0的线因为和横轴重叠了所以看不清,这条线也好理解,如果一开始f=0那么f就永远等于0

下面这段话只作为辅助理解。 有朋友应该已经意识到了对 Logistic 方程来说,f=1f=0是两个很特殊的点,当f取到这两个点的时候方程的右边为0也即f的变化率为0。我们称这两个点为不动点。但这两个点又不一样,其中1是稳定不动点,0是不稳定的,形象一点的理解的话0点在山的最高峰,1在最谷底,如果你恰巧落在了0点,那么可以保持不动,除此之外落在其他的任何(0,\infty)上的地方都会最终跑到1处去。因为现实世界并非是确定性的,所以不太容易见到系统保持在0这样的不稳定不动点上,相比之下1因为其稳定性要常见的多。 这里并没有讨论f(0)<0的情况,因为在生态学上这是没有意义的,不过感兴趣的朋友可以自己分析一下会是个什么情况。

 

3.应用

3.1 生态学上的应用

因为 Logistic 方程形式简单但内涵丰富所以本身就是个很好的模型,到现在也常常被拿出来说明问题。

有时也在其基础上做一些改动来描述更加复杂的情况。比如下面这个方程:

\frac{d f(t)}{d t} = r f (1-f)(f-c)

多出来的这个c也是个常数,叫做 Allee 阈值,比较有趣的是c \in (0,1)的情况,看图:

图3: c=0.5的情况下不同初值随时间变化的情况

 

多了(f-c)这一项以后方程的不动点变成三个,稳定性也有所变化。直接从图上看的话就是如果f(0)>0.5f(t)最后会趋于1;如果f(0)<0.5f(t)最后会趋于0。

这描述了这样一个情景:如果在一个新的环境下群体的数目不是足够多到超过了某个阈值,那么这个群体会最终消亡;如果达到了这个阈值,则可以兴盛繁荣。这个作用被称为 Allee 效应,体现了群体里面个体之间相互依存的关系。

3.2 在化学上的应用

考虑下面这个化学反应:

A + B \rightarrow A+A 速率为k_1A+B \rightarrow B + B 速率为k_2

假设系统中总的粒子数是确定的用\rho_A(t),\rho_B(t)分别表示两种物质的浓度,并考虑\rho_A(t)+\rho_B(t)=1会得到下面的方程:

\frac{d \rho_A(t)}{d t} = (k_1 - k_2)\rho_A(1-\rho_A)

得到的也是个类 Logistic 形式的方程。这至少说明 Logistic 方程的形式有很强的普遍性。

其他方面的应用可以参考其他的答案,我不太懂就不多说了。

4.彩蛋

 

Logistic 方程其实远不是表面上看起来的这么简单。考虑它的分立形式:

x_{t+1}=rx_t(1-x_t)

这就是大名鼎鼎的 Logistic 映射了,迭代这个映射会出现混沌!

图4: Logistic 映射的分岔图


 

5.参考文献

 

对系统生物学感兴趣的朋友可以看看这本:《Mathematical Biology (豆瓣)》 对数学要求会高一点。

Logistic 方程是个简单的非线性动力系统,简单的分析可以参考《常微分方程 (豆瓣)

如果你还对混沌感兴趣的话那么看这本:《Differential Equations, Dynamical Systems, and an Introduction to Chaos, Third Edition (豆瓣)》才发现这书已经出到第三版了

© 著作权归作者所有

tantexian
粉丝 225
博文 527
码字总数 746616
作品 0
成都
架构师
私信 提问
《机器学习实战》 (3) logistic regression(逻辑斯蒂回归)小结(上)

最近一直在学习《机器学习实战》这一本书,之前学习了kNN 算法和决策树算法,因为想迫切的接触logistic回归算法,所以我跳过了朴素贝叶斯(下一讲会说),而是首先学习了logistic回归,这也是...

lwpyh
2018/05/28
0
0
推荐系统实战之FM(Factorization Machine)算法——keras算法练习(4)

笔者在之前的文章中介绍过使用keras搭建一个基于矩阵分解的推荐系统,而那篇文章所介绍的方法可能只是一个庞大推荐系统中的一小环节。而对于工业级别的推荐系统,面对极其庞大的产品种类数量,...

王鹏你妹
03/27
0
0
给ecshop后台增加管理功能页面_无需整理

给ecshop后台增加管理功能页面 比如我们增加一个统计报表叫做 物流费用统计报表 放在后台“报表统计”栏目中 具体操作步骤: 第一步,我们要添加一个菜单到后台,然后设置语言项,最后设置权...

辣条拌鱼翅
2015/01/01
22
0
机器学习笔记-Kernel Logistic Regression

Kernel Logistic Regression 本篇要介绍的是将Logistic Regression和Kernel函数结合在一起的应用。即我们要讨论的是:如果想要把 的技巧使用在 上,我们应该怎么做? Soft-Margin SVM as Reg...

robin_Xu_shuai
2017/11/16
0
0
Logistic Regression算法

正式开始前先说一些关于统计学习的东西有个整体的大局观 统计的三要素:模型,策略,和算法 模型:是要学习的条件概率分布或者决策函数。 策略:就是要按照怎么的学习规则学习或者选择最优模...

多了去的YangXuLei
2017/08/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JAVA 编写redisUtils工具类,防止高并发获取缓存出现并发问题

import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.BoundValueOperations;import org.......

huangkejie
21分钟前
3
0
JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
38分钟前
86
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
48分钟前
4
0
正则表达式基础(一)

1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转...

清自以敬
50分钟前
4
0
idea中@Data标签getset不起作用

背景:换电脑以后在idea中有@data注解都不生效 解决办法:idea装个插件 https://blog.csdn.net/seapeak007/article/details/72911529...

栾小糖
56分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部