擅长:python、mysql、java
<p>scikit learn中旧版本的DBSCAN将计算一个完整的距离矩阵。</p>
<p>不幸的是,计算距离矩阵需要<code>O(n^2)</code>内存,这可能是内存不足的地方。</p>
<p>较新版本(您使用哪个版本?)of scikit learn应该能够在没有距离矩阵的情况下工作;至少在使用索引时是这样。对于500.000个对象,您需要使用索引加速,因为这会将运行时从<code>O(n^2)</code>减少到<code>O(n log n)</code>。</p>
<p>我不知道scikit learn在其索引中对大地距离的支持程度。<a href="http://elki.dbs.ifi.lmu.de/" rel="noreferrer">ELKI</a>是我所知道的唯一一个可以使用R*-tree索引来加速大地测量距离的工具;这使得执行此任务非常快(特别是在批量加载索引时)。你应该试一试。</p>
<p>看看<a href="http://scikit-learn.org/stable/modules/neighbors.html" rel="noreferrer">Scikit learn indexing documentation</a>,然后尝试设置<code>algorithm='ball_tree'</code>。</p>