Поиск наиболее важных или важных функций для SVM с использованием SGD (потеря = шарнир) - PullRequest
0 голосов
/ 07 мая 2019

Я работаю над проблемой классификации текста и обнаружил, что SVM лучше всего справляется с моей задачей классификации текста.Тем не менее, я провел свой эксперимент с использованием SGD-классификатора sklearn (loss = hinge).

LIME , кажется, предоставляет способ для анализа экземпляра и демонстрации анализа для каждого класса в данном экземпляре.Однако проблема с LIME заключается в следующем:

exp = explainer.explain_instance(test_document, c.predict_proba)

в функции объяснении.explain_instance, для которого требуется распределение вероятности в качестве второго параметра (c.predict_proba), и для SGD нет предиката_proba, доступного для SGD (loss = hinge)).Я пытался использовать CalibratedClassifierCV, но я получаю другие результаты с ним.

'=======SGD (loss=hinge)======='
Predicted:  [19, 7, 7, 13, 16, 9, 17, 6, 13, 17, 16, 17, 11, 1, 4, 14, 8, 10, 12, 10, 16, 1, 1]
True     :  [19, 3, 7, 13, 16, 9, 15, 6, 13, 10, 16, 17, 11, 1, 4, 14, 8, 5, 20, 18, 2, 12, 1]
0.6521739130434783
'====Calibrated Results======'
Predicted:  [19, 7, 7, 13, 16, 16, 12, 6, 13, 17, 16, 17, 11, 5, 4, 14, 8, 10, 15, 10, 16, 7, 1]
True     :  [19, 3, 7, 13, 16, 9, 15, 6, 13, 10, 16, 17, 11, 1, 4, 14, 8, 5, 20, 18, 2, 12, 1]
0.5652173913043478

Задача состоит в том, чтобы найти наиболее релевантные / важные характеристики для каждого класса в многоклассовой задаче классификации текста.Цель этого - проанализировать результаты и обсудить их различия в исследовательской работе.Открыты для любых предложений или альтернатив.

Кроме того, я мог бы использовать SVC Склеарна вместо SGD, поскольку он имеет атрибутprett_proba.Однако проблема в том, что с SGD у меня уже есть набор параметров, для которых я делаю анализ, и я не смог найти способ точно преобразовать конфигурацию SGD в конфигурацию SVC.

1 Ответ

0 голосов
/ 08 мая 2019

Так что я не мог заставить LIME работать, но я нашел альтернативу LIME, названную ELI5 библиотекой питона.Я воссоздаю пример с учебного сайта о том, как этот модуль можно использовать для отладки алгоритма машинного обучения.

Предполагая, что у вас уже есть объект clf или оценщик sklearn, который помещен в векторизованные текстовые данные:

import eli5
eli5.show_weights(clf, top=10)

enter image description here

приведенный выше код работает, но лучше использовать вместо него векторизатор и позволить eli5 автоматически выяснить детали:

#vec is the vectorizer object and 
#target_names is the names of the classes to be used
eli5.show_weights(clf, vec=vec, top=10,
                  target_names=twenty_test.target_names)

enter image description here

Чтобы узнать, какклассификатор, назначенный определенному классу show_prediction показывает оценки для каждого класса с основными словами, которые внесли вклад в этот счет

#second param is the test instance whose prediction you'd like to see.
#vec and target_names are same from show_weights 
eli5.show_prediction(clf, twenty_test.data[0], vec=vec,
                     target_names=twenty_test.target_names)

Следующее является только частью всего вывода, произведенного с помощью show_prediction метод.enter image description here

Это именно то, что я искал, мне интересно, почему я не нашел его раньше.Надеюсь, это поможет другим, ищущим что-то похожее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...