我正在尝试使用DBSCAN学习实现来检测异常。它适用于小型数据集(500x6)。但是,当我尝试使用大型数据集(180000 X 24)时,它会遇到内存问题。我能做些什么来克服这个问题吗?
from sklearn.cluster import DBSCAN
import pandas as pd
from sklearn.preprocessing import StandardScaler
import numpy as np
data = pd.read_csv("dataset.csv")
# Drop non-continuous variables
data.drop(["x1", "x2"], axis = 1, inplace = True)
df = data
data = df.as_matrix().astype("float32", copy = False)
stscaler = StandardScaler().fit(data)
data = stscaler.transform(data)
print "Dataset size:", df.shape
dbsc = DBSCAN(eps = 3, min_samples = 30).fit(data)
labels = dbsc.labels_
core_samples = np.zeros_like(labels, dtype = bool)
core_samples[dbsc.core_sample_indices_] = True
# Number of clusters in labels, ignoring noise if present.
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
print('Estimated number of clusters: %d' % n_clusters_)
df['Labels'] = labels.tolist()
#print df.head(10)
print "Number of anomalies:", -1 * (df[df.Labels < 0]['Labels'].sum())
发布于 2016-09-06 05:34:59
根据您正在处理的问题的类型,可以在DBSCAN构造函数中使用此参数:
leaf_size
:int,可选(默认为30)叶大小传递给BallTree或cKDTree。这会影响构造和查询的速度,以及存储树所需的内存。最优值取决于问题的性质。
如果这不适合您的需要,这个问题已经解决了here,您可以尝试使用ELKI的DBSCAN实现。
https://stackoverflow.com/questions/39340949
复制相似问题