DBSCAN с пользовательской метрикой
У меня есть следующее:
набор данных в диапазоне тысяч
способ вычисления подобия, но сами данные я не могу построить их в евклидовом пространстве
Я знаю, что DBSCAN должен поддерживать пользовательскую метрику расстояния, но я не знаю, как ее использовать.
скажем, у меня есть функция
def similarity(x,y):
return similarity ...
и у меня есть список данных, который можно передать попарно в функция, как указать это при использовании реализации DBSCAN scikit-learn ?
В идеале я хочу получить список кластеров, но я не могу понять, как начать работу в первую очередь.
существует много терминологии, которая все еще смущает меня:
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html
Как передать массив объектов и что это такое ? Как мне вписаться в это? реализация моих потребностей ? Как я смогу получить свои "подсписки" из этого алгоритма ?
2 ответов
"массив объектов" - это просто массив объектов точки данных в вашем наборе данных.
metric
- Это параметр, который вы ищете. Это может быть строка (имя встроенной Метрики) или вызвать. Ваш similarity
функция является отзывной. Это не очень хорошо описано в документации, но метрика должна сделать именно это, взять две функции в качестве параметров и вернуть число.
def similarity(x, y):
return ...
reduced_dataset = sklearn.cluster.DBSCAN(metric: similarity).fit(dataset)
в случае, если кто-то ищет то же самое для строк с пользовательской метрики
def metric(x, y):
return yourDistFunc(string_seqs[int(x[0])],string_seqs[int(y[0])])
def clusterPockets():
global string_seqs
string_seqs = load_data() #["foo","bar"...]
dat = np.arange(len(string_seqs)).reshape(-1, 1)
clustered_dataset = DBSCAN(metric=metric)).fit(X=dat, y=dat)