内容

1避免NxN矩阵

中使用群集函数的最佳建议clusterExperiment对于大型数据集是避免计算任何\ (NxN \)距离或相似矩阵。它们需要很长时间来计算,并且需要大量的内存来存储。

1.1聚类程序的选择

计算这样一个矩阵最可能的原因是所使用的聚类例程。像PAM或分层聚类这样的方法使用距离矩阵,对于大型数据集不是很好的选择。

之前的版本2.5.5,如果聚类算法需要,我们的函数会在内部计算一个距离矩阵,用户很难意识到他们选择了一个需要这样一个矩阵的聚类例程。现在我们已经添加了参数makeMissingDiss,如果,将不计算任何所需的距离矩阵,而是返回一个错误。我们建议将此参数设置为以大型数据集作为警告。如果发现遇到错误,请选择不需要\ (NxN \)距离矩阵。

注意,这可能不适用于PAM,因为PAM需要作为输入一个矩阵\ \ (x)(见pam吗?).但是如果一个\ \ (x)矩阵作为输入帕姆函数简单地在内部计算距离矩阵!的选项makeMissingDiss = FALSE可能没有捕捉到这个,因为实际的聚类函数允许使用输入矩阵\ \ (x).(这对于大型数据集来说是不幸的,将来我们可能会改变对PAM中可能输入的分类方式,将其分类为只接受距离矩阵的方法,以便被捕获makeMissingDiss = FALSE.)

类似地,使用任何关于剪影距离的选项将创建一个\ (NxN \)矩阵作为剪影计算的一部分集群包中。这包括findBestK = TRUE论点。这些选项应该只考虑中等大小的数据集,其中的计算(和存储)\ (NxN \)矩阵不是问题。

1.2子抽样和共识聚类

不幸的是,子抽样和共识聚类(与makeConsensus)基于每对样本共享聚类的比例进行聚类操作,该聚类在过去的版本中已被存储clusterExperiment在一个\ (NxN \)矩阵(关于这些方法的解释,请参阅主要的教程小插图)。虽然我们正在研究避免计算这个矩阵的方法,但它们还不能完全避免\ (NxN \)矩阵。

然而,我们有版本2.5.5做了一些基础结构更改,以避免\ (NxN \)矩阵用于子采样和共识聚类(如果用户已经定义了一个聚类函数来做到这一点)。

我们也有版本2.5.5更改了聚类函数,以允许用户请求对来自子采样或中的聚类组合的唯一表示形式进行聚类makeConsensus,大大减小了尺寸\ (NxN \)在实际聚类步骤中使用的矩阵(参见下面)。

1.2.1 "技术细节

在这里,我们记录了一些基础结构更改,以避免\ (NxN \)用于子采样和共识聚类的矩阵。到目前为止,这些实际上还不能提供避免\ (NxN \)计算聚类,但是要建立一个基础结构,用户现在可以提供适当的聚类例程来避免这种情况。

  • 二次抽样:在之前的版本中2.5.5子采样的结果将被保存为一个NxN矩阵,对应于两个样本在整个\ (B \)次级样本。的2.5.5结果被简单地保存为\ (NxB \)矩阵,给出每个子样本中每个样本的(整值)聚类分配。这\ (NxB \)矩阵将需要聚类才能得到任何有趣的东西,而该矩阵的聚类是否需要计算NxN矩阵取决于在mainClusterArgs(见下文)。
  • 共识集群类似地,就版本而言2.5.5makeConsensus命令现在期望集群技术可以直接作用于\ (NxB \)矩阵的聚类,而不是直接计算\ (NxN \)矩阵。同样,这需要一个工作在\ (NxB \)矩阵的聚类,以及该矩阵的聚类是否需要计算NxN矩阵取决于聚类例程(见下面)。
  • 集群的例程\ (NxB \)矩阵虽然我们目前已经建立了一个基础设施,允许直接群集在\ (NxB \)矩阵,从而潜在地避免了计算\ (NxN \)距离矩阵,我们目前没有提供这样的聚类方法。特别是,虽然我们已经更新了许多内置函数来接受这样的输入(由群集函数是否接受inputType = "猫",请参阅ClusterFunctions ?),它们通过简单的内部计算\ (NxN \)矩阵(这不是由makeMissingDiss参数作为被调用的实际群集函数计算它,而不是clusterExperiment基础设施——类似于上面的PAM)。我们正在努力创建一个集群例程来避免这一步;如果用户有这样一个聚类例程,他们可以将这个聚类例程提供给函数(参见主小插图和ClusterFunction ?如何集成用户定义的函数)
  • 对象中删除“副本”\ (NxB \)矩阵但是,我们在内置的聚类函数中实现了一个选项来减少\ (NxB \)a的聚类矩阵\ (MxB \)矩阵,\ \(米)是唯一的这样的矩阵行横跨\ (N \)样本。这意味着makeConsensus,只有\ \(米)独特的簇的组合是簇的;这可能会影响结果,因为它忽略了由每个\ \(米)组合(对于像kmeans这样在样本中取平均值的方法很重要)。然而,它可以显著减小大小,不再需要计算或存储相同聚类样本之间的所有不相似点。要选择此选项,请设置clusterArgs =列表(removeDup = TRUE)在传递给任一方的参数列表中mainClusteringArgssubsampleArgs.对于子抽样的聚类函数,也可以这样做,但可能会导致尺寸的减少少得多。
  • plotCoClustering和coClustering插槽由于这些变化,我们不再只存储一个\ (NxN \)的coClustering槽中ClusterExperiment对象。相反,我们允许任意一种存储\ (NxN \)矩阵或\ (NxB \)矩阵,或者仅仅是聚类的索引组成\ (NxB \)矩阵。这个插槽主要用于plotCoClustering命令(基本上是一个热图\ (NxN \)Matrix),它不太可能用于非常大的数据集。然而,plotCoClustering命令会计算出\ (NxN \)矩阵从\ (NxB \)矩阵,所以应该避免使用大型数据集。

2内存中的数据与HDF5的比较

该包与HDF5 Matrices兼容,这意味着如果给出的数据是对HDF5文件的引用,则该包将运行。然而,代码可以通过将完整的矩阵放入内存来实现这种兼容性。特别是,默认的集群例程与HDF5实现不兼容,这意味着它们必须将完整的数据集放入内存中进行计算。

唯一的例外是调用集群例程(来自同名包)的方法“mbkmeans”。这个包实现了kmeans(“Mini-Batch kmeans”)的一个版本,它真正地与HDF5数据集的结构一起工作,以避免将整个数据集带入内存。“小批处理kmeans”指的是在每次聚类迭代中只使用数据的一部分(一个“批处理”)。的mbkmeans包将它与HDF5文件集成,以及其他格式,这意味着mbkmeans实际上是写入(在C代码中),以便不将整个数据集放入内存,而只将任何特定计算所需的子集(或批处理)放入内存。

不像mbkmeans然而,打包集成在clusterExperiment没有经过测试以确保完整的数据集不会被其他组件无意中带入内存clusterExperiment基础设施。这是一个有待改进的领域。(到目前为止mbkmeans作为一个内置的选项clusterExperiment到目前为止,它只成功地运行了集群例程。)

进一步的评论: