Мистецтво Feauture Engineering в машинному навчанні

Привіт, хабр!



У попередній статті (Введення в машинне навчання з допомогою Python і Scikit-Learn) ми з вами познайомилися з основними етапами вирішення завдань машинного навчання. Сьогодні детальніше поговоримо про техніку, які дозволяють помітно збільшити якість розроблюваних алгоритмів. Одна з таких технік — Feature Engineering. Відразу зазначимо, що це свого роду мистецтво, навчитися яким можна тільки прорешав величезна кількість завдань. Тим не менш, з досвідом виробляються якісь загальні підходи, якими хотілося б поділитися в даній статті.

Отже, як ми вже знаємо, майже будь-яка завдання починається з створення (Engineering) і відбору (Selection) ознак. Методи відбору ознак вивчені досить добре і вже існує велика кількість алгоритмів для цього (детальніше про них поговоримо наступного разу). А ось завдання створення ознак є свого роду мистецтвом і повністю лягає на плечі Data Scientist'а. Варто зазначити, що саме ця задача найчастіше є найскладнішою на практиці і саме завдяки вдалому добору та створенню ознак виходять дуже якісні алгоритми. Найчастіше на kaggle.com перемагають самі по собі прості алгоритми з добре відібраними ознаками (відмінні приклади — Heritage Provider Network Health Prize або Feature Engineering and Classifier for Ensemble KDD Cup 2010

Напевно, самий відомий і зрозумілий приклад Feature Engineering багато хто з вас вже бачили в курсі Andrew Ng. Приклад полягав у наступному: за допомогою лінійних моделей прогнозується ціна будинку в залежності від безлічі ознак, серед яких є такі, як довжина будинку і ширина. Лінійна регресія в даному випадку прогнозує ціну будинку, як лінійну комбінацію ширини і довжини. Але ж будь здоровому людині зрозуміло, що ціна будинку в першу чергу залежить від площі будинку, яка ніяк не виражається через лінійну комбінацію довжини і ширини. Тому, якість алгоритму істотно збільшується, якщо довжину і ширину помітити на їх твір. Тим самим, ми отримаємо новий ознака, яка найбільш сильно впливає на ціну будинку, а також скоротимо розмірність простору ознак. На мій погляд, це самий простий і наочний приклад створення ознак. Зауважимо, що дуже складно придумати метод, який для будь-який наперед заданої задачі давав би техніку побудови ознак. Саме тому піст і називається «Мистецтво Feature Engineering». Тим не менш, існує ряд простих методів і технік, якими б хотілося поділитися з власного досвіду:

Категоріальні ознаки
Припустимо, у наших об'єктів є ознаки, які приймають значення на кінцевому наборі. Наприклад, колір (color), який може бути синім (blue), червоним (red), зеленим (green), або його значення може бути невідомо (unknown). У такому випадку буває корисним додавати ознаки виду is_red, is_blue, is_green, is_red_or_blue і інші можливі комбінації.

Дати і час
Якщо серед ознак є дата або час — як правило, дуже часто допомагає додавати ознаки, відповідні часу дня, кількості прошеднего часу з певного моменту, виділення сезонів, пір року, кварталів. Також допомагає поділ часу на години, хвилини і секунди (якщо час дано у Unix-Time або ISO форматі). Варіантів в даному місці маса, кожен з яких підбирається під конкретну задачу.

Числові змінні
Якщо змінна речова, часто допомагає її округлення або поділ на цілу і речову частину (з подальшою нормалізацією). Або ж, часто допомагає приведення числового ознаки в категоріальний. Наприклад, якщо є така ознака як маса, то можна ввести ознаки виду «маса більше X», «маса від X до Y».

Обробка строкових ознак
Якщо є ознака, значенням якого є кінцеве кількість рядків стоїть на забувати, що в самих рядках часто міститься інформація. Наочним прикладом є задача Titanic: Machine Learning from Disaster, в якій імена учасників плавання мали приставки «Mr.», «Mrs.» і «Miss.», за яким легко витягти статевої ознака.

Результати інших алгоритмів
Часто в якості ознаки також можна додати результат роботи інших алгоритмів. Наприклад, якщо вирішується завдання класифікації, можна спочатку вирішити допоміжну задачу кластеризації, і в якості ознаки в початковій задачі взяти кластер об'єкта. Це зазвичай відбувається на основі первинного аналізу даних у разі, коли об'єкти добре кластеризуются.

Агреговані ознаки
Має також сенс додавати ознаки, які агрегують ознаки деякого об'єкта, тим самим, також скорочуючи розмірність ознакового опису. Як правило, це корисно в задачах, в яких один об'єкт містить кілька однотипних параметрів. Наприклад, людина, що має кілька автомобілів різної вартості. В даному випадку можна розглянути ознаки, відповідні максимальної/мінімальної/середньої вартості автомобіля цієї людини.

Додавання нових ознак
Цей пункт швидше треба віднести більше до практичних завдань з реального життя, ніж до змагань з машинного навчання. Більш докладно про це буде окрема стаття, зараз лише зазначимо, що часто, щоб ефективно вирішити завдання, потрібно бути експертом в конкретній області і розуміти, що впливає на конкретну цільову змінну. Повертаючись до прикладу з ціною квартири, кожен знає, що ціна залежить в першу чергу від площі, однак, у більш складній предметної області такі висновки робити досить складно.

Отже, ми розглянули кілька технік створення (Engineering) ознак в задачах машинного навчання, які можуть допомогти помітно збільшити якість існуючих алгоритмів. Наступного разу ми докладніше поговоримо про методи відбору (Selection) ознак. На щастя, там буде все простіше, бо для відбору ознак є вже розроблені техніки, в той час як створення ознак, як вже, напевно, помітив читач, є мистецтвом!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.