所以我的数据是
X = [[T1],[T2] ..]其中Tn是第n个用户的时间序列。
我想使用DBSCAN方法使用python中的scikit-learn库来聚类这些时间序列。当我尝试直接拟合数据时,我得到所有对象的输出为-1,具有各种值的epsilon和min-points。
正确的处理方法是什么?
这是我的代码:
db = DBSCAN(eps=0.3,min_samples=10)
db.fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
答案 0 :(得分:1)
Epsilon很难选择"随机搜索"。
这是一个距离阈值 - 您需要知道时间序列的典型距离。现在,你的epdilon显然太小了,因为你的数据集中的一切都是噪音。
在基于地图的应用程序中,可以知道什么是好的值,例如"半径1英里"。但是对于你的时间序列,距离怎么样?您可能还不知道使用哪种距离函数。
在最初的DBSCAN论文中,作者提出了一种基于k距离图选择epsilon的简单方法。