ЧИСТІ ДАНІ І ВИБІР ОЗНАК

Передобробка даних

Всі ми стикаємося в житті з так званими сирими даними. Під сирими даними {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 = "[ A a-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, ...)

Загалом, непоганий результат для найпростішого алгоритму підготовки даних. Тепер цей словник можна використовувати для створення наївного фільтра статей по машинному навчання. На основі нього можна створити набір бінарних ознак - наявність слова в статті зі словника. Таким чином, вийде матриця «об'єкти - ознаки». З точки зору визначення чистих і сирих даних набір статей по машинному навчання, за яким будується словник, - це сирі дані, а отриманий словник нормальних форм частотних слів - чисті дані.

  • [1] Див .: Wickham Н. Tidy Data // Journal of Statistical Software. 2014. № 59.
  • [2] Сайт: www.nekolitml.sourceforgc.net
  • [3] URL: https: //codc.google.eom/p/russianmorphology
 
Переглянути оригінал
< Попер   ЗМІСТ   ОРИГІНАЛ   Наст >