计算机科学和Python编程导论-第10课

参考教材《Python编程导论》第15章随机程序、概率和分布,第17章抽样和置信区间

In [1]: import random

In [2]: def rollDie():
   ...:     return random.choice([1,2,3,4,5,6])
   ...: 

In [8]: random.choice(('N','T'))
Out[8]: 'N'

In [3]: rollDie()
Out[3]: 3

In [4]: def rollN(n):
   ...:     result = ''
   ...:     for i in range(n):
   ...:         result = result + str(rollDie())
   ...:     print(result)
   ...:     

In [5]: rollN(100)
4644532166235321621544123622461126365231421534331361666212521532344115436511543415536226132222556624

In [11]: def flip(numFlips):
    ...:     """假设numFlips是一个正整数"""
    ...:     heads = 0
    ...:     for i in range(numFlips):
    ...:         if random.choice(('H', 'T')) == 'H':
    ...:             heads += 1
    ...:     return heads/numFlips
    ...: def flipSim(numFlipsPerTrial, numTrials):
    ...:     """假设numFlipsPerTrial和numTrials是正整数"""
    ...:     fracHeads = []
    ...:     for i in range(numTrials):
    ...:         fracHeads.append(flip(numFlipsPerTrial))
    ...:     mean = sum(fracHeads)/len(fracHeads)
    ...:     return mean
    ...: 

In [12]: flipSim(10, 1)
Out[12]: 0.5

In [13]: print('Mean =', flipSim(10, 1))
Mean = 0.6

In [14]: print('Mean =', flipSim(10, 1))
Mean = 0.6

In [15]: print('Mean =', flipSim(10, 1))
Mean = 0.2

In [16]: print('Mean =', flipSim(10, 1))
Mean = 0.4

In [17]: print('Mean =', flipSim(10, 100))
Mean = 0.49400000000000005

In [18]: print('Mean =', flipSim(10, 100))
Mean = 0.522

In [19]: print('Mean =', flipSim(100, 100000))
Mean = 0.5000537000000042

In [20]: print('Mean =', flipSim(100, 100000))
Mean = 0.5001523000000002

In [22]: import pylab

In [23]: def regressToMean(numFlips, numTrials):
    ...:     #获取每次实验(抛掷numFlips次硬币)中正面向上的比例
    ...:     fracHeads = []
    ...:     for t in range(numTrials):
    ...:         fracHeads.append(flip(numFlips))   #注意这里调用的是前面的函数flip()
    ...:     #找出具有极端结果的实验,以及这些实验的下一次实验
    ...:     extremes, nextTrials = [], []
    ...:     for i in range(len(fracHeads) - 1):
    ...:         if fracHeads[i] < 0.33 or fracHeads[i] > 0.66:
    ...:             extremes.append(fracHeads[i])
    ...:             nextTrials.append(fracHeads[i+1])
    ...:     #绘制结果
    ...:     pylab.plot(range(len(extremes)), extremes, 'ko',
    ...:         label = 'Extreme')
    ...:     pylab.plot(range(len(nextTrials)), nextTrials, 'k^',
    ...:         label = 'Next Trial')
    ...:     pylab.axhline(0.5)
    ...:     pylab.ylim(0, 1)
    ...:     pylab.xlim(-1, len(extremes) + 1)
    ...:     pylab.xlabel('Extreme Example and Next Trial')
    ...:     pylab.ylabel('Fraction Heads')
    ...:     pylab.title('Regression to the Mean')
    ...:     pylab.legend(loc = 'best')
    ...: 

In [24]: regressToMean(15, 40)
均值回归.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容