首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >学习:用DBSCAN预测新的点

学习:用DBSCAN预测新的点
EN

Stack Overflow用户
提问于 2015-01-07 15:27:59
回答 6查看 30.1K关注 0票数 47

我使用DBSCAN来使用Scikit-Learn (Python2.7)对一些数据进行聚类:

代码语言:javascript
运行
复制
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(random_state=0)
dbscan.fit(X)

但是,我发现没有内置函数(除了"fit_predict")可以将新的数据点Y分配给原始数据X中标识的集群。K-均值方法有一个“预测”函数,但我希望能够对DBSCAN进行同样的操作。就像这样:

代码语言:javascript
运行
复制
dbscan.predict(X, Y)

因此,密度可以从X推断出来,但返回值(集群赋值/标签)只适用于Y。据我所知,这种能力在R中是可用的,所以我假设它在Python中也是可用的。我只是找不到这方面的任何文件。

此外,我还试图搜索为什么DBSCAN可能不被用于标记新数据的原因,但我没有找到任何理由。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-01-07 21:32:19

聚类不是分类。

聚类是未标记的。如果你想把它压缩到预测思维中(这不是最好的主意),那么它本质上是没有学习的预测。因为没有标记的训练数据可用于聚类。它必须根据所看到的情况为这些数据制作新的标签。但是您不能在单个实例上这样做,您只能“批量预测”。

但是DBSCAN是有问题的:

random_state:numpy.RandomState,可选: 用于初始化中心的生成器。默认为numpy.random。

DBSCAN不“初始化中心”,因为DBSCAN中没有中心。

几乎可以将新的点分配给旧集群的唯一聚类算法是k均值(以及它的许多变体)。因为它使用以前的迭代聚类中心执行"1NN分类“,所以更新中心。但是大多数算法不像k-方法那样工作,所以你不能复制这个。

如果你想分类新的点,最好是对你的聚类结果进行分类器的训练。

R版本可能做的是,使用1NN分类器进行预测;如果1NN距离大于epsilon,则使用额外的规则分配点,如果它们的1NN距离大于epsilon,那么mabye也只使用核心点。也许不是。

得到DBSCAN的论文,它不讨论“预测”IIRC。

票数 25
EN

Stack Overflow用户

发布于 2018-07-25 10:12:46

在这里,一个稍微不同和更有效的实现。另外,不取eps半径内的第一个最佳核点,而是取最接近样本的核心点。

代码语言:javascript
运行
复制
def dbscan_predict(model, X):

    nr_samples = X.shape[0]

    y_new = np.ones(shape=nr_samples, dtype=int) * -1

    for i in range(nr_samples):
        diff = model.components_ - X[i, :]  # NumPy broadcasting

        dist = np.linalg.norm(diff, axis=1)  # Euclidean distance

        shortest_dist_idx = np.argmin(dist)

        if dist[shortest_dist_idx] < model.eps:
            y_new[i] = model.labels_[model.core_sample_indices_[shortest_dist_idx]]

    return y_new
票数 7
EN

Stack Overflow用户

发布于 2019-07-30 19:20:08

虽然它不是完全相同的算法,但您可以使用sklearn对新的点进行近似预测。见这里

它的工作方式如下:

代码语言:javascript
运行
复制
clusterer = hdbscan.HDBSCAN(min_cluster_size=15, prediction_data=True).fit(data)
test_labels, strengths = hdbscan.approximate_predict(clusterer, test_points)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27822752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档