Как один кластер по схожести, а не по сходству?Допустимо ли использование обратного евклидова расстояния? - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь сгруппировать набор продуктов по тому, насколько они различаются , а не по тому, насколько они похожи. То есть, если Product1 продается на неделе 1, а не продается на неделе 2, я хочу связать его с продуктом, который не продается на неделе 1, но продается на неделе 2.

В качестве конечного продукта я хотел бы представить кластерную карту seaborn, которая иллюстрирует обратную связь между продуктами.

Я пытался использовать обратное евклидово расстояние в качестве метрики кластеризации, а не евклидово расстояние. для достижения этой задачи.

Пример кода ниже:

import numpy as np
import seaborn as sns
import pandas as pd

np.random.seed(0)
a = np.random.randint(2,size=(5,10))

Примерный фрейм данных. Пять продуктов с 10-недельными данными. 1 = продажа, 0 = нет продажи

df = pd.DataFrame(a, 
                  index='Product1 Product2 Product3 Product4 Product5'.split(),
                  columns=np.arange(1,11))

Определение метрики расстояния, обратного евклидовому расстоянию:

invEucl = lambda u, v: 1 / np.sqrt(((u-v)**2).sum())

Сравнить кластерные карты, евклидово и обратное:

sns.clustermap(df,col_cluster=False)

sns.clustermap(df,
               col_cluster=False,
              metric=invEucl)

Результаты, похоже, работают графически, с кластерной картой, объединяющей разнородные элементы, но я хочу подтвердить, что использование чего-то вроде обратного евклидова расстояния целесообразно.

Если это так, знаете ли вы какую-либо литературу, в которой используется подобный подход?

Если нет, существуют ли какие-либо метрики, подходящие для этого типа анализа? По сути, я ищу показатель, который назначит меньшее расстояние для векторов, которые наименее похожи.

1 Ответ

1 голос
/ 03 мая 2019

Кластеризация из-за различий не имеет никакого смысла. Если a и b очень похожи, а b и c очень похожи, то a и c, по крайней мере, очень похожи, но если a и b сильно отличаются и b и c сильно отличаются друг от друга, что ничего не говорит нам о том, насколько похожи или различны a и c. Они могут быть идентичны.

Ваша кластеризованная "метрика" в корне нарушена. Это не удовлетворяет неравенству треугольника; нет никаких гарантий, что dist(a, c) <= dist(a, b) + dist(b, c).

Кластеризация - это неправильный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...