用于医学研究的数据表示(NoSQL 数据库?)

数据挖掘 机器学习 nosql mongodb
2022-02-07 09:42:56

问题描述

我在一项研究中有一个大约 10000 名患者的数据集。对于每位患者,我都有一份各种测量值的列表。一些信息是标量数据(例如年龄),一些信息是测量的时间序列,一些其他信息甚至可以是位图。单个记录本身可能很厚(10kB 到 10MB)。数据实际上分两步处理:

  1. 在单个记录(患者)级别进行预处理,即提取原始数据中的一些特征,存储它们。计算时间序列中的一些斜率等。所有这些都可以在个人层面上完成,并且可以很容易地分布。

  2. 在预处理数据(提取的特征)之上,我需要计算一些聚合的东西,例如平均年龄,还有一些机器学习任务。

问题

显然,这非常适合在 Apache Spark(或任何 map-reduce 架构)中解决。在最一般的层面上,我的问题是:什么是最适合这种情况的 NoSQL 数据库?

到目前为止,我已经考虑了两个基本选项:

  1. MongoDB - 利用面向文档的存储,所有内容都在同一个地方。但是,我不确定较大二进制数据(图片、时间序列)的性能。
  2. Cassandra - 这可能有更好的二进制数据存储,但连接将是必要的(即使通过“患者 ID”索引所有数据进行了优化)。
1个回答

我认为您需要更多地定义过程和期望的结果。听起来您需要:

  1. 定义您想要的功能。
  2. 弄清楚如何提取这些特征。
  3. 弄清楚如何存储这些特征。
  4. 将该数据集传递给 ML 模型进行训练。

我会根据数据元素的数量和类型弄清楚您对#3 的确切要求,然后才选择一种数据存储方法。

除非您打算将非结构化文档直接传递给您的模型,否则您不需要 MongoDB 的功能。10,000 条记录很小,但由于您提到要计算患者级别数据的一些汇总统计数据,因此您可能会使用 MySQL 或 SQLite 之类的简单数据。

Spark 和 Map/Reduce 实际上是竞争对手,最近 Spark 抢走了 MR 的焦点。您可能需要一种或另一种来进行特征提取,但对于您描述的其他内容来说,它们可能过于矫枉过正。