KDE 处理大数据时速度很慢
Posted
技术标签:
【中文标题】KDE 处理大数据时速度很慢【英文标题】:KDE is very slow with large data 【发布时间】:2015-03-26 06:38:50 【问题描述】:当我尝试制作一个按密度着色的散点图时,它需要很长时间。
可能是因为数据的长度比较大。
这基本上是我的做法:
xy = np.vstack([np.array(x_values),np.array(y_values)])
z = gaussian_kde(xy)(xy)
plt.scatter(np.array(x_values), np.array(x_values), c=z, s=100, edgecolor='')
作为附加信息,我必须补充一点:
>>len(x_values)
809649
>>len(y_values)
809649
是否有其他选择可以获得相同的结果但速度更快?
【问题讨论】:
您是否测试过是scatter
函数本身运行缓慢,还是运行plt.show
或plt.savefig
时出现运行缓慢?
标题具有误导性。您正在为大型数据集执行KDE
。
完全正确的 cel,缓慢发生在 z = gaussian_kde(xy)(xy)
我改变它
@newPyUser 你用什么代替了gaussian_kde
?你说过你会改变它。
降低 KDE 的带宽,使用更快的内核(例如线性)并且不要用散点图绘制 80000 个点。
【参考方案1】:
我建议绘制数据样本。 如果样本足够大,您应该得到相同的分布。 确保绘图与整个数据集相关也很容易,因为您可以简单地获取多个样本并在它们之间进行比较。
【讨论】:
【参考方案2】:不,没有好的解决方案。
每个点都要准备好,画一个圆,大概会被其他点遮住。
我的技巧:(注意这些点可能会稍微改变输出)
获取最小值和最大值,并将图像设置为这样的大小,这样图形就不需要重做了。
尽可能多地删除数据:
重复数据
以选定的精度(例如浮点数)进行转换并删除重复数据。您可以使用点的一半大小(或图形分辨率,如果您想要原始外观)来计算精度。
更少的数据:更快的速度。删除比在图表中绘制一个点(将被覆盖)快得多。
对于大型数据集,热图通常更有趣:它提供了更多信息。但就你而言,我认为你的数据仍然太多。
注意:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html#scipy.stats.gaussian_kde 也有一个很好的例子(只有 2000 分)。无论如何,这个页面也使用了我的第一点。
【讨论】:
以上是关于KDE 处理大数据时速度很慢的主要内容,如果未能解决你的问题,请参考以下文章