98% значений расстояний равны 0 в K ближайшего соседа, чтобы найти оптимальный эпсилон для DBSCAN через график - PullRequest
0 голосов
/ 05 мая 2020

Пытаюсь найти оптимальную eps для своей модели DBSCAN. Для этого я прочитал несколько статей, в которых упоминается, что его можно визуально найти в KNN distance plot. Я хочу добавить информацию о моих данных, моя форма данных (334,6), и я помещаю ее в DataFrame. Все они являются двоичными значениями 0/1. Я масштабировал данные с помощью StandardScaler, затем подгоняю к нему KNN, получаю расстояния и строю их. Конечный результат сюжета - он по форме напоминает плотницкий квадрат. Затем я смотрю расстояния, это показывает, что 98% значений расстояний равны 0. Почему это так? Я думал, что масштабирование устранит 0, и поскольку все значения не равны 0, расстояния не будут равны 0? Я делаю это неправильно? или это правда, но в моем сюжете нет локтя?

#NOTE df shapes 334,6 and all of them are binary 0/1
scp = StandardScaler()
df = scpx.fit_transform(df)

neigh = NearestNeighbors(n_neighbors=6)
nbrs = neigh.fit(df)
distances, indices = nbrs.kneighbors(df)

distances = np.sort(distances, axis=0)
distances = distances[:,1]
plt.plot(distances)

plot

...