随机森林分类器分割错误
Posted
技术标签:
【中文标题】随机森林分类器分割错误【英文标题】:Random Forest Classifier Segmentation Fault 【发布时间】:2013-12-12 10:43:32 【问题描述】:一直在尝试在包含约 50,000 个条目的数据集上运行 RF 分类器,其中包含 20 个左右的标签,我认为这应该没问题,但在尝试拟合时我不断遇到以下问题...
Exception MemoryError: MemoryError() in 'sklearn.tree._tree.Tree._resize' ignored
Segmentation fault (core dumped)
数据集已通过 TfidfVectorizer,然后是 n=100 的 TruncatedSVD 进行降维。 RandomForestClassifier 以 n_jobs=1 和 n_estimators=10 运行,试图找到它可以工作的最小点。该系统使用 4GB 的 RAM 运行,RF 过去曾在具有更多估计器等的类似数据集上工作。Scikit-learn 在当前版本 0.14.1 上运行。
有什么建议吗?
谢谢
【问题讨论】:
尝试在更少量的数据或更低的 n 上运行它。看看是否出现同样的错误。我也有 4GB 的 RAM,并且我在一些相当大的数据集(不是这么大)上使用了随机森林,并且从未遇到过这个错误。请告诉我你在降低它时是否仍然遇到同样的错误。 如果它是可复制的,你应该在sckikit bug tracker上报告它。 我会尝试减小@RyanSaxe 建议的数据集的大小。我已经在比这大得多的数据集上运行 RF,但可以访问大量 RAM 我同意 IanSR 的观点,即这是一个错误。然而,随机森林算法所需的内存不仅取决于样本的数量和数据的维度,还取决于数据的复杂性。如果每棵决策树有更多的节点,那么森林就会变得更大。一个非常小的森林的极端情况是数据可以由单个决策节点完美分离。 【参考方案1】:段错误总是错误。如果malloc
在RandomForest
内部失败,那么它应该被捕获,我最好的猜测是这就是发生在你身上的事情。正如评论者已经说过的,您应该将此报告给 RandomForest 错误跟踪器。但是malloc
可能由于内存不足而失败,因此请减少维度、减少训练数据集大小、获取更多内存或在具有更多内存的系统上运行。 p>
【讨论】:
***.com/questions/4220965/…【参考方案2】:尝试使用“psutil”库(链接:https://pypi.python.org/pypi/psutil/0.5.0)。借助这个库,您可以使用以下功能监控系统的可用内存量:
psutil.phymem_usage()
这将帮助您检测您的系统是否没有足够的内存或者是您的代码有问题。
【讨论】:
以上是关于随机森林分类器分割错误的主要内容,如果未能解决你的问题,请参考以下文章