小编Jam*_*esT的帖子

scikit-learn DBSCAN内存使用情况

更新:最后,我选择用于聚类我的大型数据集的解决方案是Anony-Mousse在下面提出的解决方案.也就是说,使用ELKI的DBSCAN实现我的聚类而不是scikit-learn.它可以从命令行运行,并通过适当的索引,在几个小时内完成此任务.使用GUI和小样本数据集来计算您想要使用的选项,然后前往城镇.值得研究.Anywho,请继续阅读我原始问题的描述和一些有趣的讨论.

我有一个包含大约250万个样本的数据集,每个样本都有35个特征(浮点值),我正在尝试聚类.我一直在尝试使用scikit-learn的DBSCAN实现,使用曼哈顿距离度量和从数据中提取的一些小随机样本估计的epsilon值.到现在为止还挺好.(这里是摘录,供参考)

db = DBSCAN(eps=40, min_samples=10, metric='cityblock').fit(mydata)
Run Code Online (Sandbox Code Playgroud)

我现在的问题是我很容易耗尽内存.(我目前正在使用16 GB RAM的机器)

我的问题是,DBSCAN是否在运行时动态计算成对距离矩阵,那是什么在吞噬我的记忆?(250万^ 2)*8字节显然是愚蠢的大,我会理解.我应该不使用这种fit()方法吗?更一般地说,有没有办法绕过这个问题,或者我一般在这里咆哮错误的树?

如果答案结果明显,请道歉.我已经困惑了几天.谢谢!

附录:如果有人能更明确地解释我fit(X)fit_predict(X)我之间的区别,我也会感激 - 我担心我不太明白.

附录#2:可以肯定的是,我只是在一台拥有~550 GB RAM的机器上尝试了这个并且它仍然爆炸,所以我觉得DBSCAN可能会尝试制作成对距离矩阵或者我明显不想要的东西去做.我想现在最大的问题是如何阻止这种行为,或找到更适合我需要的其他方法.谢谢你在这里与我合作.

附录#3(!):我忘了附上追溯,就在这里,

Traceback (most recent call last):
  File "tDBSCAN.py", line 34, in <module>
    db = DBSCAN(eps=float(sys.argv[2]), min_samples=10, metric='cityblock').fit(mydata)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/base.py", line 329, in fit_predict
    self.fit(X)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 186, in fit
    **self.get_params())
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 69, in dbscan
    D = pairwise_distances(X, metric=metric)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line 651, in pairwise_distances
    return func(X, Y, **kwds)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis data-mining dbscan scikit-learn

20
推荐指数
3
解决办法
1万
查看次数

Python 2.6.1和2.7.3之间的语法差异?

所以我使用以下代码片段作为更大项目的一部分,

with open(file) as fin:
    rows = ( line.split() for line in fin )
    d = { row[0]:row[1:] for row in rows }
Run Code Online (Sandbox Code Playgroud)

对于制表符分隔的输入,file.它在我的个人计算机上运行良好,但当我将它移动到共享计算集群时,它不喜欢第3行,d = { row[0]:row[1:] for row in rows }.我一直试图找出原因.

我唯一能想到的就是Python版本的差异.我正在运行2.7.3,共享集群运行2.6.1,但这似乎不太合理 - 我是否错过了一些非常明显的东西?我感谢你们的任何建议.

这是错误的文本(在集群上的Python 2.6.1中),

File "Alphabet.py", line 22
  d = { row[0]:row[1:] for row in rows }
                         ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

syntax syntax-error

2
推荐指数
1
解决办法
7475
查看次数

从制表符分隔文件的列表字典

我正在尝试将制表符分隔的文本文件加载到python程序中.它具有以下格式,

AAAAAA    1234    5678     90AB    QQQQ    JKL1
BBBBBB    QWER    TYUI     ASDF    QQQQ
CCCCCC    ZXCV    1234     PPPP
 ...
ZZZZZZ    1111
Run Code Online (Sandbox Code Playgroud)

简而言之,每行的列数可变,但总是至少两列,每行中的每列都是唯一的.我希望将第一列用作键,并将其余列加载到列表中,并使用指向它的键.我试着像其他线程中建议的那样查看csv模块,但我还没有找到让它适合我的方法.所以,是的,如果这应该更加明显,这是一个新手问题.

python csv dictionary list

1
推荐指数
1
解决办法
1万
查看次数