【问题标题】:How to fit a poisson distribution with seaborn?如何用 seaborn 拟合泊松分布?
【发布时间】:2016-09-26 19:01:18
【问题描述】:

我尝试将我的数据拟合到泊松分布:

import seaborn as sns
import scipy.stats as stats

sns.distplot(x, kde = False, fit = stats.poisson)

但我收到此错误:

AttributeError: 'poisson_gen' 对象没有属性 'fit'

其他分布(伽马等)运行良好。

【问题讨论】:

标签: scipy seaborn poisson


【解决方案1】:

Poisson distribution(在 scipy 中实现为scipy.stats.poisson)是discrete distribution。 scipy 中的离散分布没有fit 方法。

我对@9​​87654324@ 函数不是很熟悉,但它似乎假设数据来自连续分布。如果是这种情况,那么即使scipy.stats.poisson 有一个fit 方法,传递给distplot 也不是一个合适的分布。


问题标题是“如何用 seaborn 拟合泊松分布?”,所以为了完整起见,这里有一种方法来绘制数据及其拟合图。 seaborn 仅用于条形图,使用@mwaskom 的建议使用seaborn.countplot。拟合实际上很简单,因为泊松分布的最大似然估计只是数据的平均值。

首先,导入:

In [136]: import numpy as np

In [137]: from scipy.stats import poisson

In [138]: import matplotlib.pyplot as plt

In [139]: import seaborn

生成一些数据来处理:

In [140]: x = poisson.rvs(0.4, size=100)

这些是x 中的值:

In [141]: k = np.arange(x.max()+1)

In [142]: k
Out[142]: array([0, 1, 2, 3])

使用seaborn.countplot 绘制数据:

In [143]: seaborn.countplot(x, order=k, color='g', alpha=0.5)
Out[143]: <matplotlib.axes._subplots.AxesSubplot at 0x114700490>

泊松参数的最大似然估计只是数据的平均值:

In [144]: mlest = x.mean()

使用poisson.pmf()得到预期概率,乘以数据集的大小得到预期计数,然后使用matplotlib作图。条形是实际数据的计数,圆点是拟合分布的预期计数:

In [145]: plt.plot(k, poisson.pmf(k, mlest)*len(x), 'go', markersize=9)
Out[145]: [<matplotlib.lines.Line2D at 0x114da74d0>]

【讨论】:

  • “它还可以 (...) 在数据上绘制估计的 PDF。”是的,这似乎是假设。 PDF(概率密度函数)意味着一个连续的随机变量。
  • 我想说distplot 可以显示离散分布,但可能需要调整几个参数。 countplot 可能是更好的选择(请确保使用 order=)。
  • @mwaskom 感谢您的提示。我在答案中添加了使用countplot 生成的图。
  • @WarrenWeckesser 非常好!
  • 这真的帮助了我,@WarrenWeckesser。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 2016-11-10
  • 2023-03-13
  • 2019-08-15
  • 2011-11-01
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多