Який класифікатор машинного навчання вибрати? [зачинено]


207

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

Як дізнатися, який класифікатор я повинен використовувати?

  1. Дерево рішень
  2. SVM
  3. Байєсівський
  4. Нейронна мережа
  5. К-найближчі сусіди
  6. Q-навчання
  7. Генетичний алгоритм
  8. Марковські процеси прийняття рішень
  9. Конволюційні нейронні мережі
  10. Лінійна регресія або логістична регресія
  11. Підвищення, мішок, розбір
  12. Випадкове сходження на гірку або імітація відпалу
  13. ...

У яких випадках є одним із цих «природних» перших виборів, і які принципи вибору саме цього?

Приклади типу відповідей, які я шукаю (із вступу Manning et al. До книги пошуку інформації ):

а. Якщо ваші дані позначені міткою, але у вас є лише обмежена кількість, вам слід використовувати класифікатор із великим ухилом (наприклад, Naive Bayes) .

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

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

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

  2. Крім того, для дещо окремого питання, окрім стандартних байєсівських класифікаторів, чи існують "стандартні сучасні" методи для виявлення спаму в коментарях (на відміну від спаму електронної пошти)?


7
У відповідь на ваше «найкраще місце, щоб задати це питання», ви також можете спробувати stats.stackexchange.com
jxramos

Відповіді:


94

введіть тут опис зображення

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

Якщо ви Predicting Category:

  • Ти маєш Labeled Data
    • Вам потрібно слідувати Classification Approachі його алгоритмам
  • У вас немає Labeled Data
    • Вам потрібно піти Clustering Approach

Якщо ви Predicting Quantity:

  • Вам потрібно піти Regression Approach

Інакше

  • Можна піти Dimensionality Reduction Approach

У кожному згаданих вище підходах існують різні алгоритми. Вибір конкретного алгоритму залежить від розміру набору даних.

Джерело: http://scikit-learn.org/stable/tutorial/machine_learning_map/


60

Вибір моделі за допомогою перехресної перевірки може бути тим, що вам потрібно.

Перехресне підтвердження

Що ви робите, це просто розділити набір даних на k неперекриваються підмножини (складки), навчити модель, використовуючи складки k-1, і передбачити її ефективність, використовуючи склад, який ви залишили. Це ви робите для кожної можливої ​​комбінації складок (спочатку залиште 1-ю складку, потім 2-ю, ..., потім kth, і тренуйтеся з рештою складки). Закінчивши, ви оцінюєте середню продуктивність усіх складок (можливо також дисперсію / стандартне відхилення виконання).

Як вибрати параметр k, залежить від вашого часу. Звичайні значення для k складають 3, 5, 10 або навіть N, де N - це розмір ваших даних (це те саме , що перехресне підтвердження виходу-виходу ). Я віддаю перевагу 5 або 10.

Вибір моделі

Скажімо, у вас є 5 методів (ANN, SVM, KNN тощо) та 10 комбінацій параметрів для кожного методу (залежно від методу). Вам просто потрібно запустити перехресну перевірку для кожного методу та комбінації параметрів (5 * 10 = 50) та вибрати найкращу модель, метод та параметри. Потім ви повторно тренуєтеся з найкращим методом та параметрами для всіх своїх даних, і у вас є остаточна модель.

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

Вкладена перехресна перевірка

У вкладеній перехресній валідації ви здійснюєте перехресну перевірку на алгоритмі вибору моделі.

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

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


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

45

У книзі " OpenCV " є дві чудові сторінки на сторінках 462-463 . Шукаючи попередній перегляд Amazon для слова "дискримінація" (ймовірно, також книги Google), ви зможете побачити спірні сторінки. Ці дві сторінки - це найбільший дорогоцінний камінь, який я знайшов у цій книзі.

Коротко:

  • Підвищення - часто ефективне, коли доступна велика кількість даних про навчання .

  • Випадкові дерева - часто дуже ефективні і також можуть виконувати регресію .

  • Найближчі сусіди - найпростіша річ, яку ви можете зробити, часто ефективна, але повільна і вимагає багато пам’яті .

  • Нейронні мережі - повільно тренуватися, але дуже швидко бігати , все ж оптимальний виконавець для розпізнавання літер .

  • SVM - одне з найкращих з обмеженими даними , але втрачає від збільшення або випадкових дерев лише тоді, коли є великі набори даних .


39

Речі, які ви можете врахувати, вибираючи алгоритм, включатиме:

  1. Чи потрібно тренуватися поступово (на відміну від партійних)?

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

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

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

  3. Чи потрібно вам чи вашій аудиторії зрозуміти, як працює класифікатор?

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

  4. Яка швидкість класифікації вам потрібна?

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

  5. Складність .

    Нейрові мережі та SVM можуть обробляти складну нелінійну класифікацію.


2
Цей розділ книги може надати більше інформації про складність nlp.stanford.edu/IR-book/html/htmledition/…
supermus

31

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

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

Ще один хороший алгоритм для початківців - це випадкові ліси (складаються з дерев рішень), який можна легко масштабувати до будь-якої кількості вимірів і, як правило, має досить прийнятні показники. Нарешті, з'являються генетичні алгоритми , які гарно масштабують будь-який вимір і будь-які дані з мінімальними знаннями самих даних, при цьому найменшою і найпростішою реалізацією є мікробний генетичний алгоритм (лише один рядок коду С! Інман Харві в 1996), і однією з найскладніших є CMA-ES та MOGA / e-MOEA.

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

Як зауваження, якщо ви хочете, щоб теоретичні рамки перевірили свої гіпотези та алгоритми теоретичних виступів для даної проблеми, ви можете використовувати рамки навчання PAC (можливо, приблизно правильні) (будьте обережні: це дуже абстрактно і складно!), Але щоб Підсумовуючи, суть навчання PAC говорить про те, що ви повинні використовувати менш складний, але досить складний (складність - максимальна розмірність, яку може вмістити альго) алгоритм, який може відповідати вашим даним. Іншими словами, використовуйте бритву Occam.


11

Сем Ровейс говорив, що ви повинні спробувати наївного Байєса, логістичну регресію, k-найближчого сусіда та лінійну дискримінацію Фішера перед усім.


8

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

Отже, якщо ви контролювали дані, навчіть класифікатор Naive Bayes. Якщо у вас є непідтримувані дані, ви можете спробувати кластеризацію k-означає.

Ще один ресурс - це одне з лекційних відео з серії відеороликів Стенфордського машинного навчання , яке я дивився деякий час назад. У відео 4 або 5, я думаю, лектор обговорює деякі загальноприйняті умови, коли навчає класифікаторів, переваг / компромісів тощо.


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

5

Ви завжди повинні враховувати компроміс щодо виводу та прогнозування .

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


3

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

Це коротка шпаргалка для базового машинного навчання.

Тут ви можете перевірити свій сценарій за допомогою простого шпаргалки


-2

Перш за все, це залежить від того, з яким типом проблеми ви стикаєтесь, чи це класифікація, чи регресія. Тоді вибирайте свою модель розумно. Залежно від конкретної моделі одна конкретна модель перевершує інші моделі. Припустимо, ви працюєте над набором wine_dataset із бібліотеки sklearn, і спершу ви спробували навчити дані за допомогою ядра svm лінійно, і ви отримаєте якусь точність, а потім ви вважаєте, що це не задовольняє, тоді ви спробували навчити свої дані за допомогою DecisionTreeClassifier () а потім ви спробували з RandomForestClassifier (). Після цього будь-яка точність буде кращою, або ви можете сказати, що відповідає вашим даним, ви можете зробити висновок про це. Існує така невелика синтаксична різниця, яку ви знайдете, продовжуючи змінювати модель для тестування. Тож все найкраще і добре розумійте проблему.


1
Питання ОП (оригінальні плакати) було: Як мені знати, який класифікатор я повинен використовувати? Звідси робиться висновок, що вони шукають алгоритм класифікації . Будь-ласка, справді прочитайте питання, перш ніж відповісти.
Vetrivel PS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.