【发布时间】:2019-04-04 04:40:19
【问题描述】:
我正在尝试将我的同学剪影分数计算的结果与我的结果进行比较,并且在围绕他们的 for 循环时遇到了一些麻烦。我不是在寻找免费赠品,我们已经提交了下面的评分,只是想了解这里发生了什么以供将来参考。
问题:
使用 DBSCAN 迭代(for-loop)通过 min_samples(1 到 10)和 epsilon(0.05 到 .5,步长为 0.01)的不同值来查找课程中使用的道路数据中的集群并计算min_samples 和 epsilon 的 Silohouette 系数。
道路数据:
osm lat lon alt
0 144552912 9.349849 56.740876 17.052772
1 144552912 9.350188 56.740679 17.614840
2 144552912 9.350549 56.740544 18.083536
...
434873 93323209 9.943451 57.496270 24.635285
434874 rows × 4 columns
(更新编辑)标准化:
#Normalize sample from dataset
XX = 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.0
stop = 0.45
step = 0.01
my_list = np.arange(start, stop+step, step)
startb = 1
stopb = 10
stepb = .2 # To scale proportionately with epsilon increments
my_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=1
eps_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=2
eps_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))
我观察到的差异:
- 同学的 for 循环中没有包含“alt”。
- 同学尝试了某种嵌套循环?
- 同学的范围是45,不知道对不对。
- 同学
my_list的符号不正确? - 同学的最高剪影分数比我高很多。
- (未显示) 同学用了10000个随机样本,我用了30000个随机样本。
【问题讨论】:
标签: python for-loop machine-learning cluster-analysis dbscan