在 python 中调整 DBSCAN 以便它读取我的数据集

Posted

技术标签:

【中文标题】在 python 中调整 DBSCAN 以便它读取我的数据集【英文标题】:Adjust DBSCAN in python so that it reads in my dataset 【发布时间】:2016-06-30 15:59:27 【问题描述】:

我一直在使用此代码尝试从我的文件中聚类我的纬度和经度点。但是我认为它实际上是在创建随机点,而不是实际使用我自己的点来查找集群。

我仍然不确定这个算法是如何工作的。如果有人能阐明我将如何正确读取数据而不是创建我认为 make_blob 正在做的随机点,那将不胜感激

print(__doc__)

import numpy as np

from sklearn.cluster import DBSCAN
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
from sklearn.preprocessing import StandardScaler


##############################################################################
# Generate sample data
input = np.genfromtxt(open("dataset_import_noaddress.csv","rb"),delimiter=",", skip_header=1)
coordinates = np.delete(input, [0,1], 1)

X, labels_true = make_blobs(n_samples=750, centers=coordinates, cluster_std=0.4,
                            random_state=0)

X = StandardScaler().fit_transform(X)

##############################################################################
# Compute DBSCAN
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_

# 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_)
print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels))
print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))
print("Adjusted Rand Index: %0.3f"
      % metrics.adjusted_rand_score(labels_true, labels))
print("Adjusted Mutual Information: %0.3f"
      % metrics.adjusted_mutual_info_score(labels_true, labels))
print("Silhouette Coefficient: %0.3f"
      % metrics.silhouette_score(X, labels))

##############################################################################
# Plot result
import matplotlib.pyplot as plt

# Black removed and is used for noise instead.
unique_labels = set(labels)
colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))
for k, col in zip(unique_labels, colors):
    if k == -1:
        # Black used for noise.
        col = 'k'

    class_member_mask = (labels == k)

    xy = X[class_member_mask & core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col,
             markeredgecolor='k', markersize=14)

    xy = X[class_member_mask & ~core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=col,
             markeredgecolor='k', markersize=6)

plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()

我知道这可能是一个微不足道的问题,但我真的只是希望找出是否有一种方法可以简单地使用我的数据集,而不是创建一个随机数据集。坐标包含我所有点的矩阵

【问题讨论】:

【参考方案1】:

是的,当然是创建随机点。

这就是函数被称为make_blobs 的原因,因为它生成blob。它也存在于模块 sklearn.datasets.samples_generator 中,进一步强调它生成样本数据集

它还会重新调整您的数据,但您应该使用半正弦距离。

您是否考虑过将数据加载到 ELKI 等工具中? 您似乎不太热衷于编写代码。从互联网上随机下载你不理解的示例代码并运行通常不是一个好主意。

【讨论】:

再次感谢您的帮助,我对编码真的很陌生,所以我很难找到像这样的算法。我将看看 ELKI 工具包。我希望尽管使用此代码,在创建随机数据的部分中,我可以用我的文件中的点替换生成的随机点,这绝对不可能吗? 先有随机点的好处是 0。您不能重用大部分示例代码!一切可重用的都是方法DBSCAN

以上是关于在 python 中调整 DBSCAN 以便它读取我的数据集的主要内容,如果未能解决你的问题,请参考以下文章

Python读取csv文件做dbscan分析

深度解读 python 实现 dbscan算法

使用python分离DBSCAN中每个集群的坐标(3D坐标)

在大型 .csv 文件上应用 DBSCAN 会导致磁盘使用量超过 100% 并挂起我的电脑 [重复]

Python机器学习——DBSCAN聚类

在 python 中的 sklearn 中绘制 DBSCAN 中的特定点