DBSCAN 轮廓系数:这个for循环有效吗?

我在尝试比较同学们的轮廓分数计算结果与我的结果时,遇到了理解他们for循环的困难。我不是在寻求免费的帮助,我们已经提交了下面的内容进行评分,只是为了将来参考,想理解这里发生了什么。

问题是:

使用DBSCAN,通过for循环迭代不同的min_samples值(从1到10)和epsilon值(从0.05到0.5,步长为0.01),在课程中使用的道路数据中寻找聚类,并计算min_samples和epsilon的轮廓系数。

道路数据:

             osm         lat          lon         alt0      144552912    9.349849    56.740876   17.0527721      144552912    9.350188    56.740679   17.6148402      144552912    9.350549    56.740544   18.083536...434873  93323209    9.943451    57.496270   24.635285434874 rows × 4 columns

(更新编辑) 归一化:

#Normalize sample from datasetXX = X.copy()XX['alt'] = (X.alt - X.alt.mean())/X.alt.std()XX['lat'] = (X.lat - X.lat.mean())/X.lat.std()XX['lon'] = (X.lon - X.lon.mean())/X.lon.std()

同学的循环:

start   = 0.0stop    = 0.45step    = 0.01my_list = np.arange(start, stop+step, step)startb   = 1stopb    = 10stepb    = .2 # To scale proportionately with epsilon incrementsmy_listb = np.arange(startb, stopb+stepb, stepb)my_range = range(45)one = []for i in tqdm(my_range):   dbscan = DBSCAN(eps = .05 + my_list[i] , min_samples = 1 + my_listb[i])   XX.cluster = dbscan.fit_predict(XX[['lat','lon']])   one.append(metrics.silhouette_score(XX[['lat', 'lon']], XX.cluster))

同学的图表

我的循环:

(我将我的解决方案分成了10个循环,每个min_sample一个(从1到10)。下面是示例。)

#eps loop 0.05 to 0.5 (steps 0.01) min_samples=1eps_range = [x / 100.0 for x in range(5,51,1)]eps_scores_1 = []for e in tqdm(eps_range):dbscan = DBSCAN(eps=e, min_samples=1)labels = dbscan.fit_predict(XX[['lon', 'lat', 'alt']])eps_scores_1.append(metrics.silhouette_score(XX[['lon', 'lat', 'alt']],labels))

#eps loop 0.05 to 0.5 (steps 0.01) min_samples=2eps_range = [x / 100.0 for x in range(5,51,1)]eps_scores_2 = []for e in tqdm(eps_range):dbscan = DBSCAN(eps=e, min_samples=2)labels = dbscan.fit_predict(XX[['lon', 'lat', 'alt']])eps_scores_2.append(metrics.silhouette_score(XX[['lon', 'lat', 'alt']],labels))

我的图表

我观察到的差异包括:

  1. 同学在他们的for循环中没有包括’alt’。
  2. 同学尝试了某种嵌套循环?
  3. 同学的范围是45,我不确定这是否正确。
  4. 同学的my_list使用了不正确的表示法?
  5. 同学的最大轮廓分数比我的高很多。
  6. (未显示) 同学使用了10,000个随机样本,我使用了30,000个随机样本。

回答:

问题要求同时变化min_samples和epsilon – 它需要一个嵌套循环。你的同学使用了一个单一循环,并且没有考虑组合。你通过复制粘贴完成了外部循环。

你的同学使用了一种非常误导的方式来管理范围,因为他后来分别加了0.05和1!

你不能简单地混合使用纬度、经度和高度。它们有不同的单位。实际上,你甚至不应该混合使用纬度和经度,因为有失真 – 应该使用哈弗赛恩距离!

轮廓系数假设聚类是凸形的,但DBSCAN并不生成凸形聚类。

sklearn的实现可能将噪声视为一个聚类,这通常会导致更差的结果。但轮廓系数并不真正适用于噪声标签…

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注