Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python scikit DBSCAN:错误的坐标或群集_Python_Dbscan - Fatal编程技术网

Python scikit DBSCAN:错误的坐标或群集

Python scikit DBSCAN:错误的坐标或群集,python,dbscan,Python,Dbscan,我正在写DBSCAN,遇到了一些奇怪的问题 这是我的密码: 第一部分有一个问题,如果我添加X=StandardScaler().fit\u transform(X)结果的坐标是错误的!但如果我没有添加这段代码,它将始终是一个集群(但结果的坐标是正确的!)。我尝试调整esp或MINU样本,但没有改变 dataSet = [] fileIn = open('data') for line in fileIn.readlines(): lineArr = line.strip().split(

我正在写DBSCAN,遇到了一些奇怪的问题

这是我的密码:

第一部分有一个问题,如果我添加
X=StandardScaler().fit\u transform(X)
结果的坐标是错误的!但如果我没有添加这段代码,它将始终是一个集群(但结果的坐标是正确的!)。我尝试调整esp或MINU样本,但没有改变

dataSet = []
fileIn = open('data')
for line in fileIn.readlines():
    lineArr = line.strip().split('\t')
    dataSet.append([float(lineArr[0]), float(lineArr[1])]) 
numSamples = len(dataSet)
X = np.array(dataSet) 
X = StandardScaler().fit_transform(X)
(增补) (无)

第二个问题是,我试图绘制我计算的坐标,但我不知道为什么它显示的结果是如此错误

clusters = [np.mean(X[labels == i],axis=0) for i in range(n_clusters_)]

outliers = X[labels == 0]
print(clusters)

for i in range(n_clusters_):
    plt.plot(clusters[i],'*',markersize=20)

unique_labels = set(labels)
colors = [plt.cm.Spectral(each)
          for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
    if k == -1:
        # Black used for noise.
        col = [0, 0, 0, 1]

    class_member_mask = (labels == k)

    xy = X[class_member_mask & core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o',             markerfacecolor=tuple(col),markeredgecolor='k', markersize=14)
    xy = X[class_member_mask & ~core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),markeredgecolor='k', markersize=6)
plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()

请帮帮我谢谢你

您显然需要为您的坐标系选择合适的ε。如果缩放数据,ε将不再相同。你会发现一个更简单的方法(但这不是“合适的”解决方案)就是简单地使用未标度的数据计算平均值。但是DBSCAN集群的方法无论如何都不可靠

根据轴判断,可能需要将ε减少100倍


由于你的数据显然是坐标,你应该使用哈弗斯线距离,因为地球不是平的,根据对你的问题有意义的距离选择ε。精确的缩放可能有点棘手。它可能是弧度,所以你需要将英里转换成弧度来转换距离。

你显然需要为你的坐标系选择合适的epsilon
。如果缩放数据,ε将不再相同。你会发现一个更简单的方法(但这不是“合适的”解决方案)就是简单地使用未标度的数据计算平均值。但是DBSCAN集群的方法无论如何都不可靠

根据轴判断,可能需要将ε减少100倍


由于你的数据显然是坐标,你应该使用哈弗斯线距离,因为地球不是平的,根据对你的问题有意义的距离选择ε。精确的缩放可能有点棘手。可能是弧度,所以你需要将英里转换成弧度来转换距离。

你的点是什么坐标系?你算出来了吗?你的点是什么坐标系?你算出来了吗?你算出来了吗?重新投影到本地笛卡尔坐标系也是一个选项(OP仍然需要一个ε)他实际上可以使用原始数据计算平均值,而不是重新投影(DBSCAN本身不做任何坐标计算)。但这并不能解决标准定标器引入的失真问题。重新投影到局部笛卡尔坐标系也是一种选择(OP仍然需要一个ε),而不是重新投影(DBSCAN本身不做任何坐标计算),他确实可以使用原始数据计算平均值。但这并不能解决标准定标器带来的失真问题。
clusters = [np.mean(X[labels == i],axis=0) for i in range(n_clusters_)]

outliers = X[labels == 0]
print(clusters)

for i in range(n_clusters_):
    plt.plot(clusters[i],'*',markersize=20)

unique_labels = set(labels)
colors = [plt.cm.Spectral(each)
          for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
    if k == -1:
        # Black used for noise.
        col = [0, 0, 0, 1]

    class_member_mask = (labels == k)

    xy = X[class_member_mask & core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o',             markerfacecolor=tuple(col),markeredgecolor='k', markersize=14)
    xy = X[class_member_mask & ~core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),markeredgecolor='k', markersize=6)
plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()