Выберите правильный алгоритм классификации.Линейный или нелинейный?[закрыто]
-
19-09-2019 - |
Вопрос
Я нахожу этот вопрос немного сложным.Может быть, кто-то знает подход к ответу на этот вопрос.Представьте, что у вас есть набор данных (обучающие данные), о которых вы не знаете, что это такое.На какие особенности обучающих данных вы бы обратили внимание, чтобы вывести алгоритм классификации для классификации этих данных?Можем ли мы что-нибудь сказать, следует ли нам использовать нелинейный или линейный алгоритм классификации?
Кстати, я использую WEKA для анализа данных.
Есть какие-нибудь предложения?Спасибо.
Решение
Ого, у вас есть некоторые обучающие данные, и вы не знаете, смотрите ли вы на функции, представляющие слова в документе, или на генезис в ячейке, и вам нужно настроить классификатор.Что ж, поскольку у вас нет никакой семантической информации, вам придется делать это исключительно путем просмотра статистических свойств наборов данных.
Во-первых, если сформулировать проблему, это нечто большее, чем просто линейное и нелинейное.Если вы действительно хотите классифицировать эти данные, вам действительно нужно выбрать функцию ядра для классификатора, которая может быть линейной или нелинейной (гауссова, полиномиальная, гиперболическая и т. д.).Кроме того, каждая функция ядра может принимать один или несколько параметров, которые необходимо установить.Определение оптимальной функции ядра и набора параметров для данной задачи классификации на самом деле не является решенной проблемой, есть только полезная эвристика, и если вы погуглите «выбор функции ядра» или «выбор функции ядра», вы увидите множество исследовательских работ. предлагать и тестировать различные подходы.Несмотря на то, что существует множество подходов, один из самых простых и хорошо изученных — это градиентный спуск по параметрам. По сути, вы пробуете метод ядра и набор параметров, тренируетесь на половине своих точек данных и смотрите, как у вас дела.Затем вы пробуете другой набор параметров и смотрите, что получится.Вы перемещаете параметры в направлении наилучшего улучшения точности, пока не получите удовлетворительные результаты.
Если вам не нужно проходить через всю эту сложность, чтобы найти хорошую функцию ядра, и вам просто нужен ответ на линейный или нелинейный вопрос.тогда вопрос в основном сводится к двум вещам:Нелинейные классификаторы будут иметь более высокий риск переобучения (недостаточного обобщения), поскольку они имеют больше измерений свободы.Они могут пострадать от того, что классификатор просто запоминает наборы хороших данных, а не дает хорошее обобщение.С другой стороны, линейный классификатор имеет меньшую свободу адаптации, и в случае данных, которые не являются линейно разделимыми, он не сможет найти хорошую функцию решения и будет страдать от высокого уровня ошибок.
К сожалению, я не знаю лучшего математического решения для ответа на вопрос «являются ли эти данные линейно разделимыми», кроме как просто попробовать сам классификатор и посмотреть, как он работает.Для этого вам понадобится более умный ответ, чем мой.
Редактировать:В этой исследовательской статье описан алгоритм, который, похоже, должен быть в состоянии определить, насколько близок заданный набор данных к линейно разделимому.
http://www2.ift.ulaval.ca/~mmarchand/publications/wcnn93aa.pdf
Другие советы
Это на самом деле так два вопросы в одном ;-)
- Выбор функции
- Линейный или нет
добавьте "выбор алгоритма", и у вас, вероятно, возникнут три наиболее фундаментальных вопроса о разработке классификатора.
В качестве примечания в сторону, это хорошая вещь что у вас нет опыта работы в предметной области, который позволил бы вам руководить выбором объектов и / или утверждать линейность пространства объектов.В этом и заключается удовольствие от интеллектуального анализа данных :выводить такую информацию без априорного опыта.(Кстати, и хотя знание предметной области полезно для двойной проверки результатов работы классификатора, слишком большое априорное понимание может заставить вас упустить хорошие возможности для майнинга).Без каких-либо таких априорных знаний вы вынуждены разрабатывать надежные методологии и тщательно анализировать результаты.
Это трудно обеспечить специфический руководство, отчасти потому, что в вопросе упущено много деталей, а также потому, что я несколько запутался в этом ;-).Тем не менее я надеюсь, что следующий общий совет будет полезен
Для каждого алгоритма, который вы пробуете (или, точнее, для каждого набора параметров для данного алгоритма), вам нужно будет выполните множество тестов.Теория может быть очень полезной, но останется много "проб и ошибок".Ты найдешь Перекрестная проверка ценный метод.
В двух словах, [и в зависимости от размера доступных обучающих данных] вы случайным образом разбиваете обучающие данные на несколько частей и обучаете классификатор на одной [или нескольких] из этих частей, а затем оцениваете классификатор по его производительности на другой [или нескольких] частях.Для каждого такого запуска вы измеряете различные показатели производительности, такие как ошибка неправильной классификации (MCE), и помимо информации о том, как работает классификатор, эти показатели, или, скорее, их изменчивость, дадут подсказки относительно релевантности выбранных признаков и / или их недостаточного масштаба или линейности.Независимо от предположения о линейности, полезно нормализуйте значения из числовой возможности.Это помогает с функциями, которые имеют нечетный диапазон и т.д.
Внутри каждого измерения установите диапазон, скажем, в пределах 2,5 стандартных отклонений по обе стороны от медианы, и преобразуйте значения признаков в проценты на основе этого диапазона.Преобразование номинальных атрибутов в двоичные, создавая столько измерений, сколько существует различных значений номинального атрибута.(Я думаю, что многие оптимизаторы алгоритмов сделают это за вас)
После того как вы определили один или несколько классификаторов с относительно приличной производительностью (скажем, 33% MCE), выполните ту же серию тестов с таким классификатором, изменяя только один параметр за раз.Например, удалите некоторые объекты и посмотрите, улучшается или ухудшается результирующий классификатор с меньшей размерностью.
Тот самый коэффициент потерь - очень чувствительный параметр.Старайтесь придерживаться одного "разумного", но, возможно, неоптимального значения для основной части тестов, точно отрегулируйте потери в конце.
Научитесь использовать информацию о "дампе", предоставляемую оптимизаторами SVM.Эти результаты дают очень ценную информацию о том, что "думает" оптимизатор
Помните, что то, что очень хорошо работало с данным набором данных в данном домене, может очень плохо работать с данными из другого домена...
кофе хороший, не перебор.Когда все провалится, сделайте это по-ирландски ;-)