Scikit learn 预计算矩阵在集群中的dbscan中占用大量内存

Scikit learn 预计算矩阵在集群中的dbscan中占用大量内存,scikit-learn,cluster-computing,dbscan,Scikit Learn,Cluster Computing,Dbscan,我的scieniao中有4000万个数据集。DBS在sklean中能支持这么大的数据集吗?下面是我的代码 result=[] for line in open("./raw_data1"): #for line in sys.stdin: tagid_result = [0]*10 line = line.strip() fields = line.split("\t") if len(fields)<6:

我的scieniao中有4000万个数据集。DBS在sklean中能支持这么大的数据集吗?下面是我的代码

result=[]
for line in open("./raw_data1"):
#for line in sys.stdin:
        tagid_result = [0]*10
        line = line.strip()
        fields = line.split("\t")
        if len(fields)<6:
                continue
        tagid = fields[3]
        tagids = tagid.split(":")
        for i in tagids:
                tagid_result[tagid2idx[i]] = 1
        result.append(tagid_result)

distance_matrix = pairwise_distances(X, metric='jaccard')
#print (distance_matrix)
dbscan = DBSCAN(eps=0.1, min_samples=1200, metric="precomputed", n_jobs=-1)
db = dbscan.fit(distance_matrix)
for i in range(0,len(db.labels_)):
        print (db.labels_[i])
result=[]
对于处于打开状态的行(“/原始数据1”):
#对于sys.stdin中的行:
tagid_结果=[0]*10
line=line.strip()
字段=行分割(“\t”)

如果len(fields)DBSCAN本身不需要数据作为矩阵,只需要线性内存

不幸的是,sklearn的作者决定实现DBSCAN,这与原始文章有所不同。这导致它们的实现可能会使用更多的内存。在像你这样的情况下,这些决定可能有缺点

对于Jaccard距离,可以很好地加速DBSCAN的邻域搜索,例如使用反向索引。但即便如此,如果您自己实现DBSCAN的“教科书”版本,那么一次只需要计算一行