开发者社区> 问答> 正文

怎么求分布的参数?python

怎么求分布的参数?python

展开
收起
云计算小粉 2018-05-10 20:10:56 2444 0
1 条回答
写回答
取消 提交回答
  • 阿里云用户

    最大似然估计(MLE)是获得分布参数的点估计的最重要的过程之一。这是您需要开始的。

    分析解决方案:

    跨国公司分布的一个扩展二项式分布为其MLE可以分析获得。请参阅此数学堆栈交换帖(MLE for Multinomial Distribution)以获得完整的分析解决方案。该过程从定义似然函数开始,L(p)以观测数据x(i)为条件,其中p和x是k 类/类别的概率和观察到的出现,并且i = 0,1,... k。它是给定参数集(p)观察一组观测值(x)的可能性的度量:

    L(p)等于:
    1_jpeg

    主要思想是在参数范围(p)上最大化似然函数值。给定总观测值n(即所有类别的出现总和),点估计等于:
    2_jpeg

    
    a.values/a.values.sum()                        # point estimates for p = x/n
    
    # array([[0.        ], [0.02941176], [0.05882353], [0.08823529], 
    #        [0.05882353], [0.02941176], [0.17647059], [0.        ], 
    #        [0.02941176], [0.02941176], [0.20588235], [0.29411765]])

    数值解:

    上述结果也可以用数字方法获得scipy.optimize.minimize。请注意,L(p)是阶乘和指数项的乘积。阶乘项是常数,不依赖于参数值(p),因此不考虑优化。对于指数项,最好执行对数转换以简化目标函数; MLE的常见做法,因为log是单调递增函数。此外,由于scipy.optimize.minimize用于最小化,我们将使用对数变换似然函数的负数。注意 最大化函数值等于最小化其负值。

    import pandas as pd
    import numpy as np
    import scipy.optimize as sciopt
    
    # bounds for parameters to lie between (0,1), 
    # absolute zero (0) for lower bound avoided as log takes an infinite value 
    bnds = [(0.001e-12,1) for i in range(12)]
    
    # Initializing parameters value for optimization
    init_parameters = np.asarray([0.1 for i in range(12)])
    
    # Negative Log Likelihood Function
    neg_log_lik = lambda p: -np.sum([a.values[i]*np.log(p[i]) for i in range(12)])
    
    # Constraint sum(p) = 1
    cons = {'type': 'eq', 'fun': lambda p:  (sum([p[i] for i in range(12)]) - 1) }
    
    # Minimizing neg_log_lik
    results = sciopt.minimize(neg_log_lik, x0 = init_parameters, 
                              method='SLSQP', bounds= bnds, constraints= cons)
    
    results.x                                    # point estimates for p
    
    #   array([1.00000000e-15, 2.94179308e-02, 5.88243586e-02, 8.82394605e-02,
    #          5.88243586e-02, 2.94059735e-02, 1.76454713e-01, 1.00000000e-15,
    #          2.94134577e-02, 2.94135714e-02, 2.05849197e-01, 2.94156978e-01])

    有关上述实现的详细信息,请参阅scipy.optimize.minimize 文档。


    _1_
    不知道对不对

    2019-07-17 22:23:49
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载