Главная » Хабрахабр » Машинное обучение без Python, Anaconda и прочих пресмыкающихся

Машинное обучение без Python, Anaconda и прочих пресмыкающихся

Нет, ну я, конечно, не всерьез. Должен же быть предел, до какой степени возможно упрощать предмет. Но для первых этапов, понимания базовых концепций и быстрого «въезжания» в тему, может быть, и допустимо. А как правильно поименовать данный материал (варианты: «Машинное обучение для чайников», «Анализ данных с пеленок», «Алгоритмы для самых маленьких»), обсудим в конце.

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

Три файла на обозрение

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

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

У нас есть набор объектов, представленных в виде векторов (наборов N чисел). Метод достаточно прост. В качестве расстояния, или меры близости между объектами, выбирается обычная декартова метрика. У ирисов это – наборы 4 чисел, характеризующие цветок: длина и ширина наружной и внутренней доли околоцветника, соответственно (Ирисы Фишера — Википедия).

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

На картинках в двумерии это выглядит так: Процесс достаточно быстро сходится.

Первоначальное случайное распределение точек на плоскости и число кластеров 1.

Задание центров кластеров и отнесение точек к своим кластерам 2.

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

Математически это означает, что у оптимизируемой функции (сумме квадратов расстояний от точек до центров своих кластеров) мы находим не глобальный, а локальный минимум. В любой момент можно задать новые центры кластеров (не генерируя новое распределение точек!) и увидеть, что процесс разбиения не всегда является однозначным. В любом случае, у конечного множества всегда есть точная нижняя грань. Победить эту проблему можно либо неслучайным выбором начальных центров кластеров, либо перебором возможных центров (иногда их выгодно поместить точно в какую-нибудь из точек, тогда хотя бы есть гарантия, что мы не получим пустых кластеров).

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

Описание метода в Википедии — Метод k-средних

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

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

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

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

Задаем изначальное распределение 1.

Делим точки на «обучающие» и «контрольные» в соотношении 70 на 30. 2.

Проводим аппроксимирующую кривую по обучающим точкам, видим ошибку, которую она дает на контрольных данных 3.

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

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

Включите макросы для корректной работы Файл доступен тут, антивирусом проверен.

3. Градиентный спуск и динамика изменения ошибки

Здесь будет 4-мерный случай и линейная регрессия. Коэффициенты линейной регрессии будут определяться по шагам методом градиентного спуска, изначально все коэффициенты – нули. На отдельном графике видна динамика уменьшения ошибки по мере все более точной подстройки коэффициентов. Есть возможность посмотреть все четыре 2-мерные проекции.

И график зависимости ошибки от шага итерации будет не плавным, а «дерганным». Если задать слишком большой шаг градиентного спуска, то видно, что всякий раз мы будем проскакивать минимум и к результату придем за большее число шагов, хотя, в конце концов, все равно придем (если только не слишком сильно задерем шаг спуска — тогда алгоритм пойдет «в разнос»).

Генерируем данные, задаем шаг градиентного спуска 1.

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

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


и

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

(Чтобы воспроизвести процесс при показанных на картинках значениях шага градиентного спуска, поставьте галочку «эталонные данные»).

Файл – по этой ссылке, нужно включить макросы, вирусов нет.

Стоит ли перевести статью на английский? Как считает уважаемое сообщество, допустимо ли такое упрощение и метод подачи материала?


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Когда шифрование не поможет: рассказываем про физический доступ к устройству

В феврале мы опубликовали статью «Не VPN-ом единым. Шпаргалка о том, как обезопасить себя и свои данные». Один из комментариев побудил нас написать продолжение статьи. Эта часть — вполне автономный источник информации, но всё же рекомендуем ознакомиться с обоими постами. ...

[Из песочницы] Buildroot — часть 1. Общие сведения, сборка минимальной системы, настройка через меню

Введение Здесь будет практический опыт создания небольшой ОС с графическим интерфейсом и минимальным функционалом. В данной серии статей я хочу рассмотреть систему сборки дистрибутива buildroot и поделиться опытом её кастомизации. Buildroot может собрать систему из набора пакетов, которые ему предложили. ...