zoukankan      html  css  js  c++  java
  • 深入浅出统计学 第四五章 离散概率的计算与分布

    离散概率计算与分布的应用

    在原书的这两章离散概率计算与分布的应用,重点在于概念的理解和公式的记忆.
    而对于整本书而言,四五六章其实都作为第七章:三种离散概率分布,第八,九章,正态分布(连续概率分布之一)做铺垫.
    主要包括以下内容:
    1. 期望与方差的计算
    2. 线性变换与独立观察值变换有关内容
    3. 贝叶斯定理

    其中特别要注意的1,2点,在之后的内容中都将频繁使用这些内容.
    而贝叶斯定理虽然很重要,但是对于之后的内容影响不大,如果有需要的话.可以进行扩展阅读贝叶斯算法,贝叶斯优化等.
    其中贝叶斯算法算是机器学习比较基本的内容,去年写过一个实现纯Python原生语言的的朴素贝叶斯法分类器的Python3 实现,如果有兴趣可以尝试用numpy和pandas改写一下.

    本文的编码内容较少,包括生成随机离散概率分布与相应计算,以及一个简易的封装类两个部分.

    用Python代码计算计算器

    生成随机变量

    # 首先使用numpy生成随机变量
    import numpy as np
    np.random.seed(1024)
    data = np.random.randint(1,5,size = 301)

    计算概率分布

    假设我们的数据为所有可能结果的数据集,这里我们通过上面生成的数据,计算概率分布.
    或者我们也可以直接生成一个格式一致的pandas.core.series.Series类型数据,然后再利用之后的代码进行计算

    import pandas as pd
    value_count = pd.Series(data).value_counts()
    value_count = value_count/len(pd.Series(data))
    value_count # 注意此时的value为(pandas.core.series.Series)
    2    0.292359
    1    0.242525
    3    0.235880
    4    0.229236
    dtype: float64
    

    计算期望与方差

    exp= sum(value_count.index * value_count)
    var =  sum(((value_count.index - exp) ** 2) * value_count)
    print("exp: {0:.3f}, var: {1:.3f}".format(exp, var))
    
    # 线性变换: aX+b
    a = 2
    b=0.5
    exp , var = a * exp + b, a * a * var
    print("exp: {0:.3f}, var: {1:.3f}".format(exp, var))
    # 独立观察值 nX
    n = 10
    print("exp: {0:.3f}, var: {1:.3f}".format(n * exp, n * var))
    exp: 2.452, var: 1.191
    exp: 5.404, var: 4.765
    exp: 54.037, var: 47.648
    

    对代码进行封装

    封装后的代码可以计算数据集期望方差,计算一个确定的离散概率分布的方差,或者计算其相关的线性变换.
    而对于独立观察值没有封装,直接将与默认版本结果 * n 即可

    class Discrete_probability_distribution:
    
        def fit(self, list, index=None):
            """
            :param list: type:list;  The set of all the results;
            :return: pandas.core.series.Series, Discrete probability distribution
            """
            import pandas as pd
            self.data = pd.Series(list).value_counts() / len(pd.Series(list))
            if index != None:
                self.data.index = index
    
            return self.data
    
        def transfrom(self, a=1.0, b=0.0):
            """
            Support the calculation of expectation and variance of itself and linear change
            :param a: int,Linear variation parameter:a;
            :param b: int,Linear variation parameter:b;
            :return:float,float;Expectation , variance ;
            """
    
            self.exp = sum(self.data.index * self.data)
            self.var = sum(((self.data.index - self.exp) ** 2) * self.data)
    
            return a * self.exp + b, a * a * self.var
    
        def fit_transfrom(self, list, a=1.0, b=0.0):
            """
            fit and transfrom data,running function fit and function transfrom in one function
            :param list: type:list;  The set of all the results;
            :param a: int,Linear variation parameter:a;
            :param b: int,Linear variation parameter:b;
            :return:pandas.core.series.Series,float,float; Discrete probability distribution,Expectation , variance ;
            """
    
            self.fit(list)
            exp, var = self.transfrom(a=a, b=b)
    
            return self.data, exp, var

    使用封装代码

    我们首先计算一下之前的数据集,然后在利用封装的函数计算《深入浅出统计学》第227页的例题

    discrete = Discrete_probability_distribution()
    data_transfrom, exp, var = discrete.fit_transfrom(data)
    print("data: 
    ", data_transfrom)
    print("exp: {0:.3f}, var: {1:.3f}".format(exp, var))
    data: 
     2    0.292359
    1    0.242525
    3    0.235880
    4    0.229236
    dtype: float64
    exp: 2.452, var: 1.191
    
    # 计算 P225 页例题
    import pandas as pd
    Ser = pd.Series([0.8, 0.1, 0.07, 0.03])
    Ser.index = [-0.5, 1.5, 4.5, 9.5]
    discrete.data = Ser
    exp2, var2 = discrete.transfrom()
    print("exp: {0:.3f}, var: {1:.3f}".format(exp2, var2))
    exp3, var3 = discrete.transfrom(b = -0.5)
    print("exp: {0:.3f}, var: {1:.3f}".format(exp3, var3))
    exp: 0.350, var: 4.428
    exp: -0.150, var: 4.428
    
  • 相关阅读:
    Docker和k8s的区别与介绍
    NFS网络文件系统详解
    NFS文件系统及搭建NFS共享服务
    Tomcat 端口配置,及原理详解
    svn使用教程
    buff/cache内存占用过多
    关于xcode:如何在Objective-C中使用符号断点获取参数
    iOS开发消除编译警告
    建模的能力才是一个人和核心能力
    android sutdio 环境搭建
  • 原文地址:https://www.cnblogs.com/fonttian/p/9819785.html
Copyright © 2011-2022 走看看