Как построить хороший набор обучающих данных для машинного обучения и прогнозов?

У меня есть школьный проект по созданию программы, использующей инструменты Weka для прогнозирования футбольных (футбольных) игр.

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

Мне нужно извлечь данные из моего источника и отформатировать их другим способом, чтобы создать новые атрибуты и классы для моей модели. Кто-нибудь знает курс / учебное пособие / руководство о том, как правильно создавать свои атрибуты и классы для предсказаний машинного обучения? Существует ли стандарт, который описывает лучший способ выбора атрибутов набора данных для обучения алгоритму машинного обучения? Какой подход к этому?

Вот пример данных, которые у меня есть на данный момент: http://www.football-data.co.uk/mmz4281/1516/E0.csv

и вот что означают столбцы: http://www.football-data.co.uk/notes.txt

1 ответ

Решение

Проблема может быть в том, что у вас слишком маленький набор данных. Предположим, у вас есть десять переменных, и каждая переменная имеет диапазон 10 значений. Есть 10^10 возможных конфигураций этих переменных. Вряд ли ваш набор данных будет таким большим, не говоря уже о покрытии всех возможных конфигураций. Хитрость заключается в том, чтобы сузить переменные до наиболее релевантных, чтобы избежать этого большого потенциального пространства поиска.

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

Алгоритм J48 пытается найти наиболее релевантную переменную, используя энтропию на каждом уровне дерева. каждый путь через дерево можно рассматривать как условие AND: V1==a & V2==b ...

Это охватывает значение из-за совместных взаимодействий. Но что, если результат будет результатом A&B&C ИЛИ W&X&Y? Алгоритм J48 найдет только один, и это будет тот, где первая выбранная переменная будет иметь наибольшее значение, если рассматривать ее отдельно.

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

Это не простая задача. Многие люди и много денег участвуют в спортивных ставках. Если бы это было так же просто, как выбрать правильный тренировочный набор, вы можете быть уверены, что он уже найден.

РЕДАКТИРОВАТЬ:

В комментариях спросили, как найти правильный алгоритм. Ответ так же, как вы найдете иголку в стоге сена. Там нет установленного правила. Вам может повезти и наткнуться на него, но в большом пространстве поиска вы никогда не узнаете, если у вас есть. Это та же проблема, что и при поиске оптимальной точки в очень запутанном пространстве поиска.

Краткосрочный ответ на

  • Подумайте о том, что алгоритм действительно может выполнить. Алгоритмы J48 (и аналогичные) лучше всего подходят для классификации, где влияние переменных на результат хорошо известно и подчиняется иерархии. Классификация цветов является одним из примеров, где она, вероятно, будет лучше.

  • Сверьте модель с тренировочным набором. Если он плохо работает с обучающим набором, он, вероятно, будет иметь низкую производительность с невидимыми данными. В общем случае следует ожидать, что производительность модели по сравнению с обучением превысит производительность по невидимым данным.

  • Алгоритм должен быть проверен с данными, которые он никогда не видел. Тестирование на тренировочном наборе, в то время как быстрый тест на выбывание, скорее всего, приведет к самоуверенности.
  • Зарезервируйте некоторые из ваших данных для тестирования. Weka предоставляет способ сделать это. Наилучшим сценарием будет построение модели для всех случаев, кроме одного (метод Leave On Out), а затем посмотреть, как модель в среднем работает с ними.

Но это предполагает, что имеющиеся данные не являются каким-то образом предвзятыми.

Второй ловушкой является то, что результаты теста могут повлиять на то, как вы строите модель. Например, попробуйте разные параметры модели, пока не получите приемлемый ответ теста. С J48 нелегко позволить этому смещению проникнуть, но если это произошло, то вы просто использовали свой тестовый набор в качестве вспомогательного тренировочного набора.

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

Удивительно, но существует большое количество областей (в основном в области мягких наук), которые не видят необходимости сверять модель с будущими данными. Но этот вопрос лучше обсудить в другом месте.

Возможно, это не тот ответ, который вы ищете, но это так.

В итоге,

  1. Набор обучающих данных должен охватывать "значимые" переменные конфигурации
  2. Вы должны проверить модель по невидимым данным

Идентификация (1) и выполнение (2) - хитрые биты. Не существует готового рецепта.

Другие вопросы по тегам