Как узнать, какой экземпляр кластера создан Affinity Propagation

Я работаю над сопоставлением изображений, я использовал Affinity Propagation в Python для создания кластеров изображений. Поскольку AP выбирает экземпляр для каждого кластера, как узнать, какое изображение представлено в качестве экземпляра для этого кластера?

Очевидно, это зависит от реализации, которую вы используете. Мои волшебные способности чтения мыслей догадываются, что вы используете sklearn, но не удосужились прочитать документацию?

Has QUIT--Anony-Mousse 30.05.2019 20:14

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

IkramAc 01.06.2019 11:12
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Affinity Propagation делает нет каноническим способом «классифицировать» новые изображения. Кластеры нет назначаются самим сходством, но по «ответственности» и «доступности». Грубо - но только приблизительно, и я думаю, что реализация sklearn там неверна - объекты назначаются их «ближайшему» (наивысшее сродство, хотя сходство обычно определяется расстоянием) кластеру. Но если ближайший имеет только низкую доступность, а второй ближайший почти такой же близкий, но с гораздо большей доступностью и ответственностью за эту точку, то баллы могут быть присвоены не "ближайшему" экземпляру. Я не уверен, может ли иметь место какая-то транзитивность (как в DBSCAN). Если это так, AP сможет лучше обрабатывать кластеры разного диаметра или формы и будет менее похож на k-means. В моих экспериментах AP был очень похож на k-средних, только намного медленнее... Однако у меня нет простого теста для такой ситуации, и ИМХО обычно это влияет только на несколько точек.

Тем не менее, кажется распространенным подходом просто назначать «новые точки» ближайшему экземпляру. И если вы прочитать документацию sklearn, у него есть метод, который делает именно это. Я не думаю, что это хорошая идея, потому что теперь fit, а затем transformнет даст тот же результат, что и fit_transform... но это, вероятно, никогда не изменится из-за «обратной совместимости».

sklearn также имеет атрибут, который даст вам индексы экземпляров, выбранных AP, поэтому вы также можете легко сделать это самостоятельно (что необходимо, если вы использовали предварительно вычисленную матрицу сходства).

Другие вопросы по теме