machine learning что это такое
Machine Learning – не только нейронки
Нейронные сети и глубокое обучение (deep learning) у всех на слуху, но нейросети – это лишь подобласть такого обширного предмета, как машинное обучение (machine learning). Существует несколько сотен других алгоритмов, которые способны быстро и эффективно решать задачи искусственного интеллекта и в большинстве случаев являются более интерпретируемыми для человека. В этой статье рассмотрим алгоритмы классического машинного обучения, принцип работы нейросетей, подготовку данных для обучения моделей и задачи, которые решают с помощью искусственного интеллекта.
Основные задачи машинного обучения
Восстановление регрессии (прогнозирования) – построение модели, способной предсказывать численную величину на основе набора признаков объекта.
Классификация – определение категории объекта на основе его признаков.
Кластеризация – распределение объектов.
Допустим, есть набор данных со статистикой по приложениям. В нем есть следующие сведения: размер, категория, количество скачиваний, количество отзывов, рейтинг, возрастной рейтинг, жанр и цена. С помощью этого набора данных и машинного обучения можно решить такие задачи:
Прогнозирование рейтинга приложения на основе признаков: размер, категория, возрастной рейтинг, жанр и цена – задача регрессии.
Определение категории приложения на основе набора признаков: размер, возрастной рейтинг, жанр и цена – задача классификации.
Разбиение приложений на группы на основании множества признаков (например, количество отзывов, скачиваний, рейтинга) таким образом, чтобы приложения внутри группы были более похожи друг на друга, чем приложения разных групп.
Нейронные сети (многослойный перцептрон)
Существует мнение, что лучшие идеи для изобретений человек заимствует у природы. Нейронные сети – это именно тот случай, ведь сама концепция нейросетей базируется на функциональных особенностях головного мозга.
Принцип работы
Есть определенное количество нейронов, которые между собой связаны и взаимодействуют друг с другом путем передачи сигналов. Также есть рецепторы, которые получают информацию, поступающую извне, и исполнительный орган, на который приходит итоговый сигнал. По схожему принципу работают искусственные нейросети: есть несколько слоев с нейронами и связи между ними (каждая связь имеет свой весовой коэффициент). По связям передаются сигналы в виде численных значений, первый слой выполняет собой роль рецепторов, то есть получает набор признаков для обучения, и есть выходной слой, который выдает ответ.
Нейронные связи в головном мозге («Создаем нейронную сеть», Тарик Рашид)
Пример искусственной трехслойной нейросети («Создаем нейронную сеть», Тарик Рашид)
Каждый слой нейросети оперирует разными представлениями о данных. На рисунке ниже можно увидеть пример использованиям глубокого обучения (нейросети) для распознавания образа на картинке. На входной слой нам поступают пиксели изображений, далее после вычислений между входным и первым скрытым слоем мы получаем границы, на втором скрытом слое – контуры, на третьем – части объектов, на выходном – вероятности принадлежности изображения к каждому типу объектов.
Пример использования нейросети для распознавания образа ( «Глубокое обучение», Ян Гудфеллоу)
Как настраивать
Настраивается путем задания количества узлов, скрытых слоев и выбора функции активации. В искусственных нейронных сетях функция активации нейрона отвечает за выходной сигнал, который определяется входным сигналом или набором входных сигналов.
Задачи: классификация, регрессия, кластеризация.
Классические алгоритмы машинного обучения
K-ближайших соседей
Метод K-ближайших соседей – простой и эффективный алгоритм, его можно описать известной поговоркой: “Скажи мне, кто твой друг, и я скажу, кто ты”.
Принцип работы
Пусть имеется набор данных с заданными классами. Мы можем определить класс неизвестного объекта, если рассмотрим определенное количество ближайших объектов (k) и присвоим тот класс, который имеет большинство “соседей”. Посмотрим на рисунок ниже.
Есть набор точек с двумя классами: синие крестики и красные кружки. Мы хотим определить, к какому классу относится неизвестная зеленая точка. Для этого мы берем k ближайших соседей, в данном случае 3, и смотрим, к каким классам они относятся. Из трех ближайших соседей больше оказалось синих крестиков, соответственно, мы можем предположить, что зеленая точка также, скорее всего, относится к этому классу.
Как настраивать
Необходимо подобрать параметр k (количество ближайших соседей) и метрику для измерения расстояний между объектами.
Задачи: классификация, также может применяться и для задач регрессии.
Линейная регрессия
Линейная регрессия – простая и эффективная модель машинного обучения, способная решать задачи быстро и недорого.
Принцип работы
Модель линейной регрессии можно описать уравнением
Здесь x – это значения признаков, y – целевая переменная, a – весовые коэффициенты признаков. При обучении модели весовые коэффициенты подбираются таким образом, чтобы как можно лучше описывалась линейная зависимость признаков от целевой переменной.
Пример: задача предсказания стоимости квартиры в зависимости от площади и удаленности от метро в минутах. Целевой переменной (y) будет являться стоимость, а признаками (x) – площадь и удаленность.
На рисунке ниже также представлен пример построения линейной регрессии. Красная прямая более точно описывает линейную зависимость x от y.
Как настраивать
Для многих моделей Machine Learning, в частности и для линейной регрессии, можно улучшить итоговое качество с помощью регуляризации.
Регуляризация в статистике, машинном обучении, теории обратных задач — метод добавления некоторых дополнительных ограничений к условию с целью решить некорректно поставленную задачу или предотвратить переобучение, то есть ситуацию, когда модель хорошо показывает себя на тренировочный данных, но перестаёт работать на новых.
Распространенные методы регуляризации для повышения качества модели линейной регрессии:
Ridge — один из методов понижения размерности. Применяется для борьбы с переизбыточностью данных, когда независимые переменные коррелируют друг с другом (мультиколлинеарность), вследствие чего проявляется неустойчивость оценок коэффициентов линейной регрессии.
LASSO — также как и Ridge, применяется для борьбы с переизбыточностью данных.
Elastic-Net — модель регрессии с двумя регуляризаторами L1, L2. Частными случаями являются модели LASSO L1 = 0 и Ridge регрессии L2 = 0.
Задачи: регрессия.
Логистическая регрессия
Логистическая регрессия – также простая и эффективная модель машинного обучения, способная решать задачи быстро и недорого.
Принцип работы
Указанная выше сумма проходит через функцию сигмоиды, которая возвращает число от 0 до 1, характеризующее вероятность отнесения объекта к классу 1. Пример: логистическую регрессию часто применяют в задачах кредитного скоринга, когда по определенным данным о клиенте нужно определить, стоит ли выдавать ему кредит.
Иллюстрация алгоритмов линейной и логистической регрессии (источник)
Как настраивать
Задачи: классификация.
Метод опорных векторов (SVM)
Принцип работы
Чтобы лучше всего понять алгоритм метода опорных векторов, рассмотрим рисунок. На рисунке приведен пример двух линейно разделимых классов в двумерном пространстве. Идея алгоритма заключается в нахождении оптимальной разделяющей прямой (или гиперплоскости для более высоких пространств) для отделения объектов одного класса от другого. Пунктирные линии выделяют разделяющую полосу и проводятся через объекты, которые называют опорными. Чем шире разделяющая полоса, тем качественнее модель SVM. Чтобы определить класс объекта, достаточно определить, с какой стороны гиперплоскости он находится.
Как настраивать
Необходимо подобрать оптимальное ядро (функцию переводящую признаковое пространство в более высокую размерность), если линейная зависимость слабо выражена.
Задачи: классификация и регрессия.
Сравнение классических алгоритмов с нейросетью
Для примера мы взяли датасет со статистикой приложений в Play Market. Датасет содержит следующие данные: размер приложения, возрастной рейтинг, количество скачиваний, жанр, категория и др. На данном датасете были обучены модели: линейная регрессия, метод опорных векторов, нейронная сеть (многослойный перцептрон).
В ходе экспериментов были подобраны следующие параметры для моделей машинного обучения:
Линейная регрессия – модели линейной регрессии с регуляризацией не показали результат, превосходящий качество классической линейной регрессии.
Метод опорных векторов – модель метода опорных векторов с RBF-ядром показала лучший результат по сравнению с другими ядрами.
Многослойный перцептрон – оптимальный результат показала модель с 4 слоями, 300 нейронами и функций активацией ReLu. При попытках увеличить количество слоев и нейронов прирост качества не наблюдался.
Решена задача прогнозирования потенциального рейтинга приложения в зависимости от его признаков.
Результаты ошибки среднего отклонения от истинного значения целевой переменной в процентах для каждой модели:
Линейная регрессия – 6.13 %
Метод опорных векторов – 6.01%
Нейронная сеть – 6.41%
Таким образом, классические алгоритмы машинного обучения и нейросети показали приблизительно одинаковое качество. Это связано с тем, что нейросети хорошо обучаются на датасетах с большим размером и обычно применяются для решения задач, где зависимость в данных очень сложна. Поэтому для решения данной задачи можно обойтись применением классических алгоритмов и не прибегать к использованию нейросетей.
На гистограмме ниже представлены итоговые весовые коэффициенты a, полученные при обучении модели линейной регрессии. Чем больше столбик, тем выше влияние признака на целевую переменную. Если столбик направлен вверх, то он оказывает положительное влияние на рост целевой переменной, если вниз – то отрицательное. Другими словами, если приложение имеет жанр “Other” или “Tools”, то, скорее всего, его рейтинг будет высоким, а если у него категория “FAMILY” или “GAME” – то, вероятно, низким. Данная интерпретация весовых коэффициентов линейной регрессии бывает очень полезной при анализе данных.
Гистограмма значений коэффициентов линейной регрессии
Больше наших статей по машинному обучению и обработке изображений:
Простыми словами: как работает машинное обучение
В последнее время все технологические компании твердят о машинном обучении. Мол, столько задач оно решает, которые раньше только люди и могли решить. Но как конкретно оно работает, никто не рассказывает. А кто-то даже для красного словца машинное обучение называет искусственным интеллектом.
Задача: отличить осмысленный текст от белиберды
Текст, который пишут настоящие люди, выглядит так:
Для человека задача кажется тривиальной, ведь сразу видно, где чистое, а где зловредное, но вот формализовать разницу или, тем более, объяснить ее компьютеру — уже сложнее. Мы используем машинное обучение: сначала дадим алгоритму примеры, он на них «обучится», а потом будет сам правильно отвечать, где что.
Алгоритм
Наш алгоритм будет считать, как часто в нормальном тексте одна конкретная буква следует за другой конкретной буквой. И так для каждой пары букв. Например, для первой чистой фразы — «Могу творить, могу и натворить!» — распределение получится такое:
ат 1 | мо 2 | ри 2 |
во 2 | на 1 | тв 2 |
гу 2 | ог 2 | ть 2 |
ит 2 | ор 2 |
Что получилось: за буквой в следует буква о — два раза, — а за буквой а следует буква т — один раз. Для простоты мы не учитываем знаки препинания и пробелы.
На этом этапе мы понимаем, что для обучения нашей модели одной фразы мало: и сочетаний недостаточное количество, и разница между частотой появления разных сочетаний не так велика. Поэтому надо взять какой-то существенно больший объем данных. Например, давайте посчитаем, какие сочетания букв встречаются в первом томе «Войны и мира»:
то 8411 | на 6236 | на 6236 |
ст 6591 | не 5199 | оу 31 |
на 6236 | по 5174 | мб 2 |
оу 31 | ен 4211 | тж 1 |
Разумеется, это не вся таблица сочетаний, а лишь ее малая часть. Оказывается, вероятность встретить «то» в два раза выше, чем «ен». А чтобы за буквой т следовало ж — такое встречается лишь один раз, в слове «отжившим».
Отлично, «модель» русского языка у нас теперь есть, как же ее использовать? Чтобы определить, насколько вероятно исследуемая нами строка чистая или зловредная, посчитаем ее «правдоподобность». Мы будем брать каждую пару букв из этой строки, определять по «модели» ее частоту (по сути реалистичность сочетания букв) и перемножать эти числа:
F(мо) * F(ог) * F(гу) * F(тв) *… = 2131 * 2943 * 474 * 1344 *… = правдоподобность
Также в финальном значении правдоподобности следует учесть количество символов в исследуемой строке — ведь чем она была длиннее, тем больше чисел мы перемножили. Поэтому из произведения извлечем корень нужной степени (длина строки минус один).
Использование модели
Теперь мы можем делать выводы: чем больше полученное число — тем правдоподобнее исследуемая строка ложится в нашу модель. Стало быть, тем больше вероятность, что ее писал человек, то есть она чистая.
Если же исследуемая строка содержит подозрительно большое количество крайне редких сочетаний букв (например, ёё, тж, ъь и так далее), то, скорее всего, она искусственная — зловредная.
Для строчек выше правдоподобность получилась следующая:
Чтобы не гадать, что такое «много», а что — «мало», лучше доверить определение порогового значения самой машине (пусть обучается). Для этого скормим ей некоторое количество чистых строк и посчитаем их правдоподобность, а потом скормим немного зловредных строк — и тоже посчитаем. И вычислим некоторое значение посередине, которое будет лучше всего отделять одни от других. В нашем случае получится что-то в районе 500.
В реальной жизни
Давайте осмыслим, что же у нас получилось.
1. Мы выделили признаки чистых строк, а именно пары символов.
В реальной жизни — при разработке настоящего антивируса — тоже выделяют признаки из файлов или других объектов. И это, кстати, самый важный шаг: от уровня экспертизы и опыта исследователей напрямую зависит качество выделяемых признаков. Понять, что же на самом деле важно — это все еще задача человека. Например, кто сказал, что надо использовать пары символов, а не тройки? Такие гипотезы как раз и проверяют в антивирусной лаборатории. Отмечу, что у нас для отбора наилучших и взаимодополняющих признаков тоже используется машинное обучение.
2. На основании выделенных признаков мы построили математическую модель и обучили ее на примерах.
Само собой, в реальной жизни мы используем модели чуть посложнее. Сейчас наилучшие результаты показывает ансамбль решающих деревьев, построенный методом Gradient boosting, но стремление к совершенству не позволяет нам успокоиться.
3. На основе математической модели мы посчитали рейтинг «правдоподобности».
В реальной жизни мы обычно считаем противоположный рейтинг — рейтинг вредоносности. Разница, казалось бы, несущественная, но угадайте, насколько неправдоподобной для нашей математической модели покажется строка на другом языке — или с другим алфавитом?
Антивирус не имеет права допустить ложное срабатывание на целом классе файлов только по той причине, что «мы его не проходили».
Альтернатива машинному обучению
20 лет назад, когда вредоносов было мало, каждую «белиберду» можно было просто задетектить с помощью сигнатур — характерных отрывков. Для примеров выше “сигнатуры” могли бы быть такими:
ОРПорыав аоырОрпаыор ОрОРАыдцуцзущгкгеуб ыватьыивдцулвдлоадузцщ
Йцхяь длваополц ыадолцлопиолым бамдлотдламда
Антивирус сканирует файл, если встретил «зущгкгеу», говорит: «Ну понятно, это белиберда номер 17». А если найдет «длотдламд» — то “белиберда номер 139”.
15 лет назад, когда вредоносов стало много, преобладать стало «дженерик»-детектирование. Вирусный аналитик пишет правила, что для осмысленных строк характерно:
И вот 10 лет назад, когда вредоносов стало ну просто очень много, начали робко внедряться алгоритмы машинного обучения. Поначалу по сложности они были сопоставимые с описанным нами простейшим примером, но мы активно нанимали специалистов и наращивали уровень экспертных знаний.
Сейчас без машинного обучения не работает ни один нормальный антивирус. Если оценивать вклад в защиту пользователей, то с методами на основе машинного обучения по статическим признакам могут посоперничать разве что методы на основе анализа поведения. Но только при анализе поведения тоже используется машинное обучение. В общем, без него уже никуда.
Недостатки
Преимущества понятны, но неужели это серебряная пуля, спросите вы. Не совсем. Этот метод хорошо справляется, если описанный выше алгоритм будет работать в облаке или в инфраструктуре, постоянно обучаясь на огромных количествах как чистых, так и вредоносных объектов.
Также очень хорошо, если за результатами обучения присматривает команда экспертов, вмешивающихся в тех случаях, когда без опытного человека не обойтись.
В этом случае недостатков действительно немного, а по большому счету только один — нужна эта дорогостоящая инфраструктура и не менее дорогостоящая команда специалистов.
Другое дело, когда кто-то пытается радикально сэкономить и использовать только математическую модель и только на стороне продукта, прямо у клиента. Тогда могут начаться трудности.
1. Ложные срабатывания.
Детектирование на базе машинного обучения — это всегда поиск баланса между уровнем детектирования и уровнем ложных срабатываний. И если нам захочется детектировать побольше, то ложные срабатывания будут. В случае машинного обучения они будут возникать в непредсказуемых и зачастую труднообъяснимых местах. Например, эта чистая строка — «Мцыри и Мкртчян» — распознается как неправдоподобная: 145 баллов в модели из нашего примера. Поэтому очень важно, чтобы антивирусная лаборатория имела обширную коллекцию чистых файлов для обучения и тестирования модели.
Злоумышленник может разобрать такой продукт и посмотреть, как работает модель. Он человек и пока, если не умнее, то хотя бы креативнее машины — поэтому он подстроится. Например, следующая строка считается чистой (1200 баллов), хотя ее первая половина явно вредоносная: «лоыралоыврачигшуралорыловарДобавляем в конец много осмысленного текста, чтобы обмануть машину». Какой бы умный алгоритм ни использовался, его всегда может обойти человек (достаточно умный). Поэтому антивирусная лаборатория обязана иметь продвинутую инфраструктуру для быстрой реакции на новые угрозы.
Один из примеров обхода описанного нами выше метода: все слова выглядят правдоподобно, но на самом деле это бессмыслица. Источник.
3. Обновление модели.
На примере описанного выше алгоритма мы упоминали, что модель, обученная на русских текстах, будет непригодна для анализа текстов с другим алфавитом. А вредоносные файлы, с учетом креативности злоумышленников (смотри предыдущий пункт) — это как будто постепенно эволюционирующий алфавит. Ландшафт угроз меняется довольно быстро. Мы за долгие годы исследований выработали оптимальный подход к постепенному обновлению модели прямо в антивирусных базах. Это позволяет дообучать и даже полностью переобучать модель «без отрыва от производства».
Заключение
Все в антивирусе должно быть прекрасно — и поведенческий анализ, и облачная защита, и алгоритмы машинного обучения, и многое-многое другое. Но об этом “многом другом” — в следующий раз.
Машинное обучение — это легко
Для кого эта статья?
Каждый, кому будет интересно затем покопаться в истории за поиском новых фактов, или каждый, кто хотя бы раз задавался вопросом «как же все таки это, машинное обучение, работает», найдёт здесь ответ на интересующий его вопрос. Вероятнее всего, опытный читатель не найдёт здесь для себя ничего интересного, так как программная часть оставляет желать лучшего несколько упрощена для освоения начинающими, однако осведомиться о происхождении машинного обучения и его развитии в целом не помешает никому.
В цифрах
С каждым годом растёт потребность в изучении больших данных как для компаний, так и для активных энтузиастов. В таких крупных компаниях, как Яндекс или Google, всё чаще используются такие инструменты для изучения данных, как язык программирования R, или библиотеки для Python (в этой статье я привожу примеры, написанные под Python 3). Согласно Закону Мура (а на картинке — и он сам), количество транзисторов на интегральной схеме удваивается каждые 24 месяца. Это значит, что с каждым годом производительность наших компьютеров растёт, а значит и ранее недоступные границы познания снова «смещаются вправо» — открывается простор для изучения больших данных, с чем и связано в первую очередь создание «науки о больших данных», изучение которого в основном стало возможным благодаря применению ранее описанных алгоритмов машинного обучения, проверить которые стало возможным лишь спустя полвека. Кто знает, может быть уже через несколько лет мы сможем в абсолютной точности описывать различные формы движения жидкости, например.
Анализ данных — это просто?
Да. А так же интересно. Наряду с особенной важностью для всего человечества изучать большие данные стоит относительная простота в самостоятельном их изучении и применении полученного «ответа» (от энтузиаста к энтузиастам). Для решения задачи классификации сегодня имеется огромное количество ресурсов; опуская большинство из них, можно воспользоваться средствами библиотеки Scikit-learn (SKlearn). Создаём свою первую обучаемую машину:
Вот мы и создали простейшую машину, способную предсказывать (или классифицировать) значения аргументов по их признакам.
— Если все так просто, почему до сих пор не каждый предсказывает, например, цены на валюту?
С этими словами можно было бы закончить статью, однако делать я этого, конечно же, не буду (буду конечно, но позже) существуют определенные нюансы выполнения корректности прогнозов для поставленных задач. Далеко не каждая задача решается вот так легко (о чем подробнее можно прочитать здесь)
Ближе к делу
— Получается, зарабатывать на этом деле я не сразу смогу?
Итак, сегодня нам потребуются:
Дальнейшее использование требует от читателя некоторых знаний о синтаксисе Python и его возможностях (в конце статьи будут представлены ссылки на полезные ресурсы, среди них и «основы Python 3»).
Как обычно, импортируем необходимые для работы библиотеки:
— Ладно, с Numpy всё понятно. Но зачем нам Pandas, да и еще read_csv?
Иногда бывает удобно «визуализировать» имеющиеся данные, тогда с ними становится проще работать. Тем более, большинство датасетов с популярного сервиса Kaggle собрано пользователями в формате CSV.
— Помнится, ты использовал слово «датасет». Так что же это такое?
Датасет — выборка данных, обычно в формате «множество из множеств признаков» → «некоторые значения» (которыми могут быть, например, цены на жильё, или порядковый номер множества некоторых классов), где X — множество признаков, а y — те самые некоторые значения. Определять, например, правильные индексы для множества классов — задача классификации, а искать целевые значения (такие как цена, или расстояния до объектов) — задача ранжирования. Подробнее о видах машинного обучения можно прочесть в статьях и публикациях, ссылки на которые, как и обещал, будут в конце статьи.
Знакомимся с данными
Предложенный датасет можно скачать здесь. Ссылка на исходные данные и описание признаков будет в конце статьи. По представленным параметрам нам предлагается определять, к какому сорту относится то или иное вино. Теперь мы можем разобраться, что же там происходит:
Работая в Jupyter notebook, получаем такой ответ:
Это значит, что теперь нам доступны данные для анализа. В первом столбце значения Grade показывают, к какому сорту относится вино, а остальные столбцы — признаки, по которым их можно различать. Попробуйте ввести вместо data.head() просто data — теперь для просмотра вам доступна не только «верхняя часть» датасета.
Простая реализация задачи на классификацию
Переходим к основной части статьи — решаем задачу классификации. Всё по порядку:
Создаем массивы, где X — признаки (с 1 по 13 колонки), y — классы (0ая колонка). Затем, чтобы собрать тестовую и обучающую выборку из исходных данных, воспользуемся удобной функцией кросс-валидации train_test_split, реализованной в scikit-learn. С готовыми выборками работаем дальше — импортируем RandomForestClassifier из ensemble в sklearn. Этот класс содержит в себе все необходимые для обучения и тестирования машины методы и функции. Присваиваем переменной clf (classifier) класс RandomForestClassifier, затем вызовом функции fit() обучаем машину из класса clf, где X_train — признаки категорий y_train. Теперь можно использовать встроенную в класс метрику score, чтобы определить точность предсказанных для X_test категорий по истинным значениям этих категорий y_test. При использовании данной метрики выводится значение точности от 0 до 1, где 1 100% Готово!
— Неплохая точность. Всегда ли так получается?
Для решения задач на классификацию важным фактором является выбор наилучших параметров для обучающей выборки категорий. Чем больше, тем лучше. Но не всегда (об этом также можно прочитать подробнее в интернете, однако, скорее всего, я напишу об этом ещё одну статью, рассчитанную на начинающих).
— Слишком легко. Больше мяса!
Для наглядного просмотра результата обучения на данном датасете можно привести такой пример: оставив только два параметра, чтобы задать их в двумерном пространстве, построим график обученной выборки (получится примерно такой график, он зависит от обучения):
Да, с уменьшением количества признаков, падает и точность распознавания. И график получился не особенно-то красивым, но это и не решающее в простом анализе: вполне наглядно видно, как машина выделила обучающую выборку (точки) и сравнила её с предсказанными (заливка) значениями.
Предлагаю читателю самостоятельно узнать почему и как он работает.
Последнее слово
Надеюсь, данная статья помогла хоть чуть-чуть освоиться Вам в разработке простого машинного обучения на Python. Этих знаний будет достаточно, чтобы продолжить интенсивный курс по дальнейшему изучению BigData+Machine Learning. Главное, переходить от простого к углубленному постепенно. А вот полезные ресурсы и статьи, как и обещал:
Материалы, вдохновившие автора на создание данной статьи
Более углубленное изучение использования машинного обучения с Python стало возможным, и более простым благодаря преподавателям с Яндекса — этот курс обладает всеми необходимыми средствами объяснения, как же работает вся система, рассказывается подробнее о видах машинного обучения итд.
Файл сегодняшнего датасета был взят отсюда и несколько модифицирован.
Где брать данные, или «хранилище датасетов» — здесь собрано огромное количество данных от самых разных источников. Очень полезно тренироваться на реальных данных.
Буду признателен за поддержку по улучшению данной статьи, а так же готов к любому виду конструктивной критики.