Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python查找已知数据的多项式分布参数?_Python_Scipy_Scikit Learn_Statistics_Multinomial - Fatal编程技术网

如何使用python查找已知数据的多项式分布参数?

如何使用python查找已知数据的多项式分布参数?,python,scipy,scikit-learn,statistics,multinomial,Python,Scipy,Scikit Learn,Statistics,Multinomial,我刚开始学习Python。这是一个数据框: a=pd.DataFrame({'A1':[0,1,2,3,2,1,6,0,1,1,7,10]}) 现在我认为这些数据服从多项式分布。所以,12个数字意味着12个类别0,1,2…的频率。。。。例如,类别0的发生率为0。所以,我希望在给定这些数据的情况下找到多项式的所有参数。最后,我们得到了多项式的最佳参数,或者我们可以说每个数的最佳概率。比如说, category: 0, 1, 2, 3, 4... weig

我刚开始学习Python。这是一个数据框:

a=pd.DataFrame({'A1':[0,1,2,3,2,1,6,0,1,1,7,10]})
现在我认为这些数据服从多项式分布。所以,12个数字意味着12个类别0,1,2…的频率。。。。例如,类别0的发生率为0。所以,我希望在给定这些数据的情况下找到多项式的所有参数。最后,我们得到了多项式的最佳参数,或者我们可以说每个数的最佳概率。比如说,

category:    0,      1,     2,     3,      4...
weights:    0.001,  0.1,   0.2,   0.12,   0.2...
所以,我不需要测试数据来预测。这不是一种分类。作为一个新手,我甚至不确定我是否应该使用scipy.stats.multinomial或sklearn模型,或者其他一些技术。那么,有谁能给我一些帮助吗

最大似然估计MLE是获得分布参数点估计的最重要步骤之一。这是你需要开始的

分析溶液:

多国分布是二项式分布的一个扩展,其最大似然估计可以解析地得到。有关完整的分析解决方案,请参阅此数学堆栈交换帖子。该过程开始定义似然函数,LP条件下观察到的数据席,其中P和X是概率和观察到的K类/类别和I = 0,1,…K的出现。它是观测一组观测值的可能性的度量x给定参数集p:

Lp等于:

其主要思想是在参数p的范围内最大化似然函数值。给定总观测值n,即所有类别的事件总数,点估计值等于:

数值解:

上述结果也可以使用scipy.optimize.minimize进行数值计算。请注意,Lp是阶乘项和指数项的乘积。阶乘项是一个常数,不依赖于参数值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])
有关上述实施的详细信息,请参阅文档。

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

分析溶液:

多国分布是二项式分布的一个扩展,其最大似然估计可以解析地得到。有关完整的分析解决方案,请参阅此数学堆栈交换帖子。该过程开始定义似然函数,LP条件下观察到的数据席,其中P和X是概率和观察到的K类/类别和I = 0,1,…K的出现。它是观测一组观测值的可能性的度量x给定参数集p:

Lp等于:

其主要思想是在参数p的范围内最大化似然函数值。给定总观测值n,即所有类别的事件总数,点估计值等于:

数值解:

上述结果也可以使用scipy.optimize.minimize进行数值计算。请注意,Lp是阶乘项和指数项的乘积。阶乘项是一个常数,不依赖于参数值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])
有关上述实施的详细信息,请参阅文档