Краткий ответ: просто , а не следует использовать GMM для классификации.
Длинный ответ ...
Из ответа в соответствующей теме: Мультиклассовая классификация с использованием моделей гауссовой смеси с scikit learn (выделено в оригинале):
Гауссовая смесь не является классификатором. Это метод оценки плотности, и ожидать, что его компоненты будут магически соответствовать вашим классам, не очень хорошая идея. [...] GMM просто пытается вписать смесь гауссианцев в ваши данные, но ничто не заставляет их размещать их в соответствии с маркировкой (что даже не указано в вызове подбора). Время от времени это будет работать - но только для тривиальных задач , где классы настолько хорошо разделены, что сработает даже наивный Байес, в целом, однако, это просто недопустимый инструмент для решения проблемы.
И комментарий самого респондента (опять же, акцент в оригинале):
Как указано в ответе - GMM не является классификатором, поэтому спрашивает,Вы правильно используете «GMM классификатор», ответить невозможно. Использование GMM в качестве классификатора является неправильным по определению, не существует «правильного» способа использовать его в такой проблеме, поскольку это не то, для чего предназначена эта модель. Что вы можете сделать, это построить правильную генеративную модель для каждого класса. Другими словами, создайте свой собственный классификатор, в котором вы подходите по одному GMM для каждого ярлыка , а затем используете назначенную вероятность для фактической классификации. Тогда это правильный классификатор. См. github.com / scikit-learn / scikit-learn / pull / 2468
(Что бы это ни стоило, вы можете заметить, что респондент - ученый-исследователь в DeepMind, и первый человек, которому был вручен machine-learning
золотой значок здесь, в SO)
Для дальнейшего развития (и поэтому я не сталпросто отметьте вопрос как дубликат):
Это правда, что в документации scikit-learn есть пост под названием GMM классификация :
ДемонстрацияМодели гауссовой смеси для классификации.
, которых, как мне кажется, не существовало еще в 2017 году, когда был написан вышеупомянутый ответ. Но, углубившись в предоставленный код, вы поймете, что модели GMM на самом деле используются там способом, предложенным lejlot выше; нет оператора в виде classifier.fit(X_train, y_train)
- все используется в форме classifier.fit(X_train)
, то есть без использования фактических меток.
Этоименно то, что мы ожидаем от кластеризованного -подобного алгоритма (который действительно является GMM), а не от классификатора. Опять же, верно, что Scikit-Learn предлагает опцию для предоставления также меток в GMM fit
метод :
fit
(self, X, y = None)
, который вы на самом деле использовали здесь (и, опять же, вероятно, не существовало еще в 2017 году, как следует из приведенного выше ответа), но, учитываячто мы знаем о GMM и их использовании, не совсем понятно, для чего этот параметр (и, позвольте мне сказать, scikit-learn имеет свою долю в практиках, которые могут показаться разумными из чисто программирования перспектива, но она мало что значила с точки зрения моделирование ).
Последнее слово: хотя исправление случайного начального числа (как предлагается в комментарии) может появиться «работать», доверять «классификатору», который дает диапазон точности от 0,4 до 0,7 в зависимости от случайного начального числа, возможно не хорошая идея ...