Выберите правильный алгоритм классификации.Линейный или нелинейный?[закрыто]

StackOverflow https://stackoverflow.com/questions/2414030

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Кстати, я использую WEKA для анализа данных.

Есть какие-нибудь предложения?Спасибо.

Это было полезно?

Решение

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

Во-первых, если сформулировать проблему, это нечто большее, чем просто линейное и нелинейное.Если вы действительно хотите классифицировать эти данные, вам действительно нужно выбрать функцию ядра для классификатора, которая может быть линейной или нелинейной (гауссова, полиномиальная, гиперболическая и т. д.).Кроме того, каждая функция ядра может принимать один или несколько параметров, которые необходимо установить.Определение оптимальной функции ядра и набора параметров для данной задачи классификации на самом деле не является решенной проблемой, есть только полезная эвристика, и если вы погуглите «выбор функции ядра» или «выбор функции ядра», вы увидите множество исследовательских работ. предлагать и тестировать различные подходы.Несмотря на то, что существует множество подходов, один из самых простых и хорошо изученных — это градиентный спуск по параметрам. По сути, вы пробуете метод ядра и набор параметров, тренируетесь на половине своих точек данных и смотрите, как у вас дела.Затем вы пробуете другой набор параметров и смотрите, что получится.Вы перемещаете параметры в направлении наилучшего улучшения точности, пока не получите удовлетворительные результаты.

Если вам не нужно проходить через всю эту сложность, чтобы найти хорошую функцию ядра, и вам просто нужен ответ на линейный или нелинейный вопрос.тогда вопрос в основном сводится к двум вещам:Нелинейные классификаторы будут иметь более высокий риск переобучения (недостаточного обобщения), поскольку они имеют больше измерений свободы.Они могут пострадать от того, что классификатор просто запоминает наборы хороших данных, а не дает хорошее обобщение.С другой стороны, линейный классификатор имеет меньшую свободу адаптации, и в случае данных, которые не являются линейно разделимыми, он не сможет найти хорошую функцию решения и будет страдать от высокого уровня ошибок.

К сожалению, я не знаю лучшего математического решения для ответа на вопрос «являются ли эти данные линейно разделимыми», кроме как просто попробовать сам классификатор и посмотреть, как он работает.Для этого вам понадобится более умный ответ, чем мой.

Редактировать:В этой исследовательской статье описан алгоритм, который, похоже, должен быть в состоянии определить, насколько близок заданный набор данных к линейно разделимому.

http://www2.ift.ulaval.ca/~mmarchand/publications/wcnn93aa.pdf

Другие советы

Это на самом деле так два вопросы в одном ;-)

  • Выбор функции
  • Линейный или нет

добавьте "выбор алгоритма", и у вас, вероятно, возникнут три наиболее фундаментальных вопроса о разработке классификатора.

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

Это трудно обеспечить специфический руководство, отчасти потому, что в вопросе упущено много деталей, а также потому, что я несколько запутался в этом ;-).Тем не менее я надеюсь, что следующий общий совет будет полезен

  • Для каждого алгоритма, который вы пробуете (или, точнее, для каждого набора параметров для данного алгоритма), вам нужно будет выполните множество тестов.Теория может быть очень полезной, но останется много "проб и ошибок".Ты найдешь Перекрестная проверка ценный метод.
    В двух словах, [и в зависимости от размера доступных обучающих данных] вы случайным образом разбиваете обучающие данные на несколько частей и обучаете классификатор на одной [или нескольких] из этих частей, а затем оцениваете классификатор по его производительности на другой [или нескольких] частях.Для каждого такого запуска вы измеряете различные показатели производительности, такие как ошибка неправильной классификации (MCE), и помимо информации о том, как работает классификатор, эти показатели, или, скорее, их изменчивость, дадут подсказки относительно релевантности выбранных признаков и / или их недостаточного масштаба или линейности.

  • Независимо от предположения о линейности, полезно нормализуйте значения из числовой возможности.Это помогает с функциями, которые имеют нечетный диапазон и т.д.
    Внутри каждого измерения установите диапазон, скажем, в пределах 2,5 стандартных отклонений по обе стороны от медианы, и преобразуйте значения признаков в проценты на основе этого диапазона.

  • Преобразование номинальных атрибутов в двоичные, создавая столько измерений, сколько существует различных значений номинального атрибута.(Я думаю, что многие оптимизаторы алгоритмов сделают это за вас)

  • После того как вы определили один или несколько классификаторов с относительно приличной производительностью (скажем, 33% MCE), выполните ту же серию тестов с таким классификатором, изменяя только один параметр за раз.Например, удалите некоторые объекты и посмотрите, улучшается или ухудшается результирующий классификатор с меньшей размерностью.

  • Тот самый коэффициент потерь - очень чувствительный параметр.Старайтесь придерживаться одного "разумного", но, возможно, неоптимального значения для основной части тестов, точно отрегулируйте потери в конце.

  • Научитесь использовать информацию о "дампе", предоставляемую оптимизаторами SVM.Эти результаты дают очень ценную информацию о том, что "думает" оптимизатор

  • Помните, что то, что очень хорошо работало с данным набором данных в данном домене, может очень плохо работать с данными из другого домена...

  • кофе хороший, не перебор.Когда все провалится, сделайте это по-ирландски ;-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top