如何使用python查找已知数据的多项式分布参数?
我刚开始学习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
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])
有关上述实施的详细信息,请参阅文档