是否有任何库可用于使用稀疏预测变量和响应的类似 CART 的方法?

机器算法验证 r 回归 机器学习 分类 大车
2022-03-07 03:30:41

我正在使用 R 中的 gbm 包处理一些大型数据集。我的预测矩阵和响应向量都非常稀疏(即大多数条目为零)。我希望使用一种利用这种稀疏性的算法来构建决策树,就像这里所做的那样)。在那篇论文中,就像我的情况一样,大多数项目只有许多可能的特征中的一小部分,因此他们能够通过假设他们的项目缺乏给定的特征来避免大量的计算浪费,除非数据明确说明。我希望我可以通过使用这种算法获得类似的加速(然后在它周围包裹一个提升算法以提高我的预测准确性)。

由于他们似乎没有发布他们的代码,我想知道是否有任何开源包或库(任何语言)针对这种情况进行了优化。理想情况下,我想要一些可以直接从 R 的Matrix包中获取稀疏矩阵的东西,但我会尽我所能。

我环顾四周,似乎应该有这种东西:

  • 化学家似乎经常遇到这个问题(我上面链接的论文是关于学习寻找新的药物化合物),但我能找到的实现要么是专有的,要么是高度专业化的化学分析。不过,其中一个可能会被重新利用。

  • 文档分类似乎也是从稀疏特征空间学习有用的领域(大多数文档不包含大多数单词)。例如,在本文中有一个对 C4.5 的稀疏实现(一种类似 CART 的算法)的间接引用,但没有代码。

  • 根据邮件列表,WEKA 可以接受稀疏数据,但与我上面链接的论文中的方法不同,WEKA 并未优化以实际利用它来避免浪费 CPU 周期。

提前致谢!

3个回答

我希望看到他们的稀疏实现与 rf 中使用的现代 CART 实现的基准。就该领域的进展而言,那篇论文已经相当老了,如果它仍然提供显着的加速,我会感到惊讶。

部分原因是在拆分搜索中使用像 Quicksort 这样的智能排序算法可以为接近恒定的特征(包括稀疏特征)提供接近 O(n) 的性能。快速实现还会跟踪某个特性何时在树的分支中变得恒定并且不应再检查。密集特征表示以 cpu 缓存友好的方式提供快速查找,因此您需要一个非常聪明的稀疏表示来赢得 cpu 周期。

这是讨论这里这里这里

实际上,我在我的 rf 包CloudForest中的某个时间点实现了数据的稀疏数据表示,但发现它比数据的密集表示要慢,因此放弃了它,尽管它确实提供了一些内存优势。

我的建议是尝试 scikit learn 或内置于 boosting 的 cloudforest,看看它是否足够快。如果您想做一些非标准的事情,两者都可以使用自定义提升标准进行扩展。(实际上,我最初编写 cloudforest 是为了处理与您所描述的非常相似的大型、高维遗传数据集)。

你看过R中的caret包吗?它提供了一个接口,可以更轻松地使用各种模型,包括一些用于递归分区的模型,例如rpartctreectree2

任何代码都可能有一点机会利用这一点——你宁愿自己写一些东西。
但是,另一种选择是转换数据以减少数据的大小,从而删除冗余信息。如果没有有关您的数据的信息,很难说出如何,但也许您可以合并一些您知道不重叠的特征、它的 PCA 部分或更改某些描述符的表示?另外,如果您说您的响应也很稀疏,那么使用 0 对对象进行下采样可能是合理的吗?