Python 获取KDE的稀疏区域
我有一个20k实数的数组,我使用Python 获取KDE的稀疏区域,python,dataframe,scipy,kernel-density,anomaly-detection,Python,Dataframe,Scipy,Kernel Density,Anomaly Detection,我有一个20k实数的数组,我使用pd.DataFrame(scores.plot.kde(figsize=(24,8))得到下面的内核密度估计。我如何纯粹通过编程选择稀疏区域的索引,或者相反地选择密集区域的索引 我目前的方法是np.其中(分数>np.百分位数(分数,99))[0],我非常支持99的这种硬编码,因为它在生产中可能不太有效。一个我不确定如何处理的潜在解决方案是选择密度低于20000的指数 < P>哪个区域考虑“稀疏”,哪些“密集”可以是非常主观的。这在很大程度上取决于数据的含义。
pd.DataFrame(scores.plot.kde(figsize=(24,8))
得到下面的内核密度估计。我如何纯粹通过编程选择稀疏区域的索引,或者相反地选择密集区域的索引
我目前的方法是np.其中(分数>np.百分位数(分数,99))[0]
,我非常支持99
的这种硬编码,因为它在生产中可能不太有效。一个我不确定如何处理的潜在解决方案是选择密度低于20000的指数
< P>哪个区域考虑“稀疏”,哪些“密集”可以是非常主观的。这在很大程度上取决于数据的含义。一个想法是确定一些截止百分位数。下面的示例使用最低的
0.1%
和最高的99.9%
导入matplotlib.pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
df=pd.DataFrame({'score':np.random.randn(2000,10).cumsum(axis=0.ravel()})
分位数([.01,99])
ax=df.plot.kde(图大小=(24,8))
ax.axvline(df['score'].分位数(.001),color='crimson',ls='':')
ax.axvline(df['score'].分位数(.999),color='crimson',ls='':')
ax.set_ylim(ymin=0)#避免kde“漂浮在空气中”
plt.show()
您可以改用scipys KDE,这将直接为您提供值。这个答案有用吗?