Логістична регресія на великих даних


9

У мене набір даних близько 5000 функцій. Для цих даних я вперше використав тест Chi Square для вибору особливостей; після цього я отримав близько 1500 змінних, які показали залежність значущості від змінної відповіді.

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

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


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

Я використовую sklearn's, LogisticRegressionі це вирішує 4000 функцій, 20000 рядків проблеми приблизно за хвилину на моєму ноутбуці.
Thomas Ahle

Відповіді:


13

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


Чи є докази для цього? О / ш, це здається настільки ж евристичним, як і показ екрана.
Зубін

2
Пеналізоване оцінювання максимальної вірогідності враховує контекст, наприклад, в оцінці коефіцієнта регресії змінної lasso змінна буде меншою, якщо ви вважаєте 1000 невибраних змінних, ніж якщо ви вважаєте 100 невибраних змінних. В іншому випадку змінні вибираються упереджено, і повторне змінення змінної на другому кроці втрачає контекст.
Френк Харрелл

Не могли б ви детальніше пояснити, що ви маєте на увазі під упередженим тут? Мені цікаво, адже в тривіальному сенсі ласо завжди упереджене, тому вам доведеться посилатися на додатковий упередження. Також є кілька двоступеневих підходів з розумними властивостями, наприклад, pdfs.semanticscholar.org/d90a/…
jmb

2
У ласо навмисно зміщує коефіцієнти наближаються до нуля , щоб запобігти перенавчання. Ненаведені параметри призводять до занадто екстремальних прогнозованих значень. Установка «обраний» змінні в unpenalized моделі скасує необхідне ласо зміщення, створюючи багато перенавчання передбачених значень.
Френк Харрелл

10

Перший підхід полягає у використанні PCA для зменшення розмірності набору даних. Спробуйте утримати ~ 97% від загальної дисперсії, це може допомогти трохи.

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

EDIT: Одна з проблем з R полягає в тому, що ви можете використовувати тільки свою оперативну пам’ять, тому якщо у вас є лише 8 ГБ пам'яті, то це те, чим ви обмежені. Я зіткнувся з багатьма проблемами з цим і з тих пір перейшов на використання наукової програми python, яка, здається, набагато краще обробляє більші набори даних.

Дуже приємну діаграму, яка дає деяке уявлення про місця, які можна почати, залежно від розміру вашого набору даних, можна знайти тут: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg

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


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

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

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

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

4

Як вже говорив @Frank Harrell, використання еластичної сітки або LASSO для виконання санкціонованої регресії з усіма 5000 ознаками ( p ) буде хорошим початком для вибору функції (не можна просто видалити 3500 змінних, оскільки вони не є "статистично значимими" залежна змінна відсоток). Будь-який з цих методів може бути виконано з використанням пакету R, glmnet.

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


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

1

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

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

Зауважте, що "тисячі машин" необов'язково (!), Ви також можете налаштувати його на локальному робочому / домашньому робочому столі.

Повертаючись до MLlib, він виходить із наведених нижче алгоритмів:

  • K-означає кластеризацію з K-засобами || ініціалізація.
  • L1- та L2-регульована лінійна регресія.
  • L1- та L2-регульована логістична регресія.
  • Чергування найменших квадратів спільної фільтрації з чіткими рейтингами або неявними зворотними зв'язками.
  • Наївна Байєсова багаточленна класифікація.
  • Стохастичний градієнтний спуск.

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


0

Ви можете спробувати Vowpal Wabbit: Vowpal Wabbit . Він добре працює з дуже великими наборами даних та дуже великою кількістю функцій.

за даними веб-сайту:

Це проект, розпочатий у Yahoo! Дослідження та продовження в Microsoft Research, щоб створити швидкий, масштабований, корисний алгоритм навчання. VW - суть швидкості в машинному навчанні, здатна легко навчатись наборам даних тератератури. Завдяки паралельному навчанню він може перевищувати пропускну здатність будь-якого єдиного машинного мережевого інтерфейсу при лінійному навчанні, першим серед алгоритмів навчання.

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