2016-05-20 4 views
1

У меня есть изображения, которые я сегментирую с использованием модели гауссовой смеси от scikit-learn. Некоторые изображения помечены, поэтому у меня есть хорошая информация, которую я бы хотел использовать. Я хотел бы провести полуконтролируемое обучение модели смеси, предоставив некоторые кластерные задания раньше времени.Сгруппированная модель смещения смеси Гаусса в Python

Из документации Matlab я вижу, что Matlab позволяет устанавливать начальные значения. Существуют ли библиотеки python, особенно scikit-learn, которые позволят это?

ответ

1

Стандарт GMM не работает в режиме полунастройки. Исходные значения, о которых вы упоминали, вероятно, являются начальными значениями для средних векторов и ковариационных матриц для гауссианов, которые будут обновлены алгоритмом ЭМ.

Простым взломом будет группировать ваши помеченные данные на основе их меток и индивидуально оценивать средние векторы и ковариационные матрицы для них и передавать их в качестве начальных значений вашей функции MATLAB (scikit-learn не позволяет это до тех пор, пока Я в курсе). Надеюсь, это заставит ваших гауссианцев в «правильных местах». Затем ЭМ-алгоритм будет отбирать его оттуда для настройки этих параметров.

Недостаток этого взлома заключается в том, что он не гарантирует, что он будет уважать ваше истинное назначение ярлыков, следовательно, даже если для точки данных назначена конкретная метка кластера, существует вероятность, что она может быть переназначена другому кластер. Кроме того, шум в ваших объектных векторах или ярлыках также может привести к тому, что ваши начальные гауссианы будут охватывать гораздо более крупную область, чем это предполагается, и, следовательно, разрушить хаос на алгоритме ЭМ. Кроме того, если у вас нет достаточных точек данных для определенного кластера, ваши оценочные матрицы ковариации могут быть сингулярными, следовательно, полностью разрушая этот трюк.

Если вам не требуется использовать GMM для группировки данных (например, вы точно знаете, что gaussians хорошо моделируют ваши данные), то, возможно, вы можете просто попробовать semi-supervised methods in scikit-learn. Они будут распространять метки на основе сходства функций с вашей другой точкой данных. Тем не менее, я сомневаюсь, что это может обрабатывать большой набор данных, так как требуется, чтобы матрица лапласа графа была построена из пар выборок, если только не существует специального трюка реализации, чтобы справиться с этим в scikit-learn.

+0

Спасибо за анализ, который я согласен, похоже, поддерживает идею о том, что это не поможет. Я в основном ожидал, что он сделает то, что вы описали, чего может быть достаточно для моего приложения. Спасибо также за то, что хедз-ап о том, что может пойти не так, и указатели на интересные полунаблюдаемые методы уже в scikit-learn. Я собираюсь взглянуть на это в MATLAB, потому что вы совершенно правы, похоже, что этого не существует в scikit-learn. – avpenn

+0

@ Process7 Добро пожаловать. – lightalchemist

Смежные вопросы