zoukankan      html  css  js  c++  java
  • 泰森复出?我们用贝叶斯算法来预测一下……

    一、用贝叶斯算法预测泰森胜率

    5月12日,前世界拳王,53岁的泰森,在个人社交媒体上晒了一段训练视频,并在视频最后,自信满满地说:“我回来了”,高调宣布复出。

    紧跟着,与泰森有过一场“咬耳朵”世纪之战的霍利菲尔德(57岁),也发布了自己的训练视频,同时po出了“come back”字样的照片。

    消息一经发出,便掀起了巨浪。在饱受疫情折磨的世界体坛,世界拳坛两个传奇的复出,足以使人们为之振奋。

    对此,网友们纷纷留言说:“泰森:几个意思,另一只耳朵也不想要了吗?”、“看过那场比赛的人都老了。”、“如果这两个能对决一场,肯定又是一波赚大钱的机会,太多人期待着两个人再次展开经典对话了,门票广告直播权绝对过亿。”、“他们的对决比任何一对拳手都有话题和关注,应该是没钱用了。”

    在小编看来,两大传奇人物的复出,二人之间必然是会有一战的,毕竟这就是顶级流量之间的碰撞,是大家赶着上的大卖票房。

    复出后的第一场,泰森的对手会不会是霍利菲尔德?

    号称“地表最能打的男人”之一的他,在经隔15年的的再战能否再续曾经的辉煌战绩?

    虽然以目前小编的经济水平来说,去现场看比赛的可能性为0.001‰,但这并不妨碍小编用一个简单的概率模型对泰森第一场比赛的胜率进行预测。

    二、贝叶斯算法的基本概念

    小编此次主要是想采用简单贝叶斯算法进行预测,那么首先,我们得明晰贝叶斯算法是什么:

    贝叶斯学派对于概率的解释是,对某个事件发生的信心。如果,某人把 0 赋给某个事件,则表示他相信这个事件绝对不会发生。如果他将 1 赋给某个事件,则表示他相信这个事件必定发生。0-1 之间的其它值,可以表示他相信该事件发生的程度。当然这种概率的定义在一定时候也可以和频率产生联系。

    这样定义有一个好处,就是每一个人都能够给同一个事件赋予不同的概率值。这是非常符合实际。因为人与人之间是有差异的,不同人对同一个事件是否发生的信心应该是不同的。虽然概率不同,但这并不代表着他们中有人错,有人对。

    下面的这些例子就详细的阐述了,人对事件发生的信心与概率之间的关系:

    • 在抛一个没有被动过手脚的硬币时大家都知道硬币为正或反的概率都是 0.5。但是,假设你预先偷看了结果,知道下次一定为正面。那么这个时候,你认为硬币为正面的概率是多少?显然,你的预先偷看,并不能改变硬币的实际结果,但这使得你对结果赋予的概率值不同了。
    • 一个病人表现出了 x,y,z 三种症状,但是有很多疾病都会表现出这三种症状。因此不同的医生,可能会因为经验的不同,而对何种疾病导致的这些症状的见解不同。

    为了能够更好的和传统概率术语对齐,我们把对事件 A 发生的信心记作 P(A) ,称作先验概率

    这里我们使用 P(A|X) 表示更新后的信念。即在得到证据 X 后,A 事件发生的概率。为了和先验概率相对应,我们将更新后的概率 P(A|X) 称之为后验概率

    我们将上面的两个例子中的先验概率和后验概率提取出来:

    • P(A)=0.5 表示硬币有 50% 的概率是正面。P(A|X)=1,表示你已知下次硬币抛出的信息 X 的情况下,你预测下次抛出点的硬币信息是正面的概率(显然,你已经知道了结果,再叫你预测结果,那么概率肯定是 100% 或者 0%) 。
    • P(A) 表示病人可能患有 A 疾病的概率。P(A∣X)表示,做了血液测试(即获得信息 X)后,该疾病为 A 的可能性。

    如上,在获得新的证据 X 后,我们并没有完全否决先前的信念。而是选择了重新调整之前的信念,使其更加符合目前的证据,这样也可以让我们的预测结果更加准确。这就是贝叶斯算法的基本思想。

    贝叶斯定理的基本公式是:

    三、泰森胜率的相关变量定义

    上面公式没看明白也没关系,变量定义的过程中会讲解这些变量的含义。

    接下来,我们需要收集一些数据。

    从泰森截止到2005年退役时的数据,我们可以看到,泰森的胜率是 50/(50+6)。也就是说,在不考虑对手、自身状态等复杂情况时,泰森胜率的先验概率 P(A) = 50 / (50+6) ≈ 0.893

    其中 P(X|A) 表示,泰森获胜的情况下,泰森及他的对手们所呈现的某种状态的概率,为了方便理解,姑且称这种状态为“迷の究极状态”吧。换句话说,如果泰森真的获胜,那么他或者他的对手是处于“迷の究极状态”的概率(这个概率可以通过统计得到)。同理, P(X|~A) 表示,泰森在战败情况下,呈现出“迷の究极状态”的概率。

    泰森复战后的首场对手,目前网上呼声最大的,就是之前提到的霍利菲尔德。而泰森退役前,与霍利菲尔德两场比赛的战绩都是失败(这里不评判历史行为,只举数据)。现如今泰森已然53岁。

    在得知上述信息后,我们主观设定,泰森复出后的首场战役,呈现“迷の究极状态”并获胜的概率为 0.2,即 P(X|A) = 0.2呈现“迷の究极状态”并战败的概率为 0.9,即 P(X|~A) = 0.9

    P(X) 表示,泰森的任意一场比赛呈现“迷の究极状态”的概率。那么这个概率应该如何计算呢?该概率等于泰森获胜的情况下会出现“迷の究极状态”的概率加上他战败情况下出现“迷の究极状态”的概率。让我们用一下逻辑符号来对它进行表示:

    即:P(X) = P(X|A)P(A) + P(X|A)P(A) = 0.250/56 + 0.9(1-50/56) ≈ 0.275

    相应的,后验概率 P(A|X) = P(X|A)P(A) / P(X) ≈ 0.649

    四、用 Python 做个简单条形图

    现在我们已经知道了泰森复出后首战胜率的先验概率和后延概率,接下来用 Python 画一个简单的条形统计图吧

    对 Python 及其 scipy.stats 统计函数库有基本了解,就可以完成这个简单的实践了。

    首先,导入基本的函数统计库

    # stats Scipy 的统计函数库,定义了常见的分布和函数
    # 防止画图时的备注出现乱码
    import scipy.stats as stats
    from IPython.core.pylabtools import figsize
    import numpy as np
    from matplotlib import pyplot as plt
    %matplotlib inline
    

    其次,输入变量

    prior = [50/56, 6/56]  # 分别设置泰森获胜和战败的先验概率
    posterior = [0.649, 1-0.649]  # 分别设置泰森获胜和战败的后验概率
    prior, posterior
    

    然后,利用 Matplotlib 库,进行条形统计图的绘制

    figsize(12.5, 4)  # 设置大小,以及条形统计图条数
    colours = ["#348ABD", "#A60628"]  # 设置颜色
    
    # 画条形统计图,并且设置相应参数,如横纵坐标,标签,颜色等
    plt.bar([0, .7], prior, alpha=0.70, width=0.25,
            color=colours[0], label="prior distribution",
            lw="3", edgecolor=colours[0])
    
    plt.bar([0+0.25, .7+0.25], posterior, alpha=0.7,
            width=0.25, color=colours[1],
            label="posterior distribution",
            lw="3", edgecolor=colours[1])
    
    plt.xticks([0.20, 0.95], ["Win", "Lose"])
    plt.title("Prior and posterior probabilities of Tyson's winning rate")
    plt.ylabel("Probability")
    plt.legend(loc="upper left")
    

    最后,我们得到了这样的一张图:

    由图,我们可以看到,无论是胜率还是败率,其先验概率和后验概率都有不小的变化。而正是我们考虑到泰森自身及其对手可能存在的状态,引起的这个变化。

    五、总结

    今天分享的是运用简单贝叶斯推断泰森复出后首战胜率。

    事实上,实际情况肯定比上述的要复杂的多,也必然不会单单是一个简单的贝叶斯推断就能搞定的。想要引入更多的变量、使预测更精准,需要执行更加复杂的贝叶斯推断所用到的数学。

    在这里,强烈推荐课程《贝叶斯方法数据分析实战》,本课程基于 Python 中 PyMC 库,设计了大量的实际案例,每一个实验在对知识点进行讲解后,都会引入一个实际案例来帮助理解和学习贝叶斯推断。

    学好贝叶斯是学机器学习的必经之路哦,顺带提供一下机器学习的学习路径,从小白到精通不是梦!

  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/shiyanlou/p/12895714.html
Copyright © 2011-2022 走看看