Машинне навчання без Python, Anaconda та інших плазунів

Ні, ну я, звичайно, не всерйоз. Повинна бути межа, наскільки можна спрощувати предмет. Але для перших етапів, розуміння базових концепцій та швидкого «в'їзду» в тему, можливо, і допустимо. А як правильно назвати цей матеріал (варіанти: "Машинне навчання для чайників", "Аналіз даних з пелюшок", "Алгоритми для найменших"), обговоримо наприкінці.

До справи. Написав кілька прикладних програм на MS Excel для візуалізації та наочного уявлення процесів, що відбуваються у різних методах машинного навчання при аналізі даних. Seeing is believing, зрештою, як кажуть носії культури, яка і розробила більшість цих методів (до речі, далеко не все. Найпотужніший «метод опорних векторів», або SVM, support vector machine – винахід нашого співвітчизника Володимира Вапника, Московський Інститут управління). 1963 рік, між іншим, зараз він, щоправда, викладає і працює в США).

Три файли на огляд

1. Кластеризація методом k-середніх

Завдання цього виду відносяться до «навчання без вчителя», коли нам потрібно розбити вихідні дані на деяке заздалегідь відоме число категорій, але при цьому у нас немає жодної кількості «правильних відповідей», які ми маємо отримати з самих даних. Фундаментальне класичне завдання знаходження підвидів квіток ірису (Рональд Фішер, 1936 рік!), яке вважається першою ластівкою цієї галузі знання – саме такої природи.

Метод досить простий. Ми маємо набір об'єктів, представлених у вигляді векторів (наборів N чисел). У ірисів це – набори 4 чисел, що характеризують квітку: довжина та ширина зовнішньої та внутрішньої частки оцвітини, відповідно (Іриси Фішера - Вікіпедія.). Як відстань, чи міри близькості між об'єктами, вибирається звичайна декартова метрика.

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

Процес досить швидко сходиться. На картинках у двомірності це виглядає так:

1. Початковий випадковий розподіл точок на площині та число кластерів

Машинне навчання без Python, Anaconda та інших плазунів

2. Завдання центрів кластерів та віднесення точок до своїх кластерів

Машинне навчання без Python, Anaconda та інших плазунів

3. Перенесення координат центрів кластерів, перерахунок належності точок, доки центри не стабілізуються. Видно траєкторію руху центру кластера в кінцеве положення.

Машинне навчання без Python, Anaconda та інших плазунів

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

Погратися з цим файлом можна за цим посиланням (не забудьте увімкнути підтримку макросів. На віруси файли перевірені)

Опис методу у Вікіпедії Метод k-середніх

2. Апроксимація багаточленами та розбивка даних. Перенавчання

Чудовий вчений та популяризатор науки про дані К.В. Воронцов коротко говорить про методи машинного навчання як про «науку проведення кривих через точки». У цьому прикладі знаходимо закономірність у даних шляхом найменших квадратів.

Показано техніку розбиття вихідних даних на «навчальні» та «контрольні», а також такий феномен, як перенавчання, або «перепідстроювання» під дані. При правильній апроксимації ми матимемо якусь помилку на навчальних даних і трохи більшу – на контрольних. При неправильній – точне підстроювання під навчальні дані та величезну помилку на контрольних.

(Відомий факт, що через N точок можна провести єдину криву N-1 й ступеня, і цей спосіб у загальному випадку не дає потрібного результату. Інтерполяційний багаточлен Лагранжа у Вікіпедії)

1. Задаємо початковий розподіл

Машинне навчання без Python, Anaconda та інших плазунів

2. Ділимо точки на «навчальні» та «контрольні» у співвідношенні 70 на 30.

Машинне навчання без Python, Anaconda та інших плазунів

3. Проводимо апроксимуючу криву по навчальних точках, бачимо помилку, яку вона дає на контрольних даних

Машинне навчання без Python, Anaconda та інших плазунів

4. Проводимо точну криву через навчальні точки, і бачимо жахливу помилку на контрольних даних (і нульову на навчальних, але що толку?).

Машинне навчання без Python, Anaconda та інших плазунів

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

Файл доступний тут, перевірений антивірусом. Увімкніть макроси для коректної роботи

3. Градієнтний спуск та динаміка зміни помилки

Тут буде 4-вимірний випадок та лінійна регресія. Коефіцієнти лінійної регресії будуть визначатися кроками шляхом градієнтного спуску, спочатку всі коефіцієнти – нулі. На окремому графіку видно динаміку зменшення помилки в міру дедалі більш точного підстроювання коефіцієнтів. Є можливість подивитися всі чотири двовимірні проекції.

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

1. Генеруємо дані, задаємо крок градієнтного спуску

Машинне навчання без Python, Anaconda та інших плазунів

2. При правильному підборі кроку градієнтного спуску плавно і досить швидко приходимо до мінімуму

Машинне навчання без Python, Anaconda та інших плазунів

3. При неправильному підборі кроку градієнтного спуску проскакуємо максимум, графік помилки – «дерганний», збіжність займає більше кроків

Машинне навчання без Python, Anaconda та інших плазунів
и

Машинне навчання без Python, Anaconda та інших плазунів

4. При зовсім неправильному підборі кроку градієнтного спуску віддаляємося від мінімуму

Машинне навчання без Python, Anaconda та інших плазунів

(Щоб відтворити процес при показаних на картинках значення кроку градієнтного спуску, поставте галочку «еталонні дані»).

Файл - за цим посиланням, потрібно включити макроси, вірусів немає.

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

Джерело: habr.com

Додати коментар або відгук