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