我所说的“批量处理”是指一次处理所有事实的静态数据集(如 CSV 中的数据)以提取知识。当“在线”时,它使用实时后备存储:事实会在发生时添加(“X 购买 Y”),并且对此实时数据进行查询(“您会向一个正在使用的人推荐什么”)。现在正在看 y 吗?”)。
我(错误)使用了“实时”一词,但我并不意味着结果必须在固定时间内出现。 ('''编辑:将上面的实时替换为在线''')
我想到了一个使用实时数据的推荐引擎。然而,我遇到的所有在线资源(例如 SO 问题)在实时数据挖掘包和批量处理数据挖掘包之间没有区别。我必须单独搜索:
- Carrot2 从 Lucene/Solr 和其他实时数据集(在线)读取
- Knime 对静态文件进行计划执行(批量)
- 在 Hadoop 上运行的 Mahout(以及 future 基于 Pregel 的 Giraph)(在线?)
- 与 Cassandra 集成的商业软件包(在线?)
什么是在线数据挖掘包?
文献中没有区分在线处理包和批量处理包是否有原因?或者所有实际的数据挖掘本质上都是批量操作?
最佳答案
对于某些算法,有可用的在线版本。例如,对于 LOF(局部异常值因子),有一个在线变体。我相信k-means也有在线变体(事实上,最初的MacQueen版本可以被视为“在线”,尽管大多数人通过重复直到收敛将其变成离线版本),但问题见下文与 k 参数。
但是,在线操作通常会带来巨大的性能成本。每小时在快照上运行完整算法而不是不断更新结果会更快。想想互联网搜索引擎。大多数大型搜索引擎仍然不允许“在线”查询,而是查询最后构建的索引,可能是一天或更长时间前。
此外,在线操作需要大量的额外工作。计算距离矩阵很容易,但通过添加和删除列来在线更新距离矩阵并同步所有相关结果则困难得多。一般来说,大多数数据挖掘结果都太复杂,无法执行此操作。例如,计算数据流的平均值很容易。但“通常没有已知的解决方案可以在不重新运行昂贵的过程的情况下更新结果”。在其他情况下,您甚至需要更改算法参数。所以在某个时候,一个新的集群可能会形成。然而,k-means 并不意味着出现新的簇。所以本质上,你不能只编写 k-means 的在线版本。这将是一个不同的算法,因为它需要动态修改输入参数“k”。
通常,算法已经在线或离线。并且软件包无法将离线算法转变为在线算法。
关于data-mining - 在线(而不是批量处理)数据挖掘包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649720/