Подтвердить что ты не робот

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

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

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

Любые предложения? Спасибо.

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

Это фактически два вопроса в одном: -)

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

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

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

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

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

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

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

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

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

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

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

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