猿问

DBSCAN 参数迭代的子图

我想使用Scikit Learn 的这个 DBSCAN 聚类算法示例进行一些数据探索。我想迭代eps. 因此,我对以下代码进行了不同的修改,该代码从第二个 for 循环中取出最后一个图,格式为右下角。:


print(__doc__)


import matplotlib.pyplot as plt

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


eps = [0.1, 0.2, 0.3, 0.4]


plt.figure(figsize=(15,8))

for i in eps:

    # #############################################################################

    # Generate sample data

    centers = [[1, 1], [-1, -1], [1, -1]]

    X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4,

                                random_state=0)


    X = StandardScaler().fit_transform(X)


    # #############################################################################

    # Compute DBSCAN

    db = DBSCAN(eps=i, 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)


    print('Estimated number of clusters: %d' % n_clusters_)

    print('Estimated number of noise points: %d' % n_noise_)

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


但是,我想看到eps彼此相邻的子图的不同结果。这种格式的种类:


[ ] [ ] [ ] [ ]

附加问题:最后,我还想min_samples对 10、12 和 15进行迭代。如果我是对的,这将需要另一个 for 循环?


波斯汪
浏览 163回答 1
1回答

宝慕林4294392

我解决了我的问题,将定义更改plt.subplot(120 + i*1000 , title=i)为iterator = 0plt.subplot(220 + iterator, title=i)iterator += 1解释一定是因为i正在迭代一个浮点数数组。乘以 1000 可能不会产生完美的 1、2、3、4,但会产生一些接近的结果,仍然保留除零以外的小数。这破坏了子图迭代的逻辑。基本上很简单的编辑,但我昨晚很努力。
随时随地看视频慕课网APP

相关分类

Python
我要回答