Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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 获取KDE的稀疏区域_Python_Dataframe_Scipy_Kernel Density_Anomaly Detection - Fatal编程技术网

Python 获取KDE的稀疏区域

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>哪个区域考虑“稀疏”,哪些“密集”可以是非常主观的。这在很大程度上取决于数据的含义。

我有一个20k实数的数组,我使用
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,这将直接为您提供值。这个答案有用吗?