当我运行 scikit 的 dbscan 算法时,出现内存错误。
我的数据约为20000*10000,它是一个二进制矩阵。
(也许这样的矩阵不适合使用DBSCAN。我是机器学习的初学者。我只是想找到一种不需要初始簇号的聚类方法)
不管怎样,我发现了 scikit 的稀疏矩阵和特征提取。
http://scikit-learn.org/dev/modules/feature_extraction.html http://scikit-learn.org/dev/modules/feature_extraction.html
http://docs.scipy.org/doc/scipy/reference/sparse.html http://docs.scipy.org/doc/scipy/reference/sparse.html
但我仍然不知道如何使用它。在DBSCAN的规范中,没有提到使用稀疏矩阵。难道不允许吗?
如果有人知道如何在 DBSCAN 中使用稀疏矩阵,请告诉我。
或者你可以告诉我更合适的聚类方法。
The scikit
不幸的是,DBSCAN 的实现非常困难naive。需要重写它以考虑索引(球树等)。
截至目前,它显然会坚持计算完整的距离矩阵,这会浪费lot的记忆。
我可以建议你自己重新实现 DBSCAN 吗?这相当简单,存在很好的伪代码,例如在维基百科和原始出版物中。它应该只有几行,然后您就可以轻松地利用您的数据表示。例如。如果您已经有一个稀疏表示的相似图,那么执行“范围查询”通常相当简单(即仅使用满足距离阈值的边)
这里有一个scikit-learn github 中的问题 https://github.com/scikit-learn/scikit-learn/issues/1938他们谈论改进实施。一位用户报告他使用球树的版本快了 50 倍(这并不令我惊讶,我之前见过类似的索引加速 - 当进一步增加数据集大小时,它可能会变得更加明显)。
Update:自从写完这个答案以来,scikit-learn 中的 DBSCAN 版本已经得到了实质性的改进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)