Выбор функции молотка аналогичен установке значений функции на 0

Я просматриваю исходные коды Mallet, и кажется, что большинство реализаций классификатора (например, наивный байесовский подход) на самом деле не учитывали выбор функций, хотя класс InstanceList имеет метод setFeatureSelection.

Теперь я хочу провести несколько быстрых экспериментов с моими наборами данных с включенным выбором функций. Я думаю, что с технической точки зрения я мог бы получить функции с самым низким рейтингом и установить эти значения равными 0 в векторах экземпляров. Является ли это эквивалентом в машинном обучении выбору признаков при обучении классификатора, при котором они вообще не учитываются (если не используется сглаживание, например, оценка Лапласа)?

благодарю вас


person goh    schedule 04.10.2013    source источник
comment
Вы работали над выбором функций, используя получение информации???? Мне нужна помощь, жду вашего ответа....   -  person Ashish    schedule 28.12.2013


Ответы (1)


Да, установка значения признака равным нулю будет иметь тот же эффект, что и удаление его из вектора признаков, поскольку у МОЛЛЕТА нет понятия «отсутствующих признаков», только нулевые и ненулевые значения признаков.

Однако использование класса FeatureSelection не слишком болезненно. MALLET поставляется с несколькими встроенными классами, которые применяют «маску» под капотом на основе RankedFeatureVector подклассов. Например, чтобы использовать выбор функции получения информации, вы должны просто сделать это:

FeatureSelection fs = FeatureSelection(new InfoGain(ilist), numFeatures);
ilist.setFeatureSelection(fs);

Вы также можете реализовать свой собственный подкласс RankedFeatureVector (API находится здесь) для чего-то более индивидуального. Чтобы вручную выбрать функции другим способом, вы все равно можете сделать это, создав маску функций в виде BitSet, содержащую все идентификаторы функций (из алфавита), которые вы хотите использовать, например:

java.util.BitSet featureMask = /* some code to pick your features */;
FeatureSelection fs = FeatureSelection(ilist.getAlphabet(), featureMask);
ilist.setFeatureSelection(fs);

В общем, я рекомендую использовать объекты FeatureSelection вместо деструктивного изменения данных экземпляра.

person burr    schedule 09.10.2013
comment
Я хотел бы использовать featureSelection. Дело в том, что я просмотрел большинство кодов реализации классификатора, и кажется, что большинство из них не учитывает выбор функций. Например, запуск классификатора NaiveBayes с набором выбора признаков даст тот же результат, что и без выбора признаков. Что ж, спасибо за вашу помощь, но в любом случае я расширил класс NaiveBayesTrainer, работающий с FeatureSelection. - person goh; 14.10.2013