Чистые данные и выбор признаков
Следующей ступенью к получению чистых данных является их нормализация, понимаемая в терминах реляционных баз данных. Для анализа данных зачастую достаточно даже первой нормальной формы. Напомним, что первая нормальная форма в базах данных — это такая форма отношения (таблицы) в реляционном исчислении, при которой в любом допустимом значении (строке) отношения каждый его кортеж (набор столбцов… Читать ещё >
Чистые данные и выбор признаков (реферат, курсовая, диплом, контрольная)
Предобработка данных
Все мы сталкиваемся в жизни с так называемыми сырыми данными. Под сырыми данными {raw data) мы подразумеваем все возможные данные, полезные для некоторой задачи, например для задачи классификации или анализа данных, которые непригодны для их быстрого анализа в силу отсутствия в них единой структуры или же унифицированного способа доступа к ним. Так, в той же задаче классификации спама сырыми данными будут сами письма. Сырые они по причине того, что интересующие нас признаки в этих данных находятся в общем тексте и их оттуда еще надо извлечь.
Для задачи анализа рынка арендуемой недвижимости, например в Санкт-Петербурге, требуется огромное количество данных по существующим квартирам, сдаваемым в аренду, — от площади и цен до положения на карте и наличия стиральной машины. В этой задаче все эти переменные также являются признаковыми, но прежде чем их получить, необходимо каким-то образом обойти все известные сайты — агрегаторы предложений по аренде квартир и извлечь из получаемого /г?т/-кода всю полезную информацию.
Таким образом, сырые данные предполагают работу по их загрузке и извлечению из них полезной информации. Более того, сама по себе полезная информация также может представляться не в едином формате. Например, в задаче классификации спама слово «продажи» может быть написано в различных падежах, и чтобы это слово стало единым признаком, необходимо преобразовать его к нормальной словарной форме. Процесс преобразования формата данных в единый называется унификацией и служит еще одной ступенью к чистым данным.
Следующей ступенью к получению чистых данных является их нормализация, понимаемая в терминах реляционных баз данных. Для анализа данных зачастую достаточно даже первой нормальной формы. Напомним, что первая нормальная форма в базах данных — это такая форма отношения (таблицы) в реляционном исчислении, при которой в любом допустимом значении (строке) отношения каждый его кортеж (набор столбцов) содержит только одно значение для каждого из атрибутов. Другими словами, если у квартиры есть набор признаков, например наличие бытовой техники, необходимость оплаты коммунальных платежей самому, наличие проведенного Интернета, то все эти признаки должны быть вынесены в отдельные столбцы, обозначающие соответствующие бинарные признаки.
Итак, мы получаем процесс преобразования сырых данных в чистые, изображенный на рис. 4.2.
Рис. 4.2. Схема обработки сырых данных.
Таким образом, можно сформулировать определение чистых данных. Чистые данные (clean dataУ — это данные, приведенные к единому формату, которые могут быть легко подвержены анализу, а также любому преобразованию типа объединения нескольких наборов данных этого формата, выделения подмножеств и т. п.
Процесс предварительной обработки данных является неотъемлемой частью решения задач машинного обучения на практике.
Какие же существуют инструменты для очищения данных? В качестве целевого языка программирования будем использовать язык Scala. Будучи наследником языка Java, он становится в промышленном программировании все более популярным языком — лаконичный синтаксис функционального языка программирования позволяет писать понятный и красивый код, а богатое наследство Java в виде многочисленных библиотек обработки данных и машинного обучения позволяет использовать все предыдущие наработки.
Возьмем в качестве примера задачу реализации наивного фильтра статей по машинному обучению. В качестве признаков выберем ключевые слова, соответствующие тематике. Попробуем составить словарь терминов, которые встречаются на странице https://en.wikipedia.org/wiki/Machine_learning, — слова из него мы и будем использовать в качестве признаков.
Представленный ниже фрагмент кода скачивает нужную нам страницу и использует библиотеку NekoIITML[1][2] для синтаксического анализа (парсинга) возможно невалидного html, после чего фильтрует все текстовые ноды html и извлекает из них текст, разбивая его по пробелам и приводя в нижний регистр:
val url = new InputSource («https://en.wikipedia.org/.
wiki/Machine_learning").
val parser = new DOMParser ().
parser.parse (url)
val document =parser.getDocument () val allNodes = getAHNodes (ArrayBuffer (document)) val removeNonLiteralSymbolsPattern =" [Aa-z'] " .r
val terms = allNodes
filter (node = > node. isInstanceOf [Textlmpl]) //.
выделение только текстовых узлов.
map (node =>node.getTextContent) //извлечение текста.
flatMap (line => line. trim. split (««)) //получение списка всех слов.
map (term = > term. toLowerCase ()) //приведение к нижнему регистру.
map (term => removeNonLiteralSymbolsPattern. replaceAllln (term, «»)) //оставляем только буквы filter (term =>term.nonEmpty) //оставляем только непустые слова При наличии функции get AllNodes, которая извлекает все теш из верстки, можно получить все слова в тексте статьи. Вот такой результат получился на момент написания этих строк:
List (machine, learning, wikipedia, the, free, encyclopedia, …).
В результате имеется довольно много лишних мусорных слов, которые из текста надо изъять, например ориентируясь на длину слова.
После получения списка всех слов можно перейти к этапу унификации — приведению слов к нормальной форме. Для этого воспользуемся библиотекой Apache Morphology (для русского языка используется Russian Morphology[3]), которая позволяет получать нормальную форму слова:
val morphology = new EnglishLuceneMorphology О val simpleDictionary = (terms.map (term =>morphology. getNormalForms (term).get (0)).groupBy (term =>term) map {.
case (term, termRepeats) => term -> termRepeats. length } filter {.
case (term, termRepeats) => termRepeats >5)).keys.toList.
В данном примере для переданного терма используем первую же нормальную форму, которую дает EnglishLuceneMorphology, а затем убираем из списка слов все слова, которые повторяются на странице менее пяти раз. С учетом предварительной фильтрации слов длинней десяти символов и короче четырех, получается вот такой результат:
List (inductive, database, clustering, learning,.
machine, …).
В общем, неплохой результат для простейшего алгоритма подготовки данных. Теперь этот словарь можно использовать для создания наивного фильтра статей по машинному обучению. На основе него можно создать набор бинарных признаков — наличие слова в статье из словаря. Таким образом, получится матрица «объекты — признаки». С точки зрения определения чистых и сырых данных набор статей по машинному обучению, по которому строится словарь, — это сырые данные, а полученный словарь нормальных форм частотных слов — чистые данные.