是否有适用于使用稀疏预测器和响应的类似于CART的方法的库?


11

我正在使用R中的gbm包处理一些大型数据集。我的预测变量矩阵和响应向量都很稀疏(即,大多数条目为零)。我希望使用一种可以利用这种稀疏性的算法来构建决策树,就像在这里所做的那样。在该论文中,就像我所遇到的情况一样,大多数项目只有许多可能的功能中的少数,因此,除非数据中另有明确说明,否则它们可以通过假设其项目缺少给定功能来避免大量的计算浪费。我的希望是,通过使用这种算法(然后将增强算法包装在其周围以提高预测精度),我可以获得类似的加速效果。

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

我环顾四周,看来应该是这样的事情:

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

  • 文档分类似乎也是从稀疏特征空间学习的一个有用的领域(大多数文档包含的单词不多)。例如,有一个倾斜的参考稀疏实施C4.5的(一个手推车类算法)在本文中,但不包含代码。

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

提前致谢!


2
不是R,而是Python scikits.learn对稀疏矩阵有越来越多的支持。
chl

@ ch1谢谢。看起来他们还没有添加树方法。 有人正在执行实现,但是我不确定它是否能够使用稀疏数据。不过,我绝对会记住稀疏的SVM方法!
David J. Harris

当您说“类似于CART”时,您是否特别想要决策树或任何类型的预测模型?
Michael McGowan

@Michael-我想要树木,因为我将树木喂食,并且它们之间的差异很大。
David J. Harris

2
我不知道的树木模型,但glmnete1071::svm都支持稀疏Matrix对象。 GAMboost并且GLMboost(来自package GAMboost)也可以。
2012年

Answers:


2

我希望看到它们相对于RF中使用的现代CART实现的稀疏实现的基准。就该领域的进展而言,该论文已经很老了,如果它仍然可以大大提高速度,我会感到惊讶。

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

这在这里这里这里讨论。

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

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


1

任何代码都可能会利用它的机会很小-您宁愿自己编写一些东西。
但是,另一种选择是转换数据以减小数据大小,从而删除冗余信息。很难知道如果没有关于数据的信息,但是也许您可以合并一些您不知道的功能,PCA的某些部分或更改某些描述符的表示?另外,如果您说您的响应也很稀疏,那么在响应中将对象降采样为0是否合理?


谢谢回复。下采样听起来很有趣。目前,由于其他原因,我正在权衡数据的某些方面,但这也可能是一个好主意。但是,为什么您这么说的代码不太可能存在呢?我链接到12年前的一篇论文,该论文似乎已经解决了相同的问题。
David J. Harris

@David简而言之,我觉得这没有道理-这是一个“错误的问题”。稀疏性表明数据的格式极不理想,而更有效的方法是尝试将其转换。您链接的纸张还有其他问题。

恐怕不明白你在说什么。转换数据的形式正是我想要做的,而且据我所知,这正是本文所做的。他们不想列出每种化学品所缺乏的所有功能,而仅列出它所具有的功能。在他们的情况下,这是有道理的,因为大多数化学药品都缺乏大多数功能,就像我的情况一样。因此,他们将特征转换为稀疏矩阵,然后直接在该稀疏矩阵上进行递归分区算法。我正在寻找开源方法来对我的数据执行相同的操作。我想念什么?谢谢
David J. Harris

@David,我认为mbq的意思是,n分之一的大编码(例如,网站/客户等标识符)或存在的化学物质清单对于学习而言通常是非常不好的表示。您最好改用“功能”,例如,对于一个网站,它可能是分类的:商店/新闻/博客体育/技术等
。– seanv507

1

您是否看过R 中的caret包裹?它提供了更易于使用多种机型,包括一些递归分割,如接口rpartctreectree2


我对那些包/函数很熟悉,据我所知,它们都不适合稀疏数据。
David J. Harris

1
插入符对Matrix对象的支持将非常出色,但目前尚不存在。一切都被强制转换为data.frame。
2012年

您可以尝试向开发人员发送电子邮件,并询问他有关此问题。我给他发了电子邮件,他给了他一个有用的答案-max.kuhn [at] pfizer.com
paul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.