Итак, я новичок в области ОД и пытаюсь провести некоторую классификацию. Моя цель - предсказать исход спортивного события. Я собрал некоторые исторические данные и сейчас пытаюсь обучить классификатор. Я получил около 1200 сэмплов, 0,2 из которых я разделил для целей тестирования, другие я включил в поиск по сетке (включая перекрестную проверку) с различными классификаторами. Я пробовал SVM с линейными, rbf и полиноминальными ядрами и случайными лесами на данный момент. К сожалению, я не могу получить точность значительно больше 0,5 (так же, как при случайном выборе класса). Значит ли это, что я просто не могу предсказать исход такого сложного события? Или я могу получить точность не менее 0,7-0,8? Если это возможно, то что я должен смотреть дальше?
- Получить больше данных? (Я могу увеличить набор данных до 5 раз)
- Попробуйте разные классификаторы? (Логистическая регрессия, кНН и т. Д.)
- Переоценить мой набор функций? Существуют ли ML-инструменты для анализа, какие функции имеют смысл, а какие нет? Может быть, я должен уменьшить свой набор функций (в настоящее время у меня есть 12 функций)?
Ответы:
Прежде всего, если ваш классификатор не работает лучше, чем случайный выбор, существует риск того, что просто нет никакой связи между функциями и классом. Хороший вопрос, который следует задать себе в такой ситуации, - может ли вы или эксперт в области определить класс (с точностью, превышающей случайный классификатор) на основе заданных особенностей. Если нет, то получение большего количества строк данных или изменение классификатора не поможет. Что вам нужно сделать, это получить больше данных, используя различные функции.
Если, с другой стороны, вы считаете, что информация, необходимая для вывода класса, уже есть в метках, вам следует проверить, не страдает ли ваш классификатор проблемой высокого смещения или высокой дисперсии.
Для этого составьте график ошибки проверки и ошибки обучающего набора как функции обучающих примеров.
Если кажется, что линии сходятся к одному и тому же значению и в конце близки, то ваш классификатор имеет высокое смещение, и добавление дополнительных данных не поможет. Хорошей идеей в этом случае является либо изменение классификатора на тот, который имеет более высокую дисперсию, либо просто более низкий параметр регуляризации вашего текущего.
Если, с другой стороны, линии довольно далеко друг от друга, и у вас низкая ошибка обучающего набора, но высокая ошибка проверки, тогда ваш классификатор имеет слишком высокую дисперсию. В этом случае получение большего количества данных очень вероятно поможет. Если после получения большего количества данных дисперсия все еще будет слишком высокой, вы можете увеличить параметр регуляризации.
Это общие правила, которые я бы использовал, когда столкнулся с такой проблемой, как ваша.
Приветствия.
источник
Я бы предложил сделать шаг назад и провести некоторый предварительный анализ данных перед попыткой классификации. Стоит изучить ваши функции на индивидуальной основе, чтобы выяснить, есть ли какая-либо связь с интересующим результатом - возможно, что у ваших функций нет никакой связи с метками классов. Как вы узнаете, будут ли какие-либо функции, которые у вас есть, использоваться?
Вы можете начать с проверки гипотез или корреляционного анализа, чтобы проверить отношения. Создание специфичных для класса гистограмм для объектов (т. Е. Построение гистограмм данных для каждого класса для заданного объекта на одной оси) также может быть хорошим способом показать, хорошо ли различает объект два класса.
Важно помнить, однако, чтобы результаты вашего поискового анализа не влияли на ваш выбор для классификации. Выбор функций для классификации, основанный на предыдущем предварительном анализе на тех же данных, может привести к переобучению и предвзятым оценкам производительности (см. Обсуждение здесь ), но предварительный анализ, по крайней мере, даст вам представление о том, является ли задача, которую вы пытаетесь выполнить, даже возможно.
источник
Хорошо, что вы разделили свои данные на тренировочные и тестовые данные.
Ваша ошибка тренировки уменьшилась, когда вы тренировались? Если нет, то у вас может быть ошибка в вашем тренировочном алгоритме. Вы ожидаете, что ошибка в вашем тестовом наборе будет больше, чем ошибка в вашем тренировочном наборе, поэтому, если у вас есть недопустимо высокая ошибка в вашем тренировочном наборе, у вас мало надежды на успех.
Избавление от функций может избежать некоторых типов переоснащения. Тем не менее, это не должно улучшить ошибку на вашем тренировочном наборе. Низкая ошибка в вашем тренировочном наборе и высокая ошибка в вашем тестовом наборе могут указывать на то, что вы используете слишком гибкий набор функций. Тем не менее, безопаснее проверить это путем перекрестной проверки, чем в вашем тестовом наборе. После выбора набора функций на основе набора тестов он больше не действует в качестве набора тестов.
источник
Почему бы не следовать принципу «сначала посмотри на графики данных». Одна вещь, которую вы можете сделать, это двухмерная диаграмма рассеяния условных плотностей двух классов для двух ковариат. Если вы посмотрите на них и не увидите практически никакого разделения, которое может указывать на отсутствие предсказуемости, вы можете сделать это со всеми ковариатами. Это дает вам некоторые идеи о возможности использовать эти ковариаты для прогнозирования. Если вы видите некоторую надежду на то, что эти переменные могут немного отделиться, тогда начинайте думать о линейных дискриминантах, квадратичных дискриминантах, распознавании ядра, регуляризации, древовидной классификации, SVM и т. Д.
источник