【发布时间】:2012-03-28 21:46:58
【问题描述】:
我必须使用 CUDA 开发一种数据挖掘算法。查了很多,发现除了FpGrowth,大部分算法都已经实现了。
你认为这是个好主意吗?你能给我一些关于如何实现它的想法吗?
【问题讨论】:
标签: cuda data-mining
我必须使用 CUDA 开发一种数据挖掘算法。查了很多,发现除了FpGrowth,大部分算法都已经实现了。
你认为这是个好主意吗?你能给我一些关于如何实现它的想法吗?
【问题讨论】:
标签: cuda data-mining
我将回答您的第一个问题:“这是个好主意吗?”。好吧,我认为如果你需要它是个好主意。但是,如果您只是因为尚未完成而想这样做,那么这可能不是一个好主意。
对于第二个问题,请确保您对 FPGrowth 有充分的了解。您可以阅读描述 FPGrowth 的原始论文。您也可以查看“数据挖掘简介”一书。它对 FPGrowth 有一个易于理解的描述。理解好 FPGrowth 之后,就可以看看如何用 CUDA 来实现了……这就是我的建议。
【讨论】:
我找到了一个网页,其中描述了如何绘制 FP 树以及如何从该树中识别频繁模式。您可以访问该网站并阅读信息。
【讨论】:
我不知道 FpGrowth,但我猜你已经阅读了论文(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.162.1209&rep=rep1&type=pdf 等)。我猜你是 CUDA 的新手,这使得实现这种复杂的东西变得相当困难。
使用 CUDA 获得良好性能的关键是大规模统一并行和少量同步。 CUDA Zone http://www.nvidia.com/object/cuda_apps_flash_new.html 有很多很好的例子,什么是有效的,以及如何。学习 CUDA 的一个很好的起点是编程指南http://developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/CUDA_C_Programming_Guide.pdf。
一个常见的问题是“我有这个 C 代码,我如何将它移植到 CUDA”。答案是不要!在 CUDA 中没有指针、没有字符串、没有打印、没有文件,而且你学到的关于高效代码的大部分内容都是错误的。
一种更有前途的方法是以更抽象的方式考虑底层算法。确定可以并行完成的工作,考虑一个好的数据结构(可能涉及大型数组),实现一个原型。依靠像 Thrust http://code.google.com/p/thrust/ 这样的 CUDA 库来获得第一个版本可能会更容易。
关于 FpGrowth,有什么可以并行完成的吗?构建动态树和树遍历一般被认为在 CUDA 中并不容易高效地实现。
【讨论】: