Большинство алгоритмов кластеризации, включая AP, не имеют четко определенного способа «предсказывать» новые данные.K-means - это один из немногих случаев, достаточно простых для того, чтобы обеспечить «предсказание», согласующееся с начальными кластерами.
Теперь у sklearn есть такая странность - пытаться втиснуть все в контролируемый API.Алгоритмы кластеризации имеют метод fit(X, y)
, но игнорируют y
, и должны иметь метод predict
, хотя алгоритмы не имеют такой возможности.
ДляАффинное распространение: кто-то в какой-то момент решил добавить predict
на основе k-средних : он всегда предсказывает ближайший центр.Вычисление только среднего возможно с данными координат, и, следовательно, метод завершается ошибкой с метрикой = предварительно вычислено.Если вы хотите повторить это поведение, просчитайте расстояния до всех центров кластеров и выберите argmin, вот и все.Вы не можете легко вписать это в API sklearn с помощью «предварительно вычисленных» метрик.Вы могли бы потребовать, чтобы пользователь передал вектор расстояния всем «обучающим» примерам для предварительно вычисленной метрики, но требуется только несколько из них ...
По моему мнению, я бы предпочел вообще удалить этот метод:
- Я не знаю, что в опубликованном исследовании распространения сродства
- Распространение сродства основано на понятиях сходства ("сродства"), а не на расстоянии илиозначает
- Это
predict
не будет не возвращать те же результаты, что точки были помечены AP, потому что AP помечает точки, используя «распространенную ответственность», а не ближайший «центр»,(Текущая реализация sklearn может потерять эту информацию ...) - Методы кластеризации в любом случае не имеют согласованного
predict
- это не обязательно. - Если вы хотитечтобы сделать такой прогноз, просто передайте центры кластера классификатору ближайшего соседа.Вот что здесь повторно реализовано, скрытый классификатор NN.Таким образом, вы получите больше гибкости, если сделаете прогнозирование вторым (классификационным) шагом.
Обратите внимание, что его кластеризация не обычна для любого разделения на тест-поезд, потому что вы неВ любом случае, не используйте метки и используйте только неконтролируемые методы оценки (если они вообще есть, потому что они имеют свой собственный набор проблем), если таковые вообще имеются - вы не можете надежно выполнить «оптимизацию гиперпараметров» здесь, но должны выбирать параметры на основеопыт и люди смотрят на данные.