Як нормалізувати дані для нейронної мережі та лісу рішень


10

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

Перше, на що я натрапив - це належна нормалізація даних. Одна особливість знаходиться в діапазоні , інша - в і є одна особливість, яка здебільшого приймає значення 8, а іноді і 7. Отже, як я читаю в різних джерелах, належна нормалізація вводу дані мають вирішальне значення для нейронних мереж. Як я з'ясував, існує багато можливих способів нормалізації даних, наприклад:[0,106][30,40]

  1. Нормалізація Min-Max : Діапазон введення лінійно перетворюється на інтервал (або альтернативно , це має значення?)[0,1][1,1]
  2. Нормалізація Z-Score : Дані перетворюються на нульову середню та одиничну дисперсію:
    ynew=yoldmeanVar

Яку нормалізацію слід вибрати? Чи потрібна нормалізація і для лісів, що приймають рішення? З нормалізацією Z-Score різні характеристики моїх тестових даних не лежать в одному діапазоні. Чи може це бути проблемою? Чи повинна нормалізуватися кожна функція за допомогою одного і того ж алгоритму, щоб я вирішив використовувати Min-Max для всіх функцій або Z-Score для всіх функцій?

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

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

Відповіді:


21

Я не згоден з іншими коментарями.

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

Випадкові ліси - це лише купа рішень, тому це не міняє цього обґрунтування.

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

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

Коли це має значення? Якщо ви використовуєте традиційне зворотне розповсюдження з функціями активації сигмоїдів, воно може наситити сигмовидні похідні.

Розглянемо сигмоподібну функцію (зелений) та її похідну (синій):

сигмовидної

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

Чи допомагає це нам знати, яка найкраща функція нормалізації? Але, звичайно! Перш за все, важливо використовувати нормалізацію, яка центрирує ваші дані, оскільки більшість реалізацій ініціалізують зміщення під нуль. Я б нормалізував між -0,5 і 0,5, . Але стандартний бал також хороший.XminXmaxXminX0.5

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

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


2
  1. Однозначної відповіді немає . Що б я рекомендував, - це масштабувати ваші дані, використовуючи різні підходи, а потім використовувати ту саму модель для прогнозування результатів у вашому наборі обміну (RF-системи будуть працювати нормально). Це має принаймні показати вам, який підхід до масштабування найкращий у вашій проблемі прогнозування.
  2. Не потрібно масштабувати свої дані для випадкових лісів
  3. Окремі діапазони не повинні бути проблемою, якщо вони послідовно масштабуються для початку. Це просто ілюструє, що між змінними є відмінності, лише у більш компактному масштабі, ніж раніше.
  4. Так - всі ваші дані слід масштабувати з однаковим підходом. Інакше значення у вашому перетвореному наборі даних можуть стосуватися не самих даних, а альго, що використовується для масштабування.

Сподіваємось, це допомагає.


1
Чудова відповідь, я просто додам, що це трохи залежить від конкретного розповсюдження даних, з яким ви маєте справу, і від того, чи вилучаєте ви люди, які випадають. Звичайні дані будуть виглядати дуже добре, якщо ви їх стандартизуєте. Однак рівномірний розподіл може виглядати набагато краще з нормалізацією min / max. Крім того, звичайний розподіл журналу з sigma = 10 може приховати більшу частину цікавої поведінки, близької до нуля, якщо ви min / max нормалізуєте його.
AN6U5

@ AN6U5 - Дуже хороший момент. Я, чесно кажучи, не надто замислювався над впливом масштабування на різні основні розподіли / видатки. Ви можете прочитати це сьогодні вранці!
plumbus_bouquet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.