dbscan内存不够_使用DBSCAN(大矩阵计算)进行聚类时出现内存错误

我用DBSCAN对数据进行聚类,以去除异常值。由于scikit learn中的DBSCAN实现无法处理几乎1gb的数据,因此计算非常消耗内存。这个问题已经提到了here

下面代码的瓶颈似乎是矩阵计算,它非常消耗内存(矩阵大小:10mln x 10mln)。有没有一种方法可以优化DBSCAN的计算?

我的简要研究表明,为了使计算变得可行,应将矩阵简化为稀疏矩阵。

我的想法是如何解决这个问题:创建并计算稀疏矩阵

计算矩阵的各个部分,并将其保存到文件中,稍后进行合并

对较小的数据子集执行DBSCAN并合并结果

切换到Java并使用ELKI工具

代码:import numpy as np

import pandas as pd

import sklearn

from sklearn.preprocessing import StandardScaler

from sklearn.cluster import DBSCAN

# sample data

speed = np.random.uniform(0,25,1000000)

power = np.random.uniform(0,3000,1000000)

# create a dataframe

data_dict = {'speed': speed,

'power': power}

df = pd.DataFrame(data_dict)

# convert to matrix

df = df.as_matrix().astype("float64", copy = False)

X = data

# normalize data

X = StandardScaler().fit_transform(X)

# precompute matrix of distances

dist_matrix = sklearn.metrics.pairwise.euclidean_distances(X, X)

# perform DBSCAN clustering

db = DBSCAN(eps=0.1, min_samples=60, metric="precomputed", n_jobs=-1).fit(dist_matrix)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值