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

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

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

В левом меню в категории «Текстовая аналитика» мы можем найти модуль «Предварительная обработка текста», который позаботится об этом за нас, просто сняв все флажки, кроме «Удалить специальные символы». Также обратите внимание, что мы должны установить английский язык в первом раскрывающемся списке и выбрать нужный столбец (в данном случае Player), чтобы применить преобразование.

Если мы запустим эксперимент еще раз, в результате у нас будет набор данных, содержащий как исходный столбец Player, так и новый столбец (Preprocessed Player), в котором будут удалены специальные символы:

Кроме того, для простоты мы можем изменить имена наших столбцов с помощью модуля «Редактировать метаданные», чтобы в дальнейшем мы могли создавать более простые запросы или находить функции в нашем наборе данных по более описательному имени, чем по аббревиатуре. В этом случае мы изменим название «Rk, Pos, Tm, G, GS, MP, FG, 3P, 2P, FT, Preprocessed Player» на, выбрав столбцы в селекторе столбцов и введя следующее в поле Текстовое поле «Новые имена столбцов»:

Рейтинг, Позиция, Команда, Сыграно игр, Начало игры, Сыграно минут, FGM, 15:00, 14:00, FTM, PreprocessedPlayer

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

Чтобы избежать дублирования и упростить задачу, мы присвоим чистое значение имени игрока столбцу Player, а также удалим все строки заголовков, которые сможем найти между строками данных. Для этого в Azure ML есть модуль запросов SQL, который позволит нам обрабатывать наш набор данных (или наборы данных, до трех из них для каждого модуля) как таблицу базы данных, поэтому мы можем выполнять преобразования с помощью запросов t-SQL. Найдите модуль «Применить преобразование SQL» в категории «Преобразование данных › Обработка» и соедините полученный набор данных с одной из точек входа модуля запроса SQL. Поскольку у него есть 3 разных точки входа, по одной для каждого возможного набора данных, он будет обращаться к ним по t1/t2/t3 в запросе. В этом случае мы введем простой запрос, фильтрующий эти значения заголовков и заменяющий значение игрока для каждой записи в нашем наборе данных следующим запросом:

обновить t1 set Player=PreprocessedPlayer;

выберите * из t1, где Rank‹›"Rk";

Если вы снова запустите эксперимент, вы заметите, что теперь у нас более 14 000 строк вместо первоначальных 16 000, и теперь в наши данные не включены строки заголовков.

Чтобы выполнить несколько числовых операций (таких как отсечение значений, замена отсутствующих значений и т. д.), нам необходимо убедиться, что инструмент обрабатывает каждый числовой столбец как целочисленный тип или тип с плавающей запятой. Модуль «Редактировать метаданные» снова поможет нам в этом, поэтому нам нужно добавить еще два модуля, один для столбцов Integer (Rank, Age, GamesPlayed, GamesStarted, MinutesPlayed, FGM, FGA, 3PM, 3PA, 2PM ,2PA,FTM,FTA,ORB,DRB,TRB,AST,STL,BLK,TOV,PF,PTS,Season) и еще один для столбцов с плавающей запятой (FG%,3P%,2P%,eFG%,FT% ,PER,TS%,3PAr,FTr,ORB%,DRB%,TRB%,AST%,STL%,BLK%,TOV%,USG%,OWS,DWS,WS,WS/48,OBPM,DBPM,BPM, VORP), выбрав эти столбцы с помощью селектора столбцов.

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

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

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

В этом случае, поскольку мы уже убедились, что числовые значения обрабатываются как таковые, мы можем выбирать столбцы по типу, а не по имени в селекторе столбцов. Запустите его, отметьте вкладку «С ПРАВИЛАМИ», нажмите кнопку «БЕЗ СТОЛБЦОВ», а затем добавьте по одному правилу для каждого числового типа (Числовой, Целый, Двойной), доступных в раскрывающемся списке:

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

После запуска эксперимента, если вы визуализируете результирующий набор данных и прокрутите вправо до последних столбцов, вы можете заметить, что несколько столбцов «‹‹feature_name››_isMissing» были добавлены в ваш набор данных и столбец «GamesStarted_isMissing» в качестве примера легко понять, поскольку значения в этом столбце в большинстве случаев отсутствовали, это не имеет значения для вас, поскольку вы будете использовать больше выдуманных значений (вне замены), чем настоящие ценности. Что касается остальных столбцов, поскольку замененные значения очень малы, вы можете продолжать считать их релевантными для эксперимента:

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

  • Известные входные данные для нашего эксперимента (игрок, позиция, возраст, команда и сезон).
  • Функция, которую нужно прогнозировать (PER)

В левом меню найдите модуль «Выбор столбцов в наборе данных», в категории «Преобразование данных › Манипуляция», перетащите его на холст и соедините его точку ввода с левой точкой вывода предыдущего модуля, содержащего результирующий набор данных. Чтобы выбрать нужные столбцы, просто запустите селектор столбцов и выберите их по имени:

После повторного запуска эксперимента у вас будет набор данных +1,4 тыс. строк и 6 столбцов, который вы будете использовать для обучения и оценки своей модели в дальнейшем.

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

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

Чтобы нормализовать значения нашей функции PER в учебных целях, найдите модуль «Обрезать значения» в категории «Преобразование данных › Масштабирование и уменьшение» в меню слева и перетащите его на холст. При подключении к предыдущему модулю выберите параметр «ClipPeaksAndSubpeaks» в раскрывающемся списке «Набор порогов», установите значения для верхнего порога (35) и нижнего порога (0), так как они будут максимальным и минимальным допустимыми значениями, и выберите только столбец PER с помощью селектора столбцов:

После повторного запуска эксперимента вы можете визуализировать, что наша функция PER по определению является нормальным распределением. Щелкните правой кнопкой мыши точку вывода модуля «Clip Values», затем «Visualize» и выберите столбец PER. На правой панели всплывающего окна визуализации вы увидите графическое представление выбранного столбца в виде вертикальной гистограммы, отображающей нормальное распределение (слегка смещенное влево, так как игроков ниже среднего по лиге больше, чем выше… также известная как Зона суперзвезд):

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

#gkout

Горка Мадариага (@Gk_8)

Первоначально опубликовано на испанском языке в MSDN Spain 4 июля 2017 г.