为了账号安全,请及时绑定邮箱和手机立即绑定

seaborn:选定的 KDE 带宽为 0。无法估计密度

seaborn:选定的 KDE 带宽为 0。无法估计密度

哔哔one 2022-08-25 14:59:11
import pandas as pdimport seaborn as snsser_test = pd.Series([1,0,1,4,6,0,6,5,1,3,2,5,1])sns.kdeplot(ser_test, cumulative=True)上面的代码生成以下 CDF 图形:但是,当该系列的元素被修改为:ser_test = pd.Series([1,0,1,1,6,0,6,1,1,0,2,1,1]) sns.kdeplot(ser_test, cumulative=True)我收到以下错误:值错误:无法将字符串转换为浮点数:“scott”运行时错误:选定的 KDE 带宽为 0。无法估计密度。这个错误是什么意思,我该如何解决它来生成CDF(即使它非常偏斜)。
查看完整描述

4 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

这里发生的事情是Seaborn(或者更确切地说,它用来计算KDE的库 - scipy或statsmodels)并没有设法找出“带宽”,这是计算中使用的扩展参数。您可以手动传递它。我玩了几个值,发现1.5给出了一个与你之前相同比例的图表:

sns.kdeplot(ser_test, cumulative=True, bw=1.5)

另请参阅此处。如果您没有它,值得安装。statsmodels


查看完整回答
反对 回复 2022-08-25
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

如果您不想等待seaborn git更新以稳定版本发布,则可以尝试问题页面中的解决方案之一。特别是henrymartin1的建议,尝试在try/catch块(由hartikainen建议)内手动传递一个小带宽,该块会抓取此特定错误的文本(因此其他错误仍然会被提出):


try:

    sns.distplot(df)

except RuntimeError as re:

    if str(re).startswith("Selected KDE bandwidth is 0. Cannot estimate density."):

        sns.distplot(df, kde_kws={'bw': 0.1})

    else:

        raise re

这对我有用。


查看完整回答
反对 回复 2022-08-25
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您有三种选择可以尝试

第一个:使用默认设置显示 KDE 块

sns.distplot(ser_test, hist = False, rug = True, rug_kws = {'color' : 'r'})

第二:带宽窄的KDE,显示单个概率块

sns.distplot(ser_test, hist = False, rug = True, rug_kws = {'color' : 'r'}, kde_kws = {'bw' : 1})

第三:选择不同的三角形核函数(块状)

sns.distplot(ser_test, hist = False, rug = True, rug_kws = {'color' : 'r'}, kde_kws = {'bw' : 1.5, 'kernel' : 'tri'})


查看完整回答
反对 回复 2022-08-25
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

出现此问题是由于 .statsmodels

无论如何,要解决从0.10.0开始的seaborn版本的问题,只需将arg放置即可。diag_kws={'bw': 1}

尝试找出带宽的最佳值。


查看完整回答
反对 回复 2022-08-25
  • 4 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信