Як порівняти ефективність методів вибору функцій?


10

Є кілька підходів до вибору функцій / змінних (див., Наприклад, Guyon & Elisseeff, 2003 ; Liu et al., 2010 ):

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

Багато опублікованих алгоритмів також реалізовані в інструментах машинного навчання, таких як R, Python тощо.

Який був би відповідний метод порівняння різних алгоритмів вибору функцій та вибору найкращого методу для заданої проблеми / набору даних? Наступним питанням буде, чи відомі якісь метрики, які вимірюють ефективність алгоритмів вибору функцій?

Відповіді:


4

Це складна проблема, і дослідники досягають значного прогресу.

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

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

Спосіб спробувати подолати ці два застереження - це використовувати машини, що підсилюють градієнт, що робить вибір функції автоматично. Варто зазначити, що статистичні властивості ГБМ є дещо неоднозначнішими, ніж у LASSO.

Якщо ви шукаєте непідконтрольний вибір функцій, здається, існує подібний підхід до регуляризації, який застосовують ці дослідники, але оцінка в цьому конкретному випадку стає менш очевидною. Люди спробують багато різних речей, таких як PCA / SVD або K-Means, які в кінцевому підсумку спробують знайти лінійне наближення до даних.

У цьому випадку типовими показниками продуктивності є помилка відновлення або RMSE кластерів.

Що стосується програмного забезпечення, R і Python мають GBM, LASSO, K-Means, SVD та PCA. GLMNET і XGBoost в R і Sklearn для Python є відповідними бібліотеками.


1

Я завжди розглядаю вибір функцій як крок до кінцевого результату.

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

Деякі типові види використання:

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

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

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

  • контроль над пристосуванням, як підказує попередня відповідь

  • ...

Отже, я не думаю, що існує загальне правило (як завжди в ML), але це є окремим випадком.

Просто особиста віра ...


0

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

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

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


0

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

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

Ще одним фокусом було б переконатися, що після permuting рядків змінні, позначені як відповідні, перестають класифікуватися як відповідні.

Вищезазначене стосується як підходів фільтра, так і обгортки.

Також обов'язково поводьтеся з випадками, коли їх взяття окремо (одна за одною) змінні не виявляють ніякого впливу на ціль, але коли спільно їх приймають, виявляють сильну залежність. Прикладом може бути відома проблема XOR (ознайомтеся з кодом Python):

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression,mutual_info_classif

x=np.random.randn(5000,3)
y=np.where(np.logical_xor(x[:,0]>0,x[:,1]>0),1,0)

plt.scatter(x[y==1,0],x[y==1,1],c='r',marker='x')
plt.scatter(x[y==0,0],x[y==0,1],c='b',marker='o')
plt.show()
print(mutual_info_classif(x, y)) 

Вихід:

Ілюстрація Python 3 XOR

[0. 0. 0.00429746]

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

Доброю ідеєю було б створити своєрідний орієнтир для методів вибору функцій, чи хоче хтось брати участь?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.