DBSCAN中的参数估计

Riy*_*yaz 7 cluster-analysis data-mining dbscan

我需要根据不同介词的分布(如agentive,instrumental,time,place等)找到自然发生的名词类.我尝试使用k-means聚类但帮助较少,但效果不好,我所寻找的类有很多重叠(可能是因为类的非球形形状和k-means中的随机初始化) ).

我现在正在使用DBSCAN,但我无法理解此聚类算法中的epsilon值和迷你点值.我可以使用随机值,还是需要计算它们.任何人都可以帮忙.特别是对于epsilon,至少如果我需要的话,如何计算它.

Ano*_*sse 8

使用您的领域知识选择参数.Epsilon是一个半径.您可以将其视为最小簇大小.

显然随机值不会很好.作为一种启发式方法,您可以尝试查看k距离图; 但它也不是自动的.

首先要做的是为数据选择一个好的距离函数.并执行适当的规范化.

至于"minPts",它又取决于您的数据和需求.一个用户可能想要与另一个用户非常不同的值.当然,minPts和Epsilon是耦合的.如果你加倍epsilon,你将大致需要将你的minPts增加2 ^ d(对于欧几里德距离,因为这就是超球体的体积增加!)

如果你想要很多细小的细节簇,请选择一个小的碎片.如果您想要更大和更少的聚类(以及更多噪音),请使用更大的碎片.如果您根本不需要任何群集,请选择大于数据集大小的minpts ...


TAH*_*TAH 6

为您的数据集及其所属领域正确选择 DBSCAN 算法的超参数非常重要。

\n
\n

eps超参数

\n

为了确定eps数据集的最佳值,请使用 K 最近邻方法,如这两篇论文中所述:Sander 等人。1998 年舒伯特等人。2017 年(两篇论文均来自 DBSCAN 的原始作者)。

\n

下面是他们方法的精简版本:\n如果开始时有 N 维数据,则选择n_neighborsin sklearn.neighbors.NearestNeighbors等于 2xN - 1,并找出 K 个最近邻的距离(K 为 2xN - 1)数据集中的每个点。对这些距离进行排序并绘制它们以找到将噪声点(具有高 K 最近邻距离)与最有可能落入一个簇的点(具有相对较低 K 最近邻距离)分开的“肘部”。这个“肘部”发生的距离就是你的最佳点eps

\n

下面是一些 Python 代码来说明如何执行此操作:

\n
def get_kdist_plot(X=None, k=None, radius_nbrs=1.0):\n\n    nbrs = NearestNeighbors(n_neighbors=k, radius=radius_nbrs).fit(X)\n\n    # For each point, compute distances to its k-nearest neighbors\n    distances, indices = nbrs.kneighbors(X) \n                                       \n    distances = np.sort(distances, axis=0)\n    distances = distances[:, k-1]\n\n    # Plot the sorted K-nearest neighbor distance for each point in the dataset\n    plt.figure(figsize=(8,8))\n    plt.plot(distances)\n    plt.xlabel(\'Points/Objects in the dataset\', fontsize=12)\n    plt.ylabel(\'Sorted {}-nearest neighbor distance\'.format(k), fontsize=12)\n    plt.grid(True, linestyle="--", color=\'black\', alpha=0.4)\n    plt.show()\n    plt.close()\n\n\nk = 2 * X.shape[-1] - 1 # k=2*{dim(dataset)} - 1\nget_kdist_plot(X=X, k=k)\n\n
Run Code Online (Sandbox Code Playgroud)\n

下面是上面代码的结果图示例:\n

\n

从上图可以推断,eps对于给定数据集,可以假设 的最佳值约为 22。

\n

注意:我强烈建议读者参考上面引用的两篇论文(尤其是 Schubert 等人,2017 年),以获取有关如何避免使用 DBSCAN 以及其他聚类算法时的几个常见陷阱的其他提示。

\n

网上有几篇文章 \xe2\x80\x93\xe2\x80\x93 DBSCAN Python 示例:Epsilon (EPS)和CoronaVirus Pandemic的最佳值和 Google Mobility Trend EDA \xe2\x80\x93\xe2\x80\x93基本上使用相同的方法,但没有提到 K 或 K 值的关键选择n_neighbors2xN-1 的关键选择。

\n
\n

min_samples超参数

\n

至于超参数,我同意接受的答案min_samples中的建议。此外,选择此超参数最佳值的一般准则是应将其设置为特征数量的两倍(Sander 等人,1998)。例如,如果数据集中的每个点都有 10 个特征,则要考虑的起始点为 20。min_samples

\n