区块链技术博客
www.b2bchain.cn

【算法模型】S07E13 随机过程概念初阶与案例求职学习资料

本文介绍了【算法模型】S07E13 随机过程概念初阶与案例求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

1.随机变量与随机过程

在详细介绍完随机变量的内容之后,这一部分我们开始进入到随机过程的部分中来。简单点说,随机过程就是一串随机变量的序列,在这个序列当中,每一个数据都可以被看作是一个随机变量,因此我们在随机过程的概率模型处理过程中,重点关注的就是时间和数据这两方面内容。所以简单地说,随机过程就是一串(有限或无限)随机变量序列,

常见的随机过程建模场景数不胜数,比如:

世界杯足球赛中每场比赛进球数构成的序列;
沪深300指数每日收盘价构成的数据序列;
某十字路口每分钟通过的车辆数量构成的序列;

等等等等,可以说这种例子涵盖了生活中的方方面面。

在讨论随机变量的时候,我们关注的是他的分布、数字特征等等,而此时,对于随机过程,将他们连成一个序列之后,我们的关注点更多的聚焦在序列之间的相关关系、序列整体的长期统计特征以及一些我们所包含的特定事件的发生概率。

2.随机过程实际场景举例

当然说了这么多,大家肯定感觉很抽象,我们来看几个实际的场景,并用随机过程对其进行建模,同时运用蒙特卡罗方法对其过程进行模拟。

2.1.赌博中的随机过程

赌博的例子非常普遍,这里我们举一个大家非常熟悉的例子,我们尽量挖掘的更深入一些。

赌徒和庄家对赌抛硬币,如果为正面,本轮赌徒赢,庄家付给赌徒$1$元,结果为反面,本轮赌徒输,赌徒付给庄家$1$元。赌徒有初始赌本$10$元,手上的钱一旦输光则退出赌局,如何来模拟这个赌博过程?

我们首先来分析一下这个过程,赌徒的赌博结果本质上依托于每次抛掷硬币的结果,每一轮赌博就是一个伯努利试验,赢的概率是$p=0.5$,赌博的过程就是由这一串伯努利试验构成的伯努利随机过程,每轮赌局中,如果赢则赌本增加$1$元,输则赌本减少$1$元。

当然了,如果对某一个特定的赌徒,一旦开始进入赌局,则最终由每轮赌局结果构成的序列就是唯一的。那么如果我们想观察整个赌博过程的整体特征,我们该怎么办?好办,还是使用之前讲过的蒙特卡罗方法,采用大量的样本,最终观察样本结果的整体特征。

这里,我们为了说明问题,先采用的样本数也就是赌徒数为$10$个,轮数为$100$轮,也就是每个赌徒最多和庄家对赌100轮,如果在这个过程中输光了赌本,则提前退出,如果到$100$轮还有赌本,赌局也停止。

我们来看一下模拟的代码:

代码片段:

import pandas as pd import random  sample_list = [] round_num = 100 person_num = 10 for person in range(1, person_num + 1):     money = 10     for round in range(1, round_num + 1):         result = random.randint(0, 1)         if result == 1:             money = money + 1         elif result == 0:             money = money - 1         if money == 0:             break     sample_list.append([person, round, money])  sample_df = pd.DataFrame(sample_list, columns=['person', 'round', 'money']) sample_df.set_index('person',inplace=True)  print(sample_df)

运行结果:

        round  money person               1          64      0 2         100     14 3          90      0 4         100     16 5          88      0 6         100     14 7         100      6 8          78      0 9          52      0 10         18      0

我们简单的分析一些代码和运行结果,其实这段代码中最核心的部分就是:

result = random.randint(0, 1)

在每轮赌局中,我们首先生成了一个随机变量,他在$0$和$1$当中等概论选取,模拟的就是抛掷硬币的过程,当结果为$1$时表示硬币为正面,本轮赢庄家$1$元,结果为$0$时表示硬币为反面,本轮输庄家$1$元。这里设定的是每个赌徒最多赌$100$轮,如果不到$100$轮就输光了,则退场,这样就模拟了整个赌博的随机过程。

从运行结果来看,$10$个赌徒中有$6$个提前输光退场,剩下的$4$个打满全场的人中,有$3$个是挣钱的,有$1$个是亏钱的。

当然,我们这里是为了打印出所有的结果,所以样本数选择的比较少。蒙特卡洛方法讲求大的样本量,我们把样本数和轮数都修改一下,并且统计一些指标。我们把赌徒的总人数设置为$1000000$人,轮数设置为$100$(我们依次修改了轮数为$100$,$1000$,$10000$),来观察样本总体的表现:

代码片段:

import pandas as pd import random  sample_list = [] person_num = 100000 round_num = 10000 for person in range(1, person_num + 1):     money = 10     for round in range(1, round_num + 1):         result = random.randint(0, 1)         if result == 1:             money = money + 1         elif result == 0:             money = money - 1         if money == 0:             break     sample_list.append([person, round, money]) sample_df = pd.DataFrame(sample_list, columns=['person', 'round', 'money']) sample_df.set_index('person',inplace=True)  print("总轮数:{},总人数:{}".format(round_num,person_num)) print("输光赌本提前出局的人数:{}".format(person_num-len(sample_df[sample_df['round']==round_num]))) print("赌满全场且盈利的人数:{}".format(len(sample_df[sample_df['money']>10]))) print("赌满全场且亏损的人数:{}".format(len(sample_df[sample_df['money']<=10][sample_df['money']>0])))

运行结果:

总轮数:100,总人数:100000 输光赌本提前出局的人数:31148 赌满全场且盈利的人数:44458 赌满全场且亏损的人数:23923
总轮数:1000,总人数:100000 输光赌本提前出局的人数:75154 赌满全场且盈利的人数:23441 赌满全场且亏损的人数:1386

“`
总轮数:10000,总人数:100000

1.随机变量与随机过程

在详细介绍完随机变量的内容之后,这一部分我们开始进入到随机过程的部分中来。简单点说,随机过程就是一串随机变量的序列,在这个序列当中,每一个数据都可以被看作是一个随机变量,因此我们在随机过程的概率模型处理过程中,重点关注的就是时间和数据这两方面内容。所以简单地说,随机过程就是一串(有限或无限)随机变量序列,

常见的随机过程建模场景数不胜数,比如:

世界杯足球赛中每场比赛进球数构成的序列;
沪深300指数每日收盘价构成的数据序列;
某十字路口每分钟通过的车辆数量构成的序列;

等等等等,可以说这种例子涵盖了生活中的方方面面。

在讨论随机变量的时候,我们关注的是他的分布、数字特征等等,而此时,对于随机过程,将他们连成一个序列之后,我们的关注点更多的聚焦在序列之间的相关关系、序列整体的长期统计特征以及一些我们所包含的特定事件的发生概率。

2.随机过程实际场景举例

当然说了这么多,大家肯定感觉很抽象,我们来看几个实际的场景,并用随机过程对其进行建模,同时运用蒙特卡罗方法对其过程进行模拟。

2.1.赌博中的随机过程

赌博的例子非常普遍,这里我们举一个大家非常熟悉的例子,我们尽量挖掘的更深入一些。

赌徒和庄家对赌抛硬币,如果为正面,本轮赌徒赢,庄家付给赌徒$1$元,结果为反面,本轮赌徒输,赌徒付给庄家$1$元。赌徒有初始赌本$10$元,手上的钱一旦输光则退出赌局,如何来模拟这个赌博过程?

我们首先来分析一下这个过程,赌徒的赌博结果本质上依托于每次抛掷硬币的结果,每一轮赌博就是一个伯努利试验,赢的概率是$p=0.5$,赌博的过程就是由这一串伯努利试验构成的伯努利随机过程,每轮赌局中,如果赢则赌本增加$1$元,输则赌本减少$1$元。

当然了,如果对某一个特定的赌徒,一旦开始进入赌局,则最终由每轮赌局结果构成的序列就是唯一的。那么如果我们想观察整个赌博过程的整体特征,我们该怎么办?好办,还是使用之前讲过的蒙特卡罗方法,采用大量的样本,最终观察样本结果的整体特征。

这里,我们为了说明问题,先采用的样本数也就是赌徒数为$10$个,轮数为$100$轮,也就是每个赌徒最多和庄家对赌100轮,如果在这个过程中输光了赌本,则提前退出,如果到$100$轮还有赌本,赌局也停止。

我们来看一下模拟的代码:

代码片段:

import pandas as pd import random  sample_list = [] round_num = 100 person_num = 10 for person in range(1, person_num + 1):     money = 10     for round in range(1, round_num + 1):         result = random.randint(0, 1)         if result == 1:             money = money + 1         elif result == 0:             money = money - 1         if money == 0:             break     sample_list.append([person, round, money])  sample_df = pd.DataFrame(sample_list, columns=['person', 'round', 'money']) sample_df.set_index('person',inplace=True)  print(sample_df)

运行结果:

        round  money person               1          64      0 2         100     14 3          90      0 4         100     16 5          88      0 6         100     14 7         100      6 8          78      0 9          52      0 10         18      0

我们简单的分析一些代码和运行结果,其实这段代码中最核心的部分就是:

result = random.randint(0, 1)

在每轮赌局中,我们首先生成了一个随机变量,他在$0$和$1$当中等概论选取,模拟的就是抛掷硬币的过程,当结果为$1$时表示硬币为正面,本轮赢庄家$1$元,结果为$0$时表示硬币为反面,本轮输庄家$1$元。这里设定的是每个赌徒最多赌$100$轮,如果不到$100$轮就输光了,则退场,这样就模拟了整个赌博的随机过程。

从运行结果来看,$10$个赌徒中有$6$个提前输光退场,剩下的$4$个打满全场的人中,有$3$个是挣钱的,有$1$个是亏钱的。

当然,我们这里是为了打印出所有的结果,所以样本数选择的比较少。蒙特卡洛方法讲求大的样本量,我们把样本数和轮数都修改一下,并且统计一些指标。我们把赌徒的总人数设置为$1000000$人,轮数设置为$100$(我们依次修改了轮数为$100$,$1000$,$10000$),来观察样本总体的表现:

代码片段:

import pandas as pd import random  sample_list = [] person_num = 100000 round_num = 10000 for person in range(1, person_num + 1):     money = 10     for round in range(1, round_num + 1):         result = random.randint(0, 1)         if result == 1:             money = money + 1         elif result == 0:             money = money - 1         if money == 0:             break     sample_list.append([person, round, money]) sample_df = pd.DataFrame(sample_list, columns=['person', 'round', 'money']) sample_df.set_index('person',inplace=True)  print("总轮数:{},总人数:{}".format(round_num,person_num)) print("输光赌本提前出局的人数:{}".format(person_num-len(sample_df[sample_df['round']==round_num]))) print("赌满全场且盈利的人数:{}".format(len(sample_df[sample_df['money']>10]))) print("赌满全场且亏损的人数:{}".format(len(sample_df[sample_df['money']<=10][sample_df['money']>0])))

运行结果:

总轮数:100,总人数:100000 输光赌本提前出局的人数:31148 赌满全场且盈利的人数:44458 赌满全场且亏损的人数:23923
总轮数:1000,总人数:100000 输光赌本提前出局的人数:75154 赌满全场且盈利的人数:23441 赌满全场且亏损的人数:1386

“`
总轮数:10000,总人数:100000

1.随机变量与随机过程

在详细介绍完随机变量的内容之后,这一部分我们开始进入到随机过程的部分中来。简单点说,随机过程就是一串随机变量的序列,在这个序列当中,每一个数据都可以被看作是一个随机变量,因此我们在随机过程的概率模型处理过程中,重点关注的就是时间和数据这两方面内容。所以简单地说,随机过程就是一串(有限或无限)随机变量序列,

常见的随机过程建模场景数不胜数,比如:

世界杯足球赛中每场比赛进球数构成的序列;
沪深300指数每日收盘价构成的数据序列;
某十字路口每分钟通过的车辆数量构成的序列;

等等等等,可以说这种例子涵盖了生活中的方方面面。

在讨论随机变量的时候,我们关注的是他的分布、数字特征等等,而此时,对于随机过程,将他们连成一个序列之后,我们的关注点更多的聚焦在序列之间的相关关系、序列整体的长期统计特征以及一些我们所包含的特定事件的发生概率。

2.随机过程实际场景举例

当然说了这么多,大家肯定感觉很抽象,我们来看几个实际的场景,并用随机过程对其进行建模,同时运用蒙特卡罗方法对其过程进行模拟。

2.1.赌博中的随机过程

赌博的例子非常普遍,这里我们举一个大家非常熟悉的例子,我们尽量挖掘的更深入一些。

赌徒和庄家对赌抛硬币,如果为正面,本轮赌徒赢,庄家付给赌徒$1$元,结果为反面,本轮赌徒输,赌徒付给庄家$1$元。赌徒有初始赌本$10$元,手上的钱一旦输光则退出赌局,如何来模拟这个赌博过程?

我们首先来分析一下这个过程,赌徒的赌博结果本质上依托于每次抛掷硬币的结果,每一轮赌博就是一个伯努利试验,赢的概率是$p=0.5$,赌博的过程就是由这一串伯努利试验构成的伯努利随机过程,每轮赌局中,如果赢则赌本增加$1$元,输则赌本减少$1$元。

当然了,如果对某一个特定的赌徒,一旦开始进入赌局,则最终由每轮赌局结果构成的序列就是唯一的。那么如果我们想观察整个赌博过程的整体特征,我们该怎么办?好办,还是使用之前讲过的蒙特卡罗方法,采用大量的样本,最终观察样本结果的整体特征。

这里,我们为了说明问题,先采用的样本数也就是赌徒数为$10$个,轮数为$100$轮,也就是每个赌徒最多和庄家对赌100轮,如果在这个过程中输光了赌本,则提前退出,如果到$100$轮还有赌本,赌局也停止。

我们来看一下模拟的代码:

代码片段:

import pandas as pd import random  sample_list = [] round_num = 100 person_num = 10 for person in range(1, person_num + 1):     money = 10     for round in range(1, round_num + 1):         result = random.randint(0, 1)         if result == 1:             money = money + 1         elif result == 0:             money = money - 1         if money == 0:             break     sample_list.append([person, round, money])  sample_df = pd.DataFrame(sample_list, columns=['person', 'round', 'money']) sample_df.set_index('person',inplace=True)  print(sample_df)

运行结果:

        round  money person               1          64      0 2         100     14 3          90      0 4         100     16 5          88      0 6         100     14 7         100      6 8          78      0 9          52      0 10         18      0

我们简单的分析一些代码和运行结果,其实这段代码中最核心的部分就是:

result = random.randint(0, 1)

在每轮赌局中,我们首先生成了一个随机变量,他在$0$和$1$当中等概论选取,模拟的就是抛掷硬币的过程,当结果为$1$时表示硬币为正面,本轮赢庄家$1$元,结果为$0$时表示硬币为反面,本轮输庄家$1$元。这里设定的是每个赌徒最多赌$100$轮,如果不到$100$轮就输光了,则退场,这样就模拟了整个赌博的随机过程。

从运行结果来看,$10$个赌徒中有$6$个提前输光退场,剩下的$4$个打满全场的人中,有$3$个是挣钱的,有$1$个是亏钱的。

当然,我们这里是为了打印出所有的结果,所以样本数选择的比较少。蒙特卡洛方法讲求大的样本量,我们把样本数和轮数都修改一下,并且统计一些指标。我们把赌徒的总人数设置为$1000000$人,轮数设置为$100$(我们依次修改了轮数为$100$,$1000$,$10000$),来观察样本总体的表现:

代码片段:

import pandas as pd import random  sample_list = [] person_num = 100000 round_num = 10000 for person in range(1, person_num + 1):     money = 10     for round in range(1, round_num + 1):         result = random.randint(0, 1)         if result == 1:             money = money + 1         elif result == 0:             money = money - 1         if money == 0:             break     sample_list.append([person, round, money]) sample_df = pd.DataFrame(sample_list, columns=['person', 'round', 'money']) sample_df.set_index('person',inplace=True)  print("总轮数:{},总人数:{}".format(round_num,person_num)) print("输光赌本提前出局的人数:{}".format(person_num-len(sample_df[sample_df['round']==round_num]))) print("赌满全场且盈利的人数:{}".format(len(sample_df[sample_df['money']>10]))) print("赌满全场且亏损的人数:{}".format(len(sample_df[sample_df['money']<=10][sample_df['money']>0])))

运行结果:

总轮数:100,总人数:100000 输光赌本提前出局的人数:31148 赌满全场且盈利的人数:44458 赌满全场且亏损的人数:23923
总轮数:1000,总人数:100000 输光赌本提前出局的人数:75154 赌满全场且盈利的人数:23441 赌满全场且亏损的人数:1386

“`
总轮数:10000,总人数:100000

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 【算法模型】S07E13 随机过程概念初阶与案例求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们