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



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

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

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()

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

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

这就是为什么该函数被称为 make_blobs ,因为它会产生斑点。它也存在于模块sklearn.datasets.samples_generator中,这进一步强调它生成样本数据集

它还会重新缩放您的数据,但您应该使用haversine距离。

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

相关内容

  • 没有找到相关文章