Збільшення кількості функцій призводить до падіння точності, але збільшення попереднього / відкликання


15

Я новачок у машинному навчанні. На даний момент я використовую класифікатор Naive Bayes (NB), щоб класифікувати невеликі тексти у 3-х класах як позитивні, негативні чи нейтральні, використовуючи NLTK та python.

Провівши деякі тести, з набором даних, що складається з 300 000 екземплярів (16 924 позитивні, 7 477 негативів і 275 599 нейтралів), я виявив, що при збільшенні кількості функцій точність знижується, але точність / виклик позитивних і негативних класів збільшується. це нормальна поведінка для класифікатора NB? Чи можна сказати, що було б краще використовувати більше функцій?

Деякі дані:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Спасибі заздалегідь...

Редагувати 2011/11/26

Я перевірив 3 різні стратегії вибору функцій (MAXFREQ, FREQENT, MAXINFOGAIN) за допомогою класифікатора Naive Bayes. По-перше, це точність та F1 заходи на клас:

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

Потім я побудував помилку поїзда та помилку тесту з поступовим набором тренувань, коли використовую MAXINFOGAIN з топ-100 та 1000 найкращих функцій:

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

Отже, мені здається, що хоча найвища точність досягається з FREQENT, найкращим класифікатором є той, який використовує MAXINFOGAIN, чи не так ? Під час використання перших 100 функцій у нас є упередженість (тестова помилка близька до помилки поїзда), і додавання більше прикладів тренувань не допоможе. Для покращення цього нам знадобиться більше функцій. З 1000 функцій зміщення зменшується, але помилка збільшується ... Це нормально? Чи потрібно мені додати більше функцій? Я не знаю, як це інтерпретувати ...

Знову дякую...


1
Це залежить від того, що ви маєте на увазі під «найкращим класифікатором», якщо ваше завдання - побудувати класифікатор з хорошою точністю загалом, я б вибрав БЕЗКОШТОВНО. З іншого боку, якщо, як і в більшості рідкісних завдань класифікації класів, ви хочете краще класифікувати рідкісний клас (це може бути клас "негативний" або "позитивний"), я вибрав би MAXINFOGAIN. Я думаю, що ваша інтерпретація кривих навчань правильна: зі 100 функцій у вас є упередження і ви можете їх додати, при 1000 ви маєте відхилення і ви можете їх видалити. Можливо, ви можете спробувати компроміс між 100 і 1000 функціями, щоб отримати кращі результати.
Симона,

Дякую за допомогу, Сімоне! Я все зрозумів, окрім останньої частини ... Скажіть, будь ласка, як ви бачите високу дисперсію з 1000 функціями? Оскільки різниця між помилками тесту та поїзду, здається, не настільки велика, мені це все одно виглядає як упередженість ...
kanzen_master

Я прикладу кілька прикладів у своїй відповіді. Коли криві не такі близькі, проблема класифікується як велика дисперсія . У вашому випадку, можливо, я вам сказав, що тому, що з меншими можливостями ви отримуєте кращі показники роботи, а тому з 1000 функціями, швидше за все, це буде проблема великої дисперсії. Замість того, щоб складати результати алгоритмів вибору функцій із заходами, обчисленими на навчальному наборі, спробуйте розділити свої дані під час навчання (2/3 з них) та валідації, а потім виконайте вибір функцій на навчальному наборі та оцініть його на тестовому наборі . Ви повинні знайти максимум посередині сюжету.
Симона,

Дякую за відповідь. Третій приклад вашої оновленої публікації (хороший результат, поїзд, криві тестових помилок не є ні занадто близькими, ні занадто далеко) виглядає як крива навчання, яку я побудував, використовуючи 1000 функцій, тому я подумав, що використання близько 1000 функцій буде "хорошим результатом". Однак у цьому випадку похибка вище, що не добре. Але, дивлячись на відстань між кривими, я не бачу великої дисперсії з 1000 можливостями ... (До речі, я вже розбиваю дані на 2/3 як навчальний набір, 1/3 як тестовий набір, виконуючи функцію відбір на навчальному наборі та оцінювання на тестовому наборі ...)
kanzen_master

1
ДОБРЕ. Я зовсім новачок у вивченні кривих, і ваші приклади були дійсно цікаві, і вони змусили мене зрозуміти їх. Таким чином, завдяки D T. Так, в обох випадках може виникнути упередженість. На мою думку, у вас дуже перекошений набір даних, і замість того, щоб перевіряти точність, важливо поглянути на F-міру. Подивившись на свої сюжети, здається, що чим більше функцій у вас є, тим краще; насправді полімер F покращується. Я чув, що у класифікації тексту, якщо у вас є особливості частоти слів у вашому тексті, звичайно використовувати багато функцій; btw Я до цього не звик і більше не можу тобі сказати.
Симона

Відповіді:


18

Точність проти F-міра

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

аcc=неутrал(неутrал+pосiтivе+негатivе)=0,9188

Добре, але марно.

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

Більше чи менше функцій?

Взагалі не краще використовувати більше функцій, а використовувати правильні функції. Більше можливостей краще, оскільки алгоритм вибору функцій має більше варіантів для пошуку оптимальної підмножини (я пропоную вивчити: вибір вибору перекреслених ). Що стосується NB, швидкий і надійний (але менш оптимальний) підхід полягає у використанні InformationGain (співвідношення) для сортування функцій у порядку зменшення та вибору верхнього k.

Знову ж таки, ця порада (крім InformationGain) не залежить від алгоритму класифікації.

РЕДАКЦІЯ 27.11.11

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

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

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

Приклад: Виконуючи 3-кратну перехресну перевірку 6 разів (так, рекомендується повторення з різним розділенням даних, Кохаві пропонує 6 повторень), ви отримуєте 18 значень. Я б зараз очікував, що ...

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

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

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

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


1
Дуже дякую за вашу відповідь, дуже чітке пояснення. Я використовую максимальний приріст інформації як свою стратегію вибору функцій та тестую, використовуючи 5-кратну перехресну перевірку. Я здогадуюсь, що для того, щоб знати, які основні характеристики k слід взяти, мені потрібно повторно перевірити алгоритм, щоразу збільшуючи кількість функцій, і взяти k, що дає найвищий f_score. Однак, я думаю, що "верхній k", ймовірно, змінюватиметься залежно від набору даних ... правда?
kanzen_master

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

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

1
@DT 1. Я не знаю лекції, отже, я не можу пов’язати пояснення Енджега зі своїм, вибачте. 2. Ні. Невелика кількість функцій => переобладнання => низький ухил, велика дисперсія. Висока кількість функцій => недооцінка => велика ухил, низька дисперсія. Я дійсно пропоную побудувати дисперсію помилки складок cv для різної кількості функцій та навчальних прикладів.
steffen

2
1. Штеффен, лекція доступна тут: ml-class.org/course/video/preview_list (Частина X, Розділ "Криві навчання") 2. Я бачу. Я думав, що коли багато можливостей, засвоєних під час тренінгу, => модель стає складною і перевершує навчальний набір =>
Варіант

5

Для того, щоб знати, чи корисно використовувати більше функцій, я побудував би криві навчання. Я думаю, що це чітко пояснено в 10-му підрозділі класу машинного навчання Стенфорда під назвою «Порадьтесь із застосуванням машинного навчання», який ви можете знайти тут: http://www.ml-class.org/course/video/preview_list .

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

Редагувати

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

λ .

Висока дисперсія

λ .

Висока упередженість

Отриманий хороший результат λ=1 як компромісний.

Хороший результат


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

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

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

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