首页 > 解决方案 > 如何为可视化目的反向缩放 numpy 数组?

问题描述

因此,我正在进行聚类并进行缩放。我现在希望我的可视化(集群图)使用原始数据点,即在它们被缩放之前。我还没有遇到一个好的解决方案。我希望有人能帮帮忙。

#convert df='data' to numpy array for clustering
data=data.values
X=data

#Scale
X = StandardScaler().fit_transform(X)

# Compute DBSCAN
db = DBSCAN(eps=0.25, 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)
n_noise_ = list(labels).count(-1)

#Internal indeces measure for performance
print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X, labels))


# Plot result
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, excluding noise cluster: %d' % n_clusters_)
plt.xlabel('A', fontsize=18)
plt.ylabel('B', fontsize=16)
plt.ylim(ymax = 5, ymin = -0.5)
plt.xlim(xmax = 5, xmin = -0.5)
plt.show();

输出:它显示集群图,但轴上有缩放值。 在此处输入图像描述

问题
1. 我怎样才能用它的原始值来绘制它?
2. 在进行 DBSCAN 聚类时,我是否遗漏了什么?ie 如何确保我的集群性能良好?我没有基本事实,所以我只使用了 Shilouette 指标,但我对我的模型的性能真的没有信心。如果我不想在我的情况下进行预测而是仅描述当前状态,那么基本事实的目的是什么?

标签: python-3.xnumpydbscan

解决方案


只需绘制原始数据即可。

即 plot data, not X,如果那是你想要的。

集群性能本质上是主观的。如果您了解一些您以前不知道的数据,那就太好了。由于无法在方程式中捕获您“知道”或“有用”的内容,因此无法可靠地评估 8t。任何评估都只是一种启发式。轮廓不是一个好的选择,因为它会惩罚噪声和非凸簇。内部度量就像聚类算法一样。外部措施计算他们找到您已经知道的东西的程度 - 对实际数据都没有好处。外部措施在科学论文中很受欢迎,但可以证明该算法并非完全垃圾。你假装你不知道你知道什么,然后检查算法是否仍然可以找到那个模式。

那么你需要做什么?调查:它看起来有用吗,是否值得尝试使用它。然后继续:尝试使用集群来解决您的问题。如果它有助于解决您的问题,那就太好了。


推荐阅读