在统计学中为了观察数据的离散程度,咱们须要用到标准差,方差等计算。咱们如今拥有如下两组数据,表明着两组同窗们的成绩,如今咱们要研究哪一组同窗的成绩更稳定一些。方差是中学就学过的知识,可能有的同窗忘记了 ,一块儿来回顾下。
A组 = [50,60,40,30,70,50] B组 = [40,30,40,40,100]
为了便于理解,咱们能够先使用平均数来看,它们的平均数都是50,没法比较出他们的离散程度的差别。针对这样的状况,咱们能够先把分数减去平均分进行平方运算后,再取平均值。
想上面这样就是方差的计算方式,就是数组中的每个数减去平均值,而后再分别计算它们的平方值,最后再取平均数的运算就叫方差。方差很适合用来研究数据的离散程度,可是会存在两个问题:python
为了解决上面的问题,咱们会把最后的结果开方,就像这样:
在方差的结果上,开一个根号,运算出来的结果就叫作标准差了。经过标准差的计算后,咱们一下就可以看出来,标准差越小的,证实其成绩越稳定。算法
import numpy as np # 建立一个二维数组 arr = np.array([[3, 7, 25, 8, 15, 20], [4, 5, 6, 9, 14, 21]]) # 计算方差 print(arr.var()) print(np.var(arr)) # 计算标准差 print(arr.std()) print(np.std(arr)) # 计算轴0方向方差 print(arr.var(axis=0)) print(np.var(arr, axis=0)) # 计算轴1方向方差 print(arr.var(axis=1)) print(np.var(arr, axis=1)) # 计算轴0方向标准差 print(arr.std(axis=0)) print(np.std(arr, axis=0)) # 计算轴1方向标准差 print(arr.std(axis=1)) print(np.std(arr, axis=1))
二项式定理很是重要,是理解和应用几率分布的前提,这都是中学学过的,咱们一块儿来回顾一下。
2ab这一项能够用排列组合的知识来理解,从(a+b)(a+b)分别选出a和b的可能性,那么一共有两种状况:
数组
因此ab左边的系数就是2,这个2就是二项式系数,同理:
咱们从上边的两个例子中能够看到,不管是第一个例子中的从两个括号中选出一个b,仍是后边的从3个括号中选出一个b(这里咱们把b做为研究对象,其实不管是谁都是同样的)都是组合的问题,因此结合咱们中学学过的知识二项系数能够总结为以下公式:
在统计学中,对于二项分布来讲,二项系数是必不可少的知识,关于二项分布咱们后边会讲到。dom
首先须要声明一个函数,函数接收两个参数,一个是n,一个是k,返回值为其二项系数的值。函数
import itertools import numpy as np # 等待排列的数组 arr = [1, 2, 3, 4, 5] # 排列的实现P print(list(itertools.permutations(arr, 3))) # 组合的实现C print(list(itertools.combinations(arr, 3))) # 获取二项系数的函数 # 支持两个参数,第一个是n,第二个是k def get_binomial_coefficient(n, k): return len(list(itertools.combinations(np.arange(n), k))) print(get_binomial_coefficient(3, 1))
使用二项式系数就能够展开(a+b)^n,因此有二项式定理,以下:学习
寺庙在中国已经遍及大江南北了,一天小王和小李二人出游,登山后,偶遇一寺庙,寺庙中有一个大师,善占卜。因而二人决定请大师帮忙占卜一次。大师见二人结伴而来,便问二人是占卜独卦,仍是连卦呢?二人不解,何为独卦,何为连卦?因而大师解答到:独卦为第一人占卜后,将卦签放回签桶中后,再进行第二次占卜。连卦为第一人占卜后,已抽出的卦签不放回签桶中,直接进行第二次占卜。人工智能
假设签筒中,只有5根签,其中2根是上签,而其余3根是下签。小王先抽签,小王抽签的行为记为S,小李抽签的行为记为T。在独卦的占卜规则下,S的结果并不影响T的结果。也就是说无论小王是否抽中上签,小李抽中上签的几率都是2/5。而在连卦的占卜规则下,S的结果对T的结果产生影响。由于小王抽完签以后,并不把签放回桶中。若是小王抽中上签,那么小李抽中上签的几率就是1/4,若是小王没有抽中上签,那么小李抽中上签的几率就是2/4。在独卦的占卜规则下,两次抽签行为S与T的。它们的结果互不影响,咱们在统计学中称S与T是独立试验。
当S与T相互独立时,S中发生事件A和T中发生的事件B的几率P能够表示为:
P(A∩B) = P(A) * P(B)
显然,在独卦的占卜规则下,小王和小李都抽中上签的几率是4/25。
3d
如今有这样一个场景,掷骰子的游戏,仍然是小王和小李一块儿玩,每人拿3颗骰子。游戏规则是三颗骰子每一个掷一次,最后谁的点数大谁赢。这里无论他们掷骰子多少次,每一次的结果对于其余次的结果都不会产生影响,因此他们都是相互独立的实验。code
对于这样反复的独立试验,咱们称其为重复试验或者叫独立重复试验。如今咱们把掷3次骰子,每一次掷骰子时,其中2颗骰子都出现1的状况画图以下(X表明其余数字):
咱们先来看一下第一次掷骰子的状况前两颗骰子为1,第三颗骰子为其余数字的几率分别为1/六、1/六、5/6,由于每一次的试验都是相互独立的,因此发生的几率为1/6×1/6×5/6。三次掷骰子,每一次有两颗骰子是1的状况的种类为3种,因为3种状况是互斥的(不可能同时发生),因此几率应该为3次的几率相加。也就是:3×(1/6)²×5/6。A事件和B事件相互排斥时,公式能够表示为:
P(A∪B)=P(A)+P(B)
根据以上试验结果,可得重复试验的几率公式为:
重复试验对于下一章咱们要学习的二项分布的理解很是有帮助,因此必定要理解。若是不是特别的理解,你能够如今把上边掷骰子的状况修改为为4颗骰子掷6次,每一次出现两个1的状况画图从新按照我们上边的思路梳理一下,相信你就已经可以掌握了。
练习题:
如今有5道4选1的问题。A同窗对这5道题目彻底不会,但在乱答的状况下,可以答对一半以上的几率是多少,用代码实现一下。对象
import itertools import numpy as np """ 题目解析:答对一半以上的状况分别为3题,4题和5题 不用考虑其顺序,答对任意题目均可以,因此这是一个组合的问题 """ # 声明一个函数来求组合问题 def get_binomial_coefficient(n, k): return len(list(itertools.combinations(np.arange(n), k))) # 每题答对的几率 P_true = 1 / 4 # 每题答错的几率 P_false = 3 / 4 # 求答对0到5题的组合状况 # 答对0题的组合状况 zero = get_binomial_coefficient(5, 0) # 答对1题的组合状况 one = get_binomial_coefficient(5, 1) # 答对2题的组合状况 two = get_binomial_coefficient(5, 2) # 答对3题的组合状况 three = get_binomial_coefficient(5, 3) # 答对4题的组合状况 four = get_binomial_coefficient(5, 4) # 答对5题的组合状况 five = get_binomial_coefficient(5, 5) # # # 答对一半以上的几率(答对3题、4题、5题) last = three * pow(P_true, 3) * pow(P_false, 2) + four * pow(P_true, 4) * pow(P_false, 1) + five * pow(P_true, 5) * pow( P_false, 0) print(last)
学霸的世界:有一两个不太肯定的,蒙一下吧,考完了很没信心,感受考得不怎么样,结果是除了蒙的,其余的都对了,数学140分。
学渣的世界:好多不会的,我感受选这个就应该对,毕竟蒙对的经验很丰富,感受考得还能够,结果是会的马虎作错了,蒙的就对了一个,数学89分,啪啪打脸。
根据几率结果可知,乱答看似几率还不错,但实际运算出来后几率低的可怜,因此每次乱答后,实际得分总比想象中的得分低。
在之前,咱们表示a1到a5的和会这样写:S5 = a1 + a2 + a3 + a4 + a5。同理,若是咱们要表示a1到a10的和会这样写:S10 = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10。若是咱们要表示a1到a1000的和咱们会这样写S1000 = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + …… + a1000。可是中间的……总给人一种很差的感受,就像咱们在学习二项定理时的表达方式,总感受特别的冗长。为了解决这个问题,咱们就引入了Σ(读西格玛)符号,也能够叫作求和符号。像上边的表示a1到a1000的和咱们能够这样表达:
Σ(读西格玛)符号在数学中很是的常见,在之后的学习中,你也几乎能够在任意一个算法模型中见到这个符号,因此它的特色也必定要掌握。
Σ可使用分配率,咱们一块儿来看一个例子:
下面咱们一块儿来学习一下几个关于Σ的计算公式,记住它们,之后你的计算将会很是的方便。
公式一及其证实过程以下:
公式二及其证实过程以下:
Σ的计算公式咱们暂时先学习这两个,其余的公式后边用到的时候咱们再来结合着场景进行学习。
终于到了随机变量,随机变量后边就是几率分布的知识了,随机变量在人工智能领域中的应用很是的广泛。首先说一下随机变量的分类,随机变量分为离散型随机变量和连续型随机变量。离散型随机变量的基本定义就是在实数范围内取值并不连续,或者说他的取值不是一个区间,而是一些固定的值。连续型随机变量则相反,它的取值是一个区间,在实数范围内是连续的。
仍是举个例子比较形象,请看下面的示例:
离散型随机变量:一次掷20个硬币,k个硬币正面朝上,k是随机变量,k的取值只能是天然数0,1,2,…,20,而不能取小数3.五、无理数√20,于是k是离散型随机变量。
连续型随机变量:公共汽车每15分钟一班,某人在站台等车时间x是个随机变量,x的取值范围是[0,15),它是一个区间,从理论上说在这个区间内可取任一实数3.五、√20等,于是称这随机变量是连续型随机变量。
伯努利分布也被称为“零一分布”或“两点分布”。从名字上,咱们就可以看出来,伯努利分布中事件的发生就两种状况。伯努利分布指的是一次随机试验,结果只有两种。生活中这样的场景不少,抛硬币是其中一个,咱们抛一次硬币,其结果只有正面或反面。或某一个事件的成功和失败,病情的康复或未康复等等。
咱们用字母x来表示随机变量的取值,而且它的几率计算公式为:
P(x=1) = p,P(x=0) = 1-p
当x=1时,它的几率为p,当x-0时,它的几率为1-p,咱们就称随机变量x服从伯努利分布。
练习:
甲和乙,两我的用一个均匀的硬币来赌博,均匀的意思就是不存在做弊行为,硬币抛出正面和反面的几率各占一半。硬币抛出正面时,甲输给乙一块钱,抛出反面时,乙输给甲一块钱。咱们来用Python实现这一过程和输赢的总金额呈现的分布状况。
分析:
咱们用数字1来表示抛得的结果为正面,用数字-1来表示抛得的结果为反面。为了呈现出几率分布的状况,咱们须要有足够多的人来参与这个游戏,而且让他们两两一组来进行对决。
# 导入 matplotlib库,用来画图,关于画图咱们后边会有专门的章节进行讲解 import matplotlib.pyplot as plt # 导入numpy import numpy as np n_person = 200 n_times = 500 t = np.arange(n_times) # 建立包含1和-1两种类型元素的随机数组来表示输赢 # *2 -1 是为了随机出1 和-1,(n_person, n_times)表示生成一个200*500的二维数组 steps = 2 * np.random.random_integers(0, 1, (n_person, n_times)) - 1 # 计算每一组的输赢总额 amount = np.cumsum(steps, axis=1) # 计算平方 sd_amount = amount ** 2 # 计算全部参加赌博的组的平均值 average_amount = np.sqrt(sd_amount.mean(axis=0)) print(average_amount) # 画出数据,用绿色表示,并画出平方根的曲线,用红色表示 plt.plot(t, average_amount, 'g.', t, np.sqrt(t), 'r') plt.show()
离散型随机变量最多见的分布就是二项分布,咱们仍是以掷骰子为例子来开始这一章节的知识讲解。好比咱们拥有一个骰子,那么每掷一次骰子的取值可能性为一、二、三、四、五、6,这些取值每一次的可能性都为六分之一,由于每一次掷骰子的行为都是独立的,第一次的结果并不影响第二次的任何行为和结果,这也叫几率的独立性。
总结一下,它一共有两个特色:
如今有两我的A和B在进行某种对决,瓶子里有两个红球,一个白球,从里面随机抽取,抽到红球A获胜,抽到白球B获胜,抽完球再放进去。显然,A获胜的几率为2/3,在这种状况下,A能赢的次数就是一个随机变量了,而这个随机变量是如何分布的呢?
假设对局3次,A能赢的次数为x,则x的值有多是0、一、二、3中的一个,关于其分别出现的几率,咱们能够用反复试验的几率来进行求解(这其实就是3重伯努利试验)。
几率计算结果以下:
将x的几率分布整理成表,并替换成二项系数以下图:
这就是二项分布的典型例子啦。通常来讲,成功几率为p的试验,独立重复n次后的成功次数为X的几率分布,被称为关于发生几率为p、次数为n的二项分布。
这中状况下,X=k(k=0、一、二、…、n)的几率为n次重复中有k次成功(一次成功几率为p),整理后的公式以下:
那么二项分布又与伯努利分布是什么样的关系呢?看着好像感受有一些类似的地方,这种结果为成功或失败,胜或负等,结果是二选一的试验,被称为伯努利试验。在伯努利试验中,已知其中一个结果发生的几率(多数取成功的几率)时,此伯努利试验重复n次(也叫n重伯努利试验)时,其事件发生的次数(成功次数)遵循二项分布。若是二项分布中的试验次数变成了1次,那么这就叫作伯努利试验了,其随机变量是服从二项分布的。因此伯努利分布是二项分布在n=1时的特例,这就是它们的关系了。
最后总结一下二项分布,以下图:
如今假设咱们有两个事件,事件A和事件B。当事件B发生时,事件A发生的几率,这就是条件几率的理解。条件几率公式是:
P(A|B) = P(A∩B)÷P(B)
这个公式看似有点抽象,但若是咱们把它变形为 P(B) * P(A|B) = P(A∩B),**就很好理解,P(B)表示事件B发生的几率,肯定了事件B发生的几率再乘以P(A|B)天然就是事件A和事件B同时发生的几率。P(A|B)就是事件B发生时事件A发生的几率,P(A∩B)指的是事件A和事件B同时发生的几率。
同理,可得:
P(B|A) = P(A∩B)÷P(A)
把两个公式变形:
P(A∩B) = P(B) * P(A|B)
P(A∩B) = P(A) * P(B|A)
便可推导出:
P(A|B) = P(B|A) * P(A) / P(B)
这就是简单贝叶斯公式和它的推导过程,贝叶斯定理在人工智能领域但是很是重要的知识点,将来你会学到不少贝叶斯模型的,好比高斯贝叶斯、多项式贝叶斯、伯努利贝叶斯等等的分类器。
练习:
如今假设一天之中,我饿了的几率是10%,我饿了而且在吃饭的几率是50%,我吃饭的几率是40%
问:我吃饭的时候饿了的几率。
把我饿了看做事件A,则P(A) = 10%,把我吃饭的几率看做事件B,则P(B) = 40%,已知P(B|A) = 50%,则P(A|B) = P(B|A) * P(A) / P(B) = 0.5 * 0.1 / 0.4 = 12.5%
全几率但是几率论中很是重要的知识点,也关系着后边咱们对贝叶斯定理进行深刻的推导。那么什么又是全几率呢?
先从一个故事开始讲解一下,拿上班的道路选择举例说明吧。
我天天上班一共有4条路能够选择,咱们如今把这4条路编成号码,分别是1号路到4号路。我天天会选择不一样的路进行上班,来碰一下本身运气。如今我天天选择1号路上班的几率是20%,2号路的几率是30%,3号路的几率是10%,4号路的几率是40%。可是北京的路很糟糕,尤为是上班的高峰期,每一条路都有可能拥堵。如今1号路堵的几率为30%,2号路堵的几率是40%,3号路堵的几率是50%,4号路堵的几率是25%。一旦发生拥堵的状况我必定会迟到,如今来求一下我上班不迟到的几率。
这道题目首先要理解的就是若是我想要上班不迟到,那么路上就不能遇到拥堵的状况,也就是咱们如今要把拥堵的几率,转换成为不拥堵的几率。那么对应的把拥堵的几率换算成不拥堵的几率就是1号路不堵的几率为70%,2号路不堵的几率是60%,3号路不堵的几率是50%,4号路堵的不几率是75%。换算完成后,下一步就是计算出我选择了其中一条路,而且这条路没有发生拥堵的几率。
首先我选择1号路的几率是20%,也就是0.2,而且1号路不拥堵的几率为70%,就是0.7,那么这件事情发生的几率就是0.20.7,结果等于0.14。这里有两个事件,事件A是我选择了1号路,事件B是1号路不拥堵,那么能够用P(AB)来进行几率的表示。也就是P(AB)=0.14,当我选择了1号路,而且一号路不拥堵的几率是0.14。我选择2号路的几率是0.3,2号路不拥堵的几率是0.6,这个时候我把事件A当作是2号路不拥堵,事件B当作是我选择了2号路,那么就能够写成P(AB)=0.18。那么如今咱们来看一下我选择了3号路,而且3号路不堵的几率吧,就是0.10.5 = 0.05。同理,我选择了4号路,而且4号路不堵的几率是0.4*0.75 = 0.3。那么最终我上班不迟到的几率就是0.14+0.18+0.05+0.3=0.67。
以上就是全几率的计算过程。咱们来总结一下全几率公式。这里咱们把上班不迟到的这件事情叫作事件A,它能够表示为P(A)。选择上班路线的事件叫作事件B,那么4条路的选择几率分别能够表示为P(B1)=0.二、P(B2)=0.三、P(B3)=0.一、P(B4)=0.4。那么分别对应着4条路,而且选择后它们不堵的几率能够表示为P(A|B1)=0.七、P(A|B2)=0.六、P(A|B3)=0.五、P(A|B4)=0.75。
也就是说,我上班不迟到的全几率的计算方法就是
P(A)=P(A|B1)P(B1)+P(A|B2)P(B21)+P(A|B3)P(B3)+P(A|B4)P(B4)
**
以上只有4种状况的发生,那么针对于n中状况的全几率公式,咱们能够这样写P(A)=P(A|B1)P(B1) + P(A|B2)P(B2) + ... + P(A|Bn)P(Bn),进一步简化公式,用求和符号Σ(西格玛)来进行表示就是:
以上这就是全几率公式和他的推导过程。
上面的章节咱们分别学习了简单贝叶斯公式和全几率公式,如今咱们把全几率公式A和B作一个互换,可得:
把如今的P(B)带入到简单贝叶斯公式中,并替换P(B),可得:
这个最终的公式就叫作贝叶斯定理,下面咱们用一个经典的题目来练习一下。
有一种疾病,发病率为千分之一。目前的基因检测技术,只要发病了就必定可以检测到。但若是没有发病的话,其误诊的几率为百分之五。这里咱们用阳性表明生病了,这是医院里的检测报告的术语。如今一我的的化验结果呈阳性(结果表明它得病了),求这我的真实患病的几率。
这道题目的解题思路是,首先咱们要列出已知条件:
梳理清楚了三个条件,那么问题是其化验结果呈阳性,其真实的患病几率是多少,其实求的就是P(病|阳性)的值是多少?
P(病|阳性) = 1 * 0.001 / (0.001 * 1 + 0.999 * 0.05) = 0.0196 = 1.96%
这一章到这里就结束了,最后留一个小题目:垃圾邮件筛选
判断邮件标题中包含"购买商品,不是广告",这样一个邮件是垃圾邮件吗?
咱们经过分词技术已经把"购买商品,不是广告"切分为4个单词,分别是购买、商品、不是、广告。
在已知的数据样本中,共有36封邮件。其中的24封邮件为正常邮件,12封邮件为垃圾邮件。其中正常邮件包含"购买"这个词的有2封,包含"商品"的邮件有4封,包含"不是"的邮件有4封,包含"广告"的邮件有5封。
在垃圾邮件中包含"购买"这个词的有5封,包含"商品"的邮件有3封,包含"不是"的邮件有3封,包含"广告"的邮件有3封。注:一封邮件标题能够包含一个或多个关键词。
问题:判断一封新来的邮件,标题是"购买商品,不是广告",是正常邮件仍是垃圾邮件。 思路提示:求的就是P("购买商品,不是广告")P("正常")的几率大仍是P("购买商品,不是广告")P("垃圾")的几率大,谁的几率大结果就是谁。