Породження і вибір моделей машинного навчання. Лекція в Яндексі

Застосування машинного навчання може включати роботу з даними, тонке налаштування вже навченого алгоритму і т. д. Але масштабна математична підготовка потрібна і на більш ранньому етапі: коли ви тільки вибираєте модель для подальшого використання. Можна вибирати «вручну», застосовуючи різні моделі, а можна і спробувати автоматизувати цей процес.


Під катом — лекція провідного наукового співробітника РАН, доктора наук та головного редактора журналу «Машинне навчання та аналіз даних» Вадима Стрижова, а також більшість слайдів.



Ми поговоримо про способи породження та вибору моделей на прикладі часових рядів інтернету речей.

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

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

Другий варіант. Моніторинг здоров'я людини. Примірному часових рядів, які знаходяться в цій області, є наступне. Зараз хворим тетраплегією, у яких відмовили кінцівки, ставлять прямо на кортекс датчик розміром з долоньку. Його не видно зсередини, він повністю закритий. Він дає 124 каналу з поверхні кортекса з частотою 900 герц. За цим тимчасовим рядах ми можемо прогнозувати рух кінцівок, то, як він хоче рухатися.

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

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



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



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



Ще більш складний приклад — значення електричного поля. По осі ординат відкладені частоти, по осі абсцис — час. Це теж часовий ряд. Якщо минулий часовий ряд — декартовий добуток часу на простір на простір, то тут ми имемм декартів добуток часу на частоти.



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

Розглянемо найпростіший варіант. У нас є часові ряди споживання електроенергії невеликого міста. Є ціна, обсяг споживання, довжина світлового дня, температура і т. д. Ці часові ряди периодичны. Споживання електроенергії коливається протягом року, протягом тижня і протягом доби.



Візьмемо довільний день. Синій — часові ряди, червоний — прогноз. 12 годин ночі, громадяни засинає, прокидається мафія. Часовий ряд падає, споживання падає. Вся Москва вночі горить вогнями, загалом-то, тому, що вона оточена ТЕЦ, енергію дівати нікуди, і ціна на електроенергію може навіть впасти нижче нуля, можна і доплачувати за електроенергію — лише б споживали.

6 годин, громадяни прокидаються, їдуть на роботу, п'ють чай, потім працюють, потім їдуть додому — цей цикл повторюється.

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



Яким чином вирішується таке завдання? Давайте на основі попереднього часового ряду побудуємо таку матрицю. Тут по рядках розташовані дні, приблизно 40 днів по 24 години. І ми легко можемо побачити тут особливі рядки — суботи та неділі. Видно, що в Анкарі — так само, як і в Москві, — в суботу люди ведуть себе досить активно, а в неділю відпочивають.

Кожен стовпець — в даному випадку 20 годин якогось дня тижня. Всього тут п'ять тижнів.



Уявімо цю матрицю у формальному вигляді. Ми беремо часовий ряд за хвостик, по днях тижня або по тижнях згортаємо, отримуємо матрицю об'єкт–ознака, де об'єкт — день, а ознака — годину, і вирішуємо стандартну задачу лінійної регресії.

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

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



Можна з тимчасовим поруч зробити наступне: взяти з нього корінь. Можна його залишити, можна взяти часовий ряд – корінь з тимчасового ряду, часовий ряд – логарифм з тимчасового ряду і т. п.

Таким чином, ми додаємо стовпці до матриці об'єкт–ознака, збільшуємо число стовпців, а число рядків залишається тим самим.

Більш того, для породження ознак ми можемо використовувати поліном Колмогорова-Габора. Перший член — самі часові ряди. Другий член — всі твори часових рядів. Третій — твір трійок часових рядів. І так далі, поки не набридне.

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



Він астолько хороший, що параметри взагалі втратили свій сенс.

Припустимо, рядок матриць плану — це тиждень, 7 днів, 168 годин. Є дані, наприклад, за три роки. У році 52 тижні. Тоді базова матриця за три роки — це 156 рядків на 168 стовпців.



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



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

Принцип простий. Прогноз на завтра на 12 годин залежить від значень за 12 годин попереднього дня, позавчорашнього і т.п. Таким чином, ми можемо залишити тільки ці значення, а все інше викинути.



Що саме треба викидати? Представимо матрицю х як набір стовпців. Ми наближаємо часовий ряд лінійної y — або необов'язково лінійної — комбінацією стовпців матриці х. Нам хотілося б знайти такий стовпець χ, який був би ближче до y. Значна частина алгоритмів вибору ознак вибере нам стовпці χ1 і χ2, якщо ми захочемо залишити два стовпці. Але серед тих, що ми породили, нам потрібні χ3 і χ4. Вони дають одночасно точну і стійку модель. Точну — тому що лінійна комбінаціях3 і χ4 в точності наближає y, а стійку — тому що вони ортогональны.

Чому саме два стовпця? Треба подивитися, в якому просторі ми працюємо, скільки об'єктів в намальованій вибірці. Тут три об'єкта. Матриця х містить 3 рядки та 6 стовпців.



Як працюють алгоритми вибору ознак? Як правило, вони використовують функції помилки. У лінійної регресії це суми квадратів регресійних залишків. І є два типи алгоритмів вибору ознак. Перший тип — регуляризующие алгоритми. Вони крім помилки використовують, як було сказано Костянтином В'ячеславовичем на минулій лекції, ще й деякий регуляризатор, штраф на значення параметрів і якийсь коефіцієнт, який відповідає за важливість штрафу.

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

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

При цьому важливо розуміти, наскільки стовпці корелюють один з одним. Як це з'ясувати?



Розглянемо простір параметрів нашої моделі, вектор w, і обчислимо значення помилки в різних точках w. На малюнку праворуч показано сам простір, w1 w2. Два ваги отсемплированы, по 100 точок на кожен. Виходить 100 пар ваг. Кожна точка цього малюнка — значення функції помилки. Зліва, для зручності, те ж саме —експонента від мінус значення функції помилки.

Зрозуміло, що оптимальні значення лежать десь в точці 0,2–0,25 і це те, що ми шукаємо. А важливість параметрів визначається так: давайте з оптимального значення трошки качнем значень параметрів. Якщо ми змінюємо w, функція помилки практично не змінюється. Навіщо нам такий параметр потрібен? Напевно, не потрібен.

Тут трохи хитнули по осі w2 значення параметрів, функція помилки впала — чудово. Ця основа аналізу простору параметрів — спосіб знайти мультикоррелирующие ознаки.

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

Другий спосіб. Те ж саме. Ми перетворимо часові ряди з допомогою якихось параметричних або непараметричних ознак.

Третій спосіб дуже цікавий і перспективний. Ми наближаємо шматочки тимчасового ряду якимись моделями. Будемо називати це локальним моделюванням. І використовуємо параметри цих моделей як ознаки для прогнозу.

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



Погана новина. Щоб побудувати матрицю плану, відносини частот до семплированию часових рядів, якщо ряди разношкальные, повинні бути короткими. При цьому матриця плану розростається. Правда, можна якісь частинки часових рядів викинути, як показано тут. Весь часовий ряд «довжина світлового дня» не потрібен, потрібна тільки одна точка в добу, і матриця плану буде виглядати так: 24 точки в рядку — це споживання електроенергії, а одна точка і ще одна — довжина світлового дня.



Ось часовий ряд. Те, що ми вже розглянули. x ln x, по парам, — сума, різниця, добуток і різні інші комбінації.



Ось непараметричні трансформації. Просто усереднена сума, стандартне відхилення. Гістограма квантилів тимчасового ряду.



Наступний варіант. Непараметричні перетворення, перетворення Хаара. Ми беремо середнє арифметичне і ставимо його як одну точку замість двох. Або беремо різницю. Таким чином ми породжуємо ознака і знижуємо кількість періодів у часовому ряді, відповідно знижуємо розмірність простору.



Наступний набір твірних функцій — параметричні функції. За допомогою них ми можемо наближати часовий ряд. Перше — цей наближений ряд використовувати замість початкового. Друге — використовувати самі параметри, позначені як w.

Константа, парабола, гіпербола, логарифмічна сигмоїда, твір, степеневі функції, експоненціальні функції.



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



Наступний клас твірних функцій — параметричні перетворення часових рядів. Тут нам цікаві самі параметри рядів. Ми беремо перераховані вище функції і збираємо їх параметри вектор b. У нас є два типи параметрів: перший — параметри самих апроксимуючих функцій, функції локальної апроксимації, а другий вектор — параметри моделі, ті, які були розглянуті раніше, тобто параметри ваги лінійних комбінацій стовпців матриці Х. Ми їх можемо налаштовувати одночасно, а можемо налаштовувати ітераційно і використовувати їх в тому числі як стовпці матриці плану. Іншими словами, матриця плану, Х, ітеративне змінюється.

Звідки ще ми можемо отримати параметри моделей? Буду розглядати з кінця. Сплайни при апроксимації тимчасового ряду мають параметри, вузли сплайнів.

Швидкі перетворення Фур'є. Ми можемо використовувати замість тимчасового ряду його спектр і теж вставляти його в матрицю об'єкт–ознака.

Важливий і добре працює прийом — використовувати параметри методу «Singular structural analysis» або «Гусениця».



Цей метод працює наступним чином. Спочатку ми будували матрицю Х — давайте побудуємо нову матрицю за схожою схемою. Зараз локальна матриця апроксимації буде називатися Н, і вона буде побудована так: сегмент тимчасового ряду входить до рядка матриці не один за іншим, а з перехлестом. Нехай тут p = 1, k = 3. Матриця з індексами буде виглядати як 1,2,3; 2,3,4; 3,4,5 і так далі до кінця.

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

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

Працює це ось чому.

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



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



Ось останній спосіб породження ознак. Ознаки метричні. Ми вже якимось чином породили матрицю плану — давайте подивимося, як її стовпці розташовані в якомусь метричному просторі, наприклад в евклідовому.

Ми призначаємо метрику ρ і виконуємо кластеризацію рядків матриці об'єкт–ознака, Х.

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

На практиці це виглядає наступним чином. Щоб відстань було обчислено коректно, ми спочатку вирівнюємо часові ряди. Тут показано шість класів рядів для акселерометра: людина йде, йде вгору сходами, вниз по сходах, стоїть і лежить. Пропонується спочатку вирівняти ряди якийсь процедурою і отримати, наприклад, такі ряди. Далі — обчислити середні значення або центроїди для кожного ряду.



А потім обчислити відстані від кожного часового ряду в матриці Х, об'єкт–ознака, до цих центроїдів.

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



Це дані електроспоживання в Польщі, вони погодинні. Крім того, їм супроводжують різні часові ряди, які їх описують. Вставимо в цю вибірку ще і пропуски. Викинемо частина даних, наприклад 3, 5, 10%. Заповнимо їх, а потім спробуємо спрогнозувати значення всіх рядів відразу.



Праворуч ми отримаємо ось таку матрицю об'єкт–ознака. Зліва часові ряди, нарубані на шматочки. Перші 24 часових рядів добу. Замість зигзага слід було б побудувати гістограму.



Які моделі у нас є? Найкраща модель — прогноз на завтра, те ж саме, що і сьогодні. Будемо називати це базовим методом.

Лінійна регресія, яку ми розглянули спочатку. Метод опорних векторів. Нейронна мережа random forest. Звичайно, не вистачило четвертого чарівного методу. Є чотири методи, які завжди працюють добре, якщо завдання взагалі вирішується: нейронні мережі, опорні вектора, random forest і градієнтний бустинг.

Порівняємо, як працюють чотири різних методи при різних способах породження ознак. Ось знову ці чотири способи. Історичні часові ряди. Наближення часових рядів. І — відстані від часових рядів до центроїдів.



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



Краще на неї дивитися наступним чином. Зазначені плями повинні бути жорсткими. Чим плями більше, тим краще. Це число входжень пари модель–ознака в хороші комбінації, які дають мінімальну помилку. Ми бачимо, що у нас хороші пари — це лінійна регресія і незмінений часовий ряд. Support vector machine і значення ряду після перетворення гусениці. Далі random forest і кубічна апроксимація. Нейронні мережі та пакунки.



За часовими рядами. Візьмемо самі гарні пари, в даному випадку це support vector regression та гусінь. Подивимося, наскільки часто зустрічаються хороші пари за різними часовими рядами. Енергія, температура, вологість, вітер, сонце. При навчанні гарна пара виявилася тільки одна — support vector regression на вихідних часових рядах. А на тесті у нас хороші варіанти, ви їх бачите на графіку.



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

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.