标签: dbscan

在scikit-learn中,DBSCAN可以使用稀疏矩阵吗?

当我运行scikit的dbscan算法时,我得到了内存错误.我的数据大约是20000*10000,它是一个二进制矩阵.

(也许它不适合使用带有这种矩阵的DBSCAN.我是机器学习的初学者.我只是想找到一个不需要初始簇号的簇方法)

无论如何,我发现scikit的稀疏矩阵和特征提取.

http://scikit-learn.org/dev/modules/feature_extraction.html http://docs.scipy.org/doc/scipy/reference/sparse.html

但我仍然不知道如何使用它.在DBSCAN的规范中,没有关于使用稀疏矩阵的指示.不允许吗?

如果有人知道如何在DBSCAN中使用稀疏矩阵,请告诉我.或者你可以告诉我一个更合适的集群方法.

cluster-analysis machine-learning data-mining dbscan scikit-learn

9
推荐指数
2
解决办法
4032
查看次数

在坐标和非空间特征上聚类地理空间数据

假设我将以下数据帧存储为称为坐标的变量,其中前几行如下所示:

   business_lat  business_lng  business_rating
0   19.111841     72.910729           5.
1   19.111342     72.908387           5.
2   19.111342     72.908387           4.
3   19.137815     72.914085           5.
4   19.119677     72.905081           2.
5   19.119677     72.905081           2.
        .             .               .
        .             .               .
        .             .               .
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,此数据是地理空间数据(具有纬度和经度),并且每行都有一个附加值business_ rating,它对应于该行中经纬度处的企业评级。我想对数据进行聚类,其中附近且具有相似评级的企业被分配到同一个集群中。本质上,我需要一个地理空间集群,并附加要求集群必须考虑评级列。

我在网上查看过,但找不到太多解决此问题的方法:只有严格的地理空间聚类(只有要聚类的特征是 latlng)或非空间聚类。

我在下面运行了一个简单的 DBSCAN,但是当我绘制聚类结果时,它似乎没有正确执行我想要的操作。

from sklearn.cluster import DBSCAN
import numpy as np
db = DBSCAN(eps=2/6371., min_samples=5, algorithm='ball_tree', metric='haversine').fit(np.radians(coordinates))
Run Code Online (Sandbox Code Playgroud)

尝试调整 DBSCAN 的参数、对数据进行一些额外的处理或同时使用不同的方法是否会更好?

python cluster-analysis geospatial dbscan scikit-learn

9
推荐指数
1
解决办法
6337
查看次数

使用自定义距离度量对纬度/长度对进行聚类

我正在尝试为scikit-learn DBSCAN实现指定自定义群集功能:

def geodistance(latLngA, latLngB):
    print latLngA, latLngB
    return vincenty(latLngA, latLngB).miles

cluster_labels = DBSCAN(
            eps=500,
            min_samples=max(2, len(found_geopoints)/10),
            metric=geodistance
).fit(np.array(found_geopoints)).labels_
Run Code Online (Sandbox Code Playgroud)

但是,当我打印出距离函数的参数时,它们完全不是我所期望的:

[ 0.53084126  0.19584111  0.99640966  0.88013373  0.33753788  0.79983037
  0.71716144  0.85832664  0.63559538  0.23032912]
[ 0.53084126  0.19584111  0.99640966  0.88013373  0.33753788  0.79983037
  0.71716144  0.85832664  0.63559538  0.23032912]
Run Code Online (Sandbox Code Playgroud)

这就是我的found_geopoints数组的样子:

[[  4.24680600e+01   1.40868060e+02]
 [ -2.97677600e+01  -6.20477000e+01]
 [  3.97550400e+01   2.90069000e+00]
 [  4.21144200e+01   1.43442500e+01]
 [  8.56111000e+00   1.24771390e+02]
...
Run Code Online (Sandbox Code Playgroud)

那么为什么不是距离函数纬度经度对的参数呢?

cluster-analysis dbscan scikit-learn

8
推荐指数
1
解决办法
2416
查看次数

关于spark的DBSCAN:哪个实现

我想在Spark上做一些DBSCAN.我目前发现了2个实现:

我已经使用其github中给出的sbt配置测试了第一个但是:

  • jar中的函数与doc或github上的源代码中的函数不同.例如,我在jar中找不到列车功能

  • 我设法使用fit函数(在jar中找到)运行测试,但是epsilon的错误配置(从小到大)将代码置于无限循环中.

代码:

val model = DBSCAN.fit(eps, minPoints, values, parallelism)
Run Code Online (Sandbox Code Playgroud)

有人设法与第一个图书馆合作吗?

有人测试过第二个吗?

scala cluster-analysis dbscan apache-spark apache-spark-mllib

8
推荐指数
2
解决办法
8083
查看次数

DBSCAN 中预先计算的距离矩阵

阅读周围,我发现可以将预先计算的距离矩阵传递到SKLearn DBSCAN中。不幸的是,我不知道如何通过它进行计算。

假设我有一个包含 100 个元素的一维数组,其中只有节点的名称。然后我有一个 100x100 的 2D 矩阵,每个元素之间的距离(顺序相同)。

我知道我必须这样称呼它:

db = DBSCAN(eps=2, min_samples=5, metric="precomputed")

对于节点之间的距离为 2 且节点簇最少为 5 个的情况。另外,使用“预先计算”来指示使用二维矩阵。但是如何传递计算信息呢?

如果使用 RAPIDS CUML DBScan函数(GPU 加速) ,可能会出现同样的问题。

python dbscan scikit-learn rapids

8
推荐指数
1
解决办法
1万
查看次数

ELTICS实现的OPTICS聚类算法只检测一个聚类

我在ELKI环境中使用OPTICS实现时遇到问题.我在DBSCAN实现中使用了相同的数据,它就像一个魅力.可能我错过了一些带参数的东西,但我无法弄明白,一切似乎都是正确的.

数据是一个简单的300х2矩阵,由3个簇组成,每个簇有100个点.

DBSCAN结果:

DBSCAN的聚类结果

MinPts = 10,Eps = 1

光学结果:

OPTICS的聚类结果

MinPts = 10

cluster-analysis data-mining dbscan elki optics-algorithm

7
推荐指数
1
解决办法
3027
查看次数

DBSCAN中的参数估计

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

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

cluster-analysis data-mining dbscan

7
推荐指数
2
解决办法
7409
查看次数

如何在scikit-learn中扩展输入DBSCAN

是否应该对sklearn.clustering.DBSCAN的输入进行预处理?

在示例http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#example-cluster-plot-dbscan-py中,计算输入样本X之间的距离并进行标准化:

D = distance.squareform(distance.pdist(X))
S = 1 - (D / np.max(D))
db = DBSCAN(eps=0.95, min_samples=10).fit(S)
Run Code Online (Sandbox Code Playgroud)

在v0.14(http://jaquesgrobler.github.io/online-sklearn-build/auto_examples/cluster/plot_dbscan.html)的另一个示例中,完成了一些缩放:

X = StandardScaler().fit_transform(X)
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
Run Code Online (Sandbox Code Playgroud)

我的代码基于后一个示例,并且通过此缩放使印象聚类更好地工作.但是,这种缩放"通过删除均值和缩放到单位方差来标准化特征".我试着找到2d集群.如果我将我的星团分布在一个平方区域 - 让我们说100x100我看到缩放没有问题.然而,如果分布在矩形区域(例如800x200)中,缩放"挤压"我的样本并在一个维度上改变它们之间的相对距离.这会使聚类恶化,不是吗?或者我理解某事.错误?我是否需要应用一些预处理,或者我可以简单地输入我的"原始"数据?

cluster-analysis data-mining dbscan scikit-learn

7
推荐指数
1
解决办法
6390
查看次数

为什么所有labels_都是-1?由 Python 中的 DBSCAN 生成

![在此输入图像描述][1]

\n\n
from sklearn.cluster import DBSCAN\ndbscan = DBSCAN(eps=0.001, min_samples=10) \nclustering = dbscan.fit(X)\n
Run Code Online (Sandbox Code Playgroud)\n\n

示例向量\xef\xbc\x9a

\n\n
array([[ 0.05811029, -1.089355  , -1.9143777 , ...,  1.235167  ,\n    -0.6473859 ,  1.5684978 ],\n   [-0.7117326 , -0.31876346, -0.45949244, ...,  0.17786546,\n     1.9377285 ,  2.190525  ],\n   [ 1.1685177 , -0.18201494,  0.19475089, ...,  0.7026453 ,\n     0.3937522 , -0.78675956],\n   ...,\n   [ 1.4172379 ,  0.01070347, -1.3984257 , ..., -0.70529956,\n     0.19471683, -0.6201791 ],\n   [ 0.6171041 , -0.8058429 ,  0.44837445, ...,  1.216958  ,\n    -0.10003573, -0.19012968],\n   [ 0.6433722 ,  1.1571665 , -1.2123466 , ..., …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis dbscan scikit-learn word2vec

7
推荐指数
1
解决办法
7119
查看次数

为什么 scikit learn 中的 k-means 有预测功能,而 DBSCAN/agglomerative 没有?

K-means 的 Scikit-learn 实现具有predict()可应用于未见过的数据的功能。而DBSCAN和Agglomerative则没有这个predict()功能。

这三种算法都有fit_predict(),用于拟合模型然后进行预测。但是 k-meanspredict()可以直接用于未见过的数据,而其他算法则不然。

我非常清楚有聚类算法,并且根据我的观点,predict()K 均值也不应该存在。

这种差异背后可能的直觉/原因是什么?难道只是因为k-means进行了“1NN分类”,所以才有作用predict()?

cluster-analysis machine-learning k-means dbscan scikit-learn

7
推荐指数
1
解决办法
3233
查看次数