Я пытаюсь сравнить результаты вычислений Silhouette Score моих одноклассников с моими, и у меня возникли некоторые проблемы с тем, чтобы обернуть голову вокруг их цикла for. Я не ищу халяву, мы уже представили ниже для оценки, просто пытаюсь понять, что здесь происходит для дальнейшего использования.
Вопрос:
Использование DBSCAN итерации (для цикла) по различным значениям min_samples (от 1 до 10) и epsilon (от .05 до .5, с шагом .01) для поиска кластеров в дорожных данных, используемых в уроке, и расчета Silohouette Coeff для min_samples и epsilon.
дорожно-данные:
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))
My Loop (s):
(я разбил свое решение на 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))
Что я наблюдаю, насколько различия:
- Одноклассник не включил «alt» в цикл for.
- Одноклассник предпринял попытку какого-то вложенного цикла?
- Диапазон одноклассников 45, не уверен, что это правильно.
- Одноклассник
my_list
не в правильной записи?
- Максимальные баллы силуэта одноклассника намного выше, чем у меня.
- (не показано) Одноклассник использовал 10000 случайных выборок, я использовал 30000 случайных выборок.