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.showplt.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 处理大数据时速度很慢的主要内容,如果未能解决你的问题,请参考以下文章

utl_file.FCLOSE() 处理大文件时速度很慢

关于mysql当中给数据量特别大的两个表做关联查询的时候解决查询速度很慢的解决方法

NetworkX和Graphscope哪个运算速度更快?

如何解决BI系统性能差响应慢的问题

php+mysql在数据库里数据大的话查询很慢

perl dbi mysql 向表中插入数据速度很慢