为了账号安全,请及时绑定邮箱和手机立即绑定

DBSCAN 参数迭代的子图

DBSCAN 参数迭代的子图

波斯汪 2022-01-05 10:07:11
我想使用Scikit Learn 的这个 DBSCAN 聚类算法示例进行一些数据探索。我想迭代eps. 因此,我对以下代码进行了不同的修改,该代码从第二个 for 循环中取出最后一个图,格式为右下角。:print(__doc__)import matplotlib.pyplot as pltimport numpy as npfrom sklearn.cluster import DBSCANfrom sklearn import metricsfrom sklearn.datasets.samples_generator import make_blobsfrom sklearn.preprocessing import StandardScalereps = [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 循环?
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我解决了我的问题,将定义更改plt.subplot(120 + i*1000 , title=i)为


iterator = 0

plt.subplot(220 + iterator, title=i)

iterator += 1


解释一定是因为i正在迭代一个浮点数数组。乘以 1000 可能不会产生完美的 1、2、3、4,但会产生一些接近的结果,仍然保留除零以外的小数。这破坏了子图迭代的逻辑。基本上很简单的编辑,但我昨晚很努力。


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信