Огляд вибору ознак

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

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

Ця стаття також вводить метод відбору ознак, званий History-based Feature Selection (HBFS). HBFS базується на експериментах з різними підмножинами ознак, вивченні патернів, які показують хороші результати (і які ознаки працюють добре, коли включені разом), і на цьому основі оцінці та виявленні інших підмножин ознак, які можуть працювати ще краще.

HBFS детальніше описано в наступній статті; ця стаття надає контекст, зокрема порівнюючи HBFS з іншими методами відбору ознак. Крім того, наступна стаття описує деякі експерименти для оцінки HBFS, порівнюючи його з іншими методами відбору ознак, що описані в цій статті.

Ця стаття, окрім того, що надає контекст для методу HBFS, також буде корисна для тих, хто просто цікавиться відбором ознак загалом, оскільки надає огляд цього процесу, що може бути цікавим для читачів.

Відбір ознак для точності моделі

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

У випадку моделей на основі дерев, наприклад, коли ми спускаємось глибше в дерева, точки поділу визначаються на основі все меншої кількості записів, і вибір неважливої ознаки стає все більш ймовірним. Видалення таких ознак з моделі, хоча зазвичай і не дає великих виграшів, часто забезпечує значне підвищення точності (використовуємо точність в загальному сенсі, пов’язаному з будь-якою метрикою, що використовується для оцінки моделі, а не обов'язково метрикою точності).

Відбір ознак для зменшення обчислювальних витрат

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

Відбір ознак є частиною процесу налаштування, але тут ми розглядаємо інші етапи налаштування, включаючи вибір моделі, вибір попередньої обробки та налаштування гіперпараметрів — ці етапи часто є дуже ресурсоємними, але стають значно швидшими при достатньому відборі ознак на початковому етапі.

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

Ці етапи можуть бути значно повільнішими, якщо вони виконуються з великою кількістю ознак.
Насправді, витрати на використання додаткових ознак можуть бути настільки значними, що перевищать вигоди від підвищення продуктивності за рахунок збільшення кількості ознак (де такі вигоди взагалі є — як було зазначено, використання більше ознак не обов’язково збільшує точність, і насправді може її знизити), і тоді має сенс прийняти незначне зниження продуктивності, щоб використовувати менше ознак.

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

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

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

Додаткові мотивації

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

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

Техніки відбору ознак

Існує багато способів виконати відбір ознак, і кілька способів класифікації цих методів. Те, що я представлю тут, не є стандартною класифікацією методів відбору ознак, але я вважаю, що це досить простий і корисний спосіб поглянути на це. Ми можемо поділити техніки на дві групи:

  • Методи, що оцінюють предиктивну здатність кожної ознаки окремо. Сюди входять так звані фільтраційні методи, а також деякі більш складні методи. Зазвичай методи цієї категорії оцінюють кожну ознаку по черзі якимось чином — наприклад, за кореляцією з цільовою ознакою або їх взаємною інформацією з цільовою ознакою тощо. Ці методи не враховують взаємодії ознак і можуть пропустити ознаки, які є предиктивними, але тільки в поєднанні з іншими ознаками, а також можуть включати ознаки, які є предиктивними, але дуже надмірними — коли є одна чи кілька ознак, які додають мало додаткової предиктивної здатності через наявність інших ознак.
  • Методи, що намагаються знайти ідеальний набір ознак. Це включає так звані обгорткові методи (я їх детальніше опишу нижче). Це також включає генетичні методи та інші методи оптимізації (рійова інтелектуальність тощо). Ці методи не намагаються ранжувати предиктивну здатність кожної окремої ознаки, а лише знаходять набір ознак, який разом працює краще за будь-який інший набір. Ці методи зазвичай оцінюють кілька кандидатних наборів ознак і потім обирають найкращий з них.
    Ці методи відрізняються між собою переважно тим, як вони визначають, які набори ознак оцінювати.

Ми розглянемо кожну з цих категорій трохи детальніше.

Оцінка предиктивної здатності кожної ознаки окремо

Існує кілька методів для відбору ознак, які надаються бібліотекою scikit-learn (а також кількома іншими бібліотеками, наприклад, mlxtend).

Більшість інструментів для відбору ознак у scikit-learn призначені для ідентифікації найбільш предиктивних ознак, розглядаючи їх одну за одною, оцінюючи їх асоціацію з цільовою ознакою. До них відносяться, наприклад, chi2, взаємна інформація, та ANOVA f-значення.

Бібліотека FeatureEngine також надає реалізацію алгоритму, що називається MRMR, який також намагається ранжувати ознаки, в цьому випадку на основі їх асоціації з цільовою ознакою, а також з іншими ознаками (він надає вищий ранг тим ознакам, що мають високу асоціацію з цільовою ознакою і низьку асоціацію з іншими ознаками).

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

Рекурсивне видалення ознак (Recursive Feature Elimination)

Рекурсивне видалення ознак, що надається бібліотекою scikit-learn, працює шляхом тренування моделі спочатку на повному наборі ознак. Це повинна бути модель, здатна надавати важливість ознак (наприклад, Random Forest, який надає атрибут featureimportance, або лінійна регресія, яка може використовувати коефіцієнти для оцінки важливості кожної ознаки, за умови, що ознаки були масштабовані).

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

1D моделі

1D моделі — це моделі, що використовують одну вимірювальну ознаку, тобто одну ознаку. Наприклад, ми можемо створити дерево рішень, яке тренується на прогнозуванні цільової ознаки, використовуючи лише одну ознаку. Можна тренувати таке дерево рішень для кожної ознаки в наборі даних, одну за одною, і оцінювати здатність кожної ознаки прогнозувати цільову ознаку. Для будь-яких ознак, які є предиктивними самі по собі, відповідне дерево рішень матиме кращі результати, ніж випадкове передбачення.

Використовуючи цей метод, також можна ранжувати ознаки, на основі точності 1D моделей, що тренуються на кожній ознаці.

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

Відбір ознак на основі моделі

Scikit-learn надає підтримку для відбору ознак на основі моделі.
Для цього модель тренується на всіх ознаках, як і в методі рекурсивного видалення ознак (Recursive Feature Elimination), але замість того, щоб видаляти ознаки одну за одною, ми просто використовуємо важливість ознак, надану моделлю (або можемо зробити щось подібне, використовуючи інший інструмент для оцінки важливості ознак, наприклад, SHAP). Наприклад, ми можемо тренувати модель LogisticRegression або RandomForest. Завдяки цьому ми можемо отримати важливість кожної ознаки та вибрати лише найбільш релевантні.

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

Тести на перестановки (Permutation tests)

Тести на перестановки подібні. Є різні варіанти того, як це може бути виконано, але для одного підходу: ми тренуємо модель на всіх ознаках, потім оцінюємо її, використовуючи валідаційний набір або крос-валідацію. Це дає базову оцінку того, як добре працює модель. Потім ми беремо кожну ознаку з валідаційного набору, одну за одною, і перемішуємо (перестановуємо) її, повторно оцінюємо модель і визначаємо, наскільки знижується її оцінка. Також можна повторно тренувати модель з кожною переставленою ознакою, одну за одною. Чим більший спад точності, тим важливіша ознака.

Метод Boruta

У методі Boruta ми беремо кожну ознаку і створюємо так звану тіньову ознаку (shadow feature), яка є перемішаною версією оригінальної ознаки. Отже, якщо спочатку у нас є, скажімо, 10 ознак у таблиці, ми створюємо тіньові версії кожної з них, отримуючи в результаті 20 ознак загалом. Потім ми тренуємо модель на цих 20 ознаках і оцінюємо важливість кожної ознаки. Знову ж таки, ми можемо використовувати вбудовані показники важливості ознак, які надаються багатьма моделями scikit-learn та іншими моделями (наприклад, CatBoost), або можемо використовувати бібліотеку, таку як SHAP (що може бути повільніше, але надасть більш точні показники важливості ознак).

Ми беремо максимальну важливість, надану будь-якій з тіньових ознак (які припускаються не мають предиктивної здатності), як поріг, що розділяє предиктивні та непредиктивні ознаки. Всі інші ознаки перевіряються, чи була їх важливість вища за цей поріг. Цей процес повторюється кілька разів, і кожна ознака оцінюється на основі кількості разів, коли її важливість була вищою за цей поріг.

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

Зазвичай, використовуючи ці методи, ми отримуємо ранжований порядок для кожної ознаки. Ми можемо заздалегідь визначити, скільки ознак ми хочемо використовувати. Наприклад, якщо ми знаємо, що хочемо використовувати 10 ознак, ми можемо просто взяти перші 10 найкращих ознак.

Або ми можемо протестувати на валідаційному наборі, використовуючи тільки першу ознаку, потім перші дві, потім перші три і так далі, до використання всіх ознак. Наприклад, якщо у нас є ранжування ознак (від найсильнішої до найслабшої): {E, B, H, D, G, A, F, C}, то ми можемо протестувати: {E}, потім {E, B}, потім {E, B, H} і так далі до повного набору {E, B, H, D, G, A, F, C}, з ідеєю, що якщо ми використовуємо тільки одну ознаку, то це буде найсильніша; якщо ми використовуємо тільки дві ознаки, то це будуть найсильніші дві, і так далі.
Знаючи оцінки для кожного з цих наборів ознак, ми можемо обрати або кількість ознак з найвищим значенням метрики, або кількість ознак, які найкраще збалансовують оцінку та кількість ознак.

Знаходження оптимального піднабору ознак

Основне обмеження вищезгаданих методів полягає в тому, що вони не повністю враховують взаємодії між ознаками. Зокрема, вони можуть не помітити ознаки, які були б корисні, навіть якщо вони не є сильними самі по собі (вони можуть бути корисними, наприклад, для деяких специфічних піднаборів даних, або коли їх зв'язок з іншою ознакою є предиктивним для цільової змінної), і вони можуть включати ознаки, які є надмірними. Якщо дві або більше ознак надають подібний сигнал, швидше за все, деякі з них можна видалити без значної втрати в точності моделі.

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

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

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

Методи, які намагаються знайти найкращий набір ознак, включають так звані wrapper методи (Wrapper methods), random search та різні методи оптимізації, а також деякі інші підходи. Метод, введений в цій статті, HBFS, також є прикладом методу, який намагається знайти оптимальний набір ознак. Ось їх опис.

Wrapper методи

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

З wrapper методами ми зазвичай починаємо або з порожнього набору ознак і додаємо ознаки одну за одною (це називається адитивним процесом), або починаємо з повного набору ознак і видаляємо ознаки одну за одною (це називається віднімальним процесом).

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

Якщо є ознаки {A, B, C, D, E, F, G, H, I, J}, то є 10 ознак. Спочатку ми тестуємо всі 10 з них одну за одною (вимагаючи 10 тестів).
Ми можемо з'ясувати, що ознака D працює найкраще, тому маємо набір ознак {D}. Далі тестуємо {D, A}, {D, B}, {D, C}, {D, E}, … {D, J}, що є 9 тестами, і обираємо найсильніший з них. Можливо, ми з'ясуємо, що {D, E} працює найкраще, отже, маємо {D, E} як набір ознак. Потім тестуємо {D, E, A}, {D, E, B}, … {D, E, J}, що є 8 тестами, і знову обираємо найсильніший з них, і продовжуємо так. Якщо мета — знайти найкращий набір з, скажімо, 5 ознак, ми можемо врешті-решт отримати, наприклад, {D, E, B, A, I}.

Ми можемо побачити, як цей підхід може не знайти найкращу комбінацію з 5 ознак, але він, зазвичай, працює достатньо добре. У цьому прикладі це, ймовірно, буде принаймні серед найсильніших піднаборів розміру 5, які можна ідентифікувати, хоча тести, описані в наступній статті, показують, що wrapper методи (Wrapper methods) зазвичай працюють менш ефективно, ніж сподівалися.

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

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

Random Search

Random search рідко використовується для вибору ознак, хоча використовується в багатьох інших контекстах, таких як налаштування гіперпараметрів. У наступній статті ми покажемо, що random search насправді працює краще для вибору ознак, ніж можна було б очікувати, але він страждає від відсутності стратегії, як у wrapper методах (Wrapper methods), і відсутності навчання протягом часу, як у методах оптимізації або HBFS.

Це може призвести до того, що random search буде тестувати кандидатів, які, ймовірно, будуть слабкими (наприклад, набір ознак, що дуже схожі на інші набори ознак, вже протестовані, де раніше протестовані набори показали погані результати). Також це може призвести до того, що не будуть протестовані комбінації ознак, які виглядають найбільш обіцяючими, зважаючи на інші експерименти, проведені до цього.

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

Методи оптимізації

Є кілька методів оптимізації, які можуть бути використані для визначення оптимального набору ознак, включаючи Hill Climbing, генетичні методи, Байєсівську оптимізацію (Bayesian Optimization) та розумову інтелігенцію роїв (swarm intelligence), серед інших.

Hill Climbing, застосований до вибору ознак, може працювати подібно до процесу, описаного в статті Рішення класичної задачі ставок на серію матчів за допомогою Hill Climbing.

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

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

Наприклад, ми можемо випадково почати з {B, F, G, H, J}, потім знайти невелику варіацію {B, C, F, G, H, J} (яка додає ознаку C), що працює краще, потім {B, C, F, H, J} (яка видаляє ознаку G), що працює ще трохи краще, і так далі.

В деяких випадках ми можемо потрапити в локальні оптимуми, і в такому разі інша техніка, під назвою імітація відпалу (simulated annealing), може бути корисною для подальшого прогресу.
Це дозволяє інколи обирати варіанти з нижчим результатом, що може допомогти уникнути потрапляння в стан, коли неможливо зробити жодної малої зміни, яка б покращила результат.

Генетичні алгоритми працюють подібно, хоча на кожному кроці розглядається багато кандидатів, а не лише один, і проводиться як комбінування, так і мутація (невеликі зміни, що вносяться до кандидатів у наборі ознак на кожному кроці у рішенні Hill Climbing, схожі на модифікації, що здійснюються над кандидатами в генетичних алгоритмах, де вони відомі як мутації).

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

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

Приклад використання генетичного алгоритму для іншої мети, побудови дерев рішень, показано в статті Створення сильніших дерев рішень за допомогою бутстрепінгу та генетичних алгоритмів.

Байєсівська оптимізація (Bayesian Optimization)

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

Для цього використовуємо тип регресора, званий Гаусівським процесом (Gaussian Process), оскільки він має здатність не тільки надавати оцінку для будь-якого іншого кандидата (у цьому випадку оцінюючи метрику для моделі, що була б навчена з використанням цього набору ознак), але й кількісно визначати невизначеність.

Наприклад, якщо ми вже оцінили даний набір ознак, скажімо, {F1, F2, F10, F23, F51} (і отримали результат 0.853), то ми можемо бути відносно впевнені в оцінці для дуже схожого набору ознак, скажімо: {F1, F2, F10, F23, F51, F53}, з оціненою метрикою 0.858 — хоча ми не можемо бути абсолютно впевненими, адже додатково ознака F53 може дати багато нового сигналу. Але наша оцінка буде більш певною, ніж для зовсім іншого набору ознак, наприклад {F34, F36, F41, F62} (якщо ще нічого схожого не було оцінено, то тут буде висока невизначеність).

Ще один приклад: набір {F1, F2, F10, F23} має одну ознаку менше — F51. Якщо F51 виявляється не прогнозуючою (зважаючи на оцінки інших наборів ознак з F51 і без F51), або є сильно надлишковою щодо, скажімо, F1, тоді ми можемо з певністю оцінити набір {F1, F2, F10, F23} — його результат буде практично таким самим, як у {F1, F2, F10, F23, F51}. Є певна невизначеність, але значно менша, ніж у випадку з зовсім іншими наборами ознак.

Таким чином, для будь-якого набору ознак Гаусівський процес може генерувати не лише оцінку для його результату, а й невизначеність, що надається у вигляді довірчого інтервалу. Наприклад, якщо нас цікавить макро f1-метрика, Гаусівський процес може навчитися оцінювати макро f1-метрику для будь-якого набору ознак. Для одного набору він може оцінити, скажімо, 0.61, і також вказати довірчий інтервал від 0.45 до 0.77, що означає, що з ймовірністю 90% (якщо ми використовуємо 90% для ширини довірчого інтервалу) f1-метрика буде між 0.45 і 0.77.

Байєсівська оптимізація працює для балансу між вивченням (exploration) і експлуатацією (exploitation).
На початку процесу ми, як правило, більше зосереджуємося на вивченні — у цьому випадку, на визначенні, які ознаки є прогнозуючими, які ознаки краще включати разом тощо. З часом ми більше зосереджуємося на експлуатації — використовуємо те, що ми дізналися, щоб спробувати визначити найбільш перспективні набори ознак, які ще не були оцінені, і тестуємо їх.

Байєсівська оптимізація (Bayesian Optimization) працює шляхом чергування між використанням так званого методу набуття (acquisition method), щоб визначити наступного кандидата (кандидатів) для оцінки, оцінювання цих кандидатів, навчання на основі отриманих результатів, повторного виклику методу набуття та так далі. Спочатку метод набуття, як правило, обирає кандидатів, які виглядають перспективними, але мають високу невизначеність (оскільки саме з цих кандидатів можна отримати найбільше навчання), а пізніше — кандидатів, які виглядають найбільш перспективними і мають відносно низьку невизначеність (оскільки ці кандидати найімовірніше будуть кращими за вже оцінені, хоча й є лише невеликими варіаціями найкращих наборів ознак, знайдених до цього).

У цій статті ми вводимо метод, званий Вибір Ознак на Основі Історії (History-based Feature Selection, HBFS), який, ймовірно, є найбільш схожим на Байєсівську оптимізацію, хоча й дещо простіший. Ми розглянемо його далі, а в наступній статті проведемо кілька експериментів, порівнюючи його ефективність з іншими методами, що вже розглядалися.

Вибір Ознак на Основі Історії (History-based Feature Selection, HBFS)

Тепер ми дуже швидко розглянули більшість інших основних методів вибору ознак, які часто використовуються сьогодні. Тепер я представлю метод Вибір Ознак на Основі Історії (HBFS). Це ще один метод вибору ознак, який я вважаю дуже корисним і про який, наскільки мені відомо, ще не було іншої реалізації чи навіть обговорення, хоча сама ідея є досить інтуїтивно зрозумілою та прямолінійною.

Оскільки не було іншої реалізації, яку я знав, я створив реалізацію на Python, яка тепер доступна на GitHub, HistoryBasedFeatureSelection.

Це надає код на Python, документацію, приклад ноутбука і файл для досить ретельного тестування HBFS.

Навіть якщо ви не використовуєте HBFS для своїх моделей машинного навчання, я сподіваюся, що вам буде цікаво ознайомитися з підходом. Ідеї повинні бути корисними і, сподіваюся, хоча б мінімально — це хороший спосіб думати про вибір ознак.

Я покажу, що HBFS, як правило, працює значно краще порівняно з іншими методами вибору ознак, тому, ймовірно, варто звернути на нього увагу для проектів, хоча ідеї настільки прості, що їх можна безпосередньо реалізувати — використання коду, доступного на сторінці GitHub, може бути зручним, але не є обов'язковим.

Я називаю цей метод Вибір Ознак на Основі Історії (HBFS), оскільки він навчається на основі історії спроб вибору підмножин ознак, вивчаючи їх ефективність на валідаційному наборі, тестуючи інші кандидатні набори ознак, навчаючись на них і так далі. З часом, у міру розвитку історії експериментів, модель здатна все краще визначати, які підмножини ознак найімовірніше покажуть гарні результати.

Ось основний алгоритм, представлений у псевдокоді:

Цикл задану кількість разів (за замовчуванням 20)  
| Генерувати кілька випадкових підмножин ознак, кожна з яких покриває близько половини   
| ознак  
| Навчити модель, використовуючи цей набір ознак з навчальними даними  
| Оцінити цю модель, використовуючи валідаційний набір  
| Записати цей набір ознак та їх оцінку  

Цикл задану кількість разів (за замовчуванням 10)  
| Навчити регресор RandomForest для прогнозування, для будь-якої заданої підмножини   
| ознак, оцінки моделі, що використовує ці ознаки. Це навчання  
| проводиться на основі історії оцінок моделей, зроблених до цього.

|   
| Цикл задану кількість разів (за замовчуванням 1000)  
| | Генерувати випадковий набір ознак  
| | Використовувати регресор RandomForest для оцінки результату за допомогою цього набору   
| | ознак  
| | Зберігати цю оцінку  
|  
| Цикл по заданій кількості найкращих оцінених кандидатів з попереднього циклу  
| (за замовчуванням 20)  
| | Навчити модель, використовуючи цей набір ознак з навчальними даними  
| | Оцінити цю модель, використовуючи валідаційний набір  
| | Записати цей набір ознак і їх оцінку   

вивести повний набір оцінених наборів ознак і їх оцінки,   
 впорядковані за оцінками

Ми можемо побачити, що це дещо простіше, ніж у випадку з Байєсівською оптимізацією, оскільки перша ітерація повністю зосереджена на вивченні (кандидати генеруються випадковим чином), а всі наступні ітерації цілком орієнтовані на експлуатацію — тут немає поступової тенденції до більшої експлуатації.

Це має певні переваги, оскільки процес зазвичай вимагає лише невеликої кількості ітерацій, зазвичай від 4 до 12 (так що дослідження кандидатів, які, ймовірно, є слабкими, має меншу цінність). Це також дозволяє уникнути налаштування процесу балансування між вивченням і експлуатацією.

Отже, функція набуття (acquisition function) досить проста — ми просто вибираємо кандидатів, які ще не були протестовані, але виглядають найбільш перспективними. Хоча це може (через певне зменшення дослідження) пропустити деяких кандидатів з сильним потенціалом, на практиці це дає змогу надійно і швидко виявляти найсильніших кандидатів.

HBFS працює досить швидко. Звісно, він повільніший за методи, що оцінюють кожну ознаку окремо, але за показниками ефективності він добре порівнюється з методами обгортки (wrapper methods), генетичними методами та іншими методами, що прагнуть знайти найсильніші набори ознак.

HBFS розроблений так, щоб користувачі могли зрозуміти процес вибору ознак, який він виконує під час роботи. Наприклад, одна з візуалізацій показує графік оцінок (як оцінених, так і реальних оцінок) для всіх наборів ознак, що були оцінені, що допомагає зрозуміти, наскільки добре система здатна оцінити результат для будь-якого кандидата набору ознак.

pic

HBFS також містить деяку функціональність, яка не є типовою для методів вибору ознак, таку як можливість для користувачів або: 1) просто максимізувати точність, або 2) балансувати цілі максимізації точності з мінімізацією обчислювальних витрат. Ці функції будуть описані в наступній статті.

Висновки

У цій статті було надано швидкий огляд деяких з найбільш поширених методів вибору ознак. Кожен з них працює трохи по-різному і має свої переваги та недоліки. Залежно від ситуації та мети — максимізації точності чи балансу точності та обчислювальних витрат — можуть бути віддавані переваги різним методам.

Це також було швидке введення в метод вибору ознак на основі історії (History-based Feature Selection, HBFS).

HBFS — це новий алгоритм, який я знайшов досить ефективним, і, як правило, хоча й не завжди, є кращим за методи, описані тут (жоден метод не буде строго кращим за всі інші).

У наступній статті ми розглянемо HBFS детальніше, а також опишемо деякі експерименти, що порівнюють його ефективність з іншими методами, описаними тут.

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

Усі зображення належать автору.

Перекладено з: An Overview of Feature Selection

Leave a Reply

Your email address will not be published. Required fields are marked *