Как запустить предикат () для «предварительно вычисленных» данных для кластеризации в Python - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть свои предварительно вычисленные данные для запуска AP или Kmeans в python.Тем не менее, когда я иду, чтобы запустить предикат (), как я хотел бы запустить train () и test () для данных, чтобы увидеть, имеют ли кластеризации хорошую точность для класса или кластеров, Python говорит мне, что предикат () недоступны для «предварительно вычисленных» данных.

Есть ли другой способ запустить поезд / тест по кластеризованным данным в python?

1 Ответ

0 голосов
/ 24 февраля 2019

Большинство алгоритмов кластеризации, включая AP, не имеют четко определенного способа «предсказывать» новые данные.K-means - это один из немногих случаев, достаточно простых для того, чтобы обеспечить «предсказание», согласующееся с начальными кластерами.

Теперь у sklearn есть такая странность - пытаться втиснуть все в контролируемый API.Алгоритмы кластеризации имеют метод fit(X, y), но игнорируют y, и должны иметь метод predict, хотя алгоритмы не имеют такой возможности.

ДляАффинное распространение: кто-то в какой-то момент решил добавить predict на основе k-средних : он всегда предсказывает ближайший центр.Вычисление только среднего возможно с данными координат, и, следовательно, метод завершается ошибкой с метрикой = предварительно вычислено.Если вы хотите повторить это поведение, просчитайте расстояния до всех центров кластеров и выберите argmin, вот и все.Вы не можете легко вписать это в API sklearn с помощью «предварительно вычисленных» метрик.Вы могли бы потребовать, чтобы пользователь передал вектор расстояния всем «обучающим» примерам для предварительно вычисленной метрики, но требуется только несколько из них ...

По моему мнению, я бы предпочел вообще удалить этот метод:

  1. Я не знаю, что в опубликованном исследовании распространения сродства
  2. Распространение сродства основано на понятиях сходства ("сродства"), а не на расстоянии илиозначает
  3. Это predict не будет не возвращать те же результаты, что точки были помечены AP, потому что AP помечает точки, используя «распространенную ответственность», а не ближайший «центр»,(Текущая реализация sklearn может потерять эту информацию ...)
  4. Методы кластеризации в любом случае не имеют согласованного predict - это не обязательно.
  5. Если вы хотитечтобы сделать такой прогноз, просто передайте центры кластера классификатору ближайшего соседа.Вот что здесь повторно реализовано, скрытый классификатор NN.Таким образом, вы получите больше гибкости, если сделаете прогнозирование вторым (классификационным) шагом.

Обратите внимание, что его кластеризация не обычна для любого разделения на тест-поезд, потому что вы неВ любом случае, не используйте метки и используйте только неконтролируемые методы оценки (если они вообще есть, потому что они имеют свой собственный набор проблем), если таковые вообще имеются - вы не можете надежно выполнить «оптимизацию гиперпараметров» здесь, но должны выбирать параметры на основеопыт и люди смотрят на данные.

...