Python для Data Science и машинного обучения: от основ до моделей

Интенсивный курс, направленный на освоение языка Python для решения задач анализа данных и создания алгоритмов машинного обучения. Вы научитесь обрабатывать информацию, строить наглядные графики и обучать предсказательные модели.

1. Основы синтаксиса Python и работа с массивами в библиотеке NumPy

Основы синтаксиса Python и работа с массивами в библиотеке NumPy

Добро пожаловать в курс «Python для Data Science и машинного обучения: от основ до моделей». Это первая статья нашего путешествия, в котором мы пройдем путь от написания первой строчки кода до создания сложных предсказательных моделей.

Data Science (наука о данных) — это не просто модное словосочетание, это набор инструментов, позволяющих извлекать знания из хаоса информации. И главным инструментом в руках современного специалиста является язык программирования Python.

Почему Python? Он прост в изучении, лаконичен и обладает огромной экосистемой библиотек, специально созданных для работы с данными. Сегодня мы заложим фундамент: разберем базовый синтаксис языка и познакомимся с библиотекой NumPy — сердцем вычислительной математики в Python.

Основы синтаксиса Python

Если вы никогда не программировали раньше, не пугайтесь. Python читается почти как обычный английский текст. Давайте разберем ключевые концепции, которые понадобятся нам для анализа данных.

Переменные и типы данных

Переменная — это именованная область памяти, где мы храним данные. В Python не нужно заранее объявлять тип переменной, язык сам поймет, что вы в него положили.

В Data Science мы чаще всего будем работать с числами (для расчетов) и строками (для категорий, например, названий городов).

Списки (Lists)

Список — это упорядоченная коллекция элементов. Это одна из самых часто используемых структур данных в базовом Python.

Списки в Python универсальны: в одном списке могут храниться и числа, и строки, и даже другие списки. Однако эта гибкость имеет свою цену — скорость работы. Для обработки миллионов записей стандартные списки Python слишком медленны.

Управляющие конструкции

Чтобы писать логику, нам нужны условия и циклы.

Условный оператор if:

Цикл for:

Используется для перебора элементов (например, нашего списка цен).

Функции

Функция — это блок кода, который можно использовать многократно. В Data Science мы часто пишем функции для предобработки данных.

Библиотека NumPy: зачем она нужна?

Вы можете спросить: «Зачем нам что-то еще, если у нас уже есть списки?». Представьте, что у вас есть два списка по миллиону чисел, и вы хотите поэлементно сложить их. В чистом Python вам пришлось бы писать цикл, который миллион раз берет числа и складывает их. Это долго.

Здесь на сцену выходит NumPy (Numerical Python). Это библиотека, написанная на языке C, которая работает внутри Python. Она предоставляет объект array (массив), который работает в десятки и сотни раз быстрее стандартных списков.

!Слева — структура списка Python (много накладных расходов), справа — массив NumPy (компактное хранение данных).

Установка и импорт

В среде Google Colab или Anaconda библиотека NumPy уже установлена. Чтобы начать с ней работать, ее нужно импортировать. Общепринятый стандарт — давать ей псевдоним np.

Создание массивов NumPy

Основной объект NumPy — это ndarray (n-dimensional array, n-мерный массив). Давайте создадим наш первый массив.

Из списка

Генерация данных

NumPy имеет встроенные функции для быстрой генерации массивов:

Векторизация и математические операции

Самая мощная фишка NumPy — векторизация. Это способность выполнять операции над всем массивом сразу, без использования циклов for.

Допустим, мы хотим умножить каждое число в массиве на 2.

В чистом Python:

В NumPy:

Это работает и для сложения двух массивов. Математически это выглядит как сложение двух векторов:

Где — результирующий вектор (массив), — первый массив, а — второй массив. Операция происходит поэлементно: первый элемент складывается с первым, второй со вторым и так далее.

Основные статистики

Data Science невозможна без статистики. NumPy умеет считать все базовые метрики мгновенно.

Предположим, у нас есть массив данных о росте группы людей:

Мы можем найти среднее значение. Формула среднего арифметического выглядит так:

Где — среднее значение, — количество элементов в выборке, — знак суммирования, а — каждый отдельный элемент массива.

В коде это всего одна команда:

Другие полезные методы: * np.min(arr) — минимальное значение * np.max(arr) — максимальное значение * np.sum(arr) — сумма всех элементов

Индексация и срезы (Slicing)

Работа с индексами в NumPy похожа на списки Python, но с большими возможностями, особенно для многомерных массивов (матриц).

Логическая индексация (Маски)

Это очень важный инструмент для фильтрации данных. Допустим, мы хотим найти все значения в массиве, которые больше 25.

!Визуализация того, как логическая маска «просеивает» данные, оставляя только те, что удовлетворяют условию.

Многомерные массивы (Матрицы)

В Data Science мы редко работаем с одномерными строками. Обычно данные представлены в виде таблиц (строки и столбцы). В NumPy это двумерные массивы.

Доступ к элементам матрицы осуществляется через запятую: matrix[строка, столбец].

Заключение

Сегодня мы сделали первый шаг в мир Data Science. Мы изучили:

  • Базовые типы данных и конструкции Python.
  • Почему стандартные списки недостаточно хороши для больших данных.
  • Как создавать и обрабатывать массивы с помощью NumPy.
  • Как применять математические операции ко всему массиву сразу.
  • NumPy — это фундамент. В следующей статье мы построим на этом фундаменте стены — изучим библиотеку Pandas, которая позволяет работать с данными так же удобно, как в Excel, но с мощью программирования.

    2. Манипуляция данными, очистка и анализ с использованием библиотеки Pandas

    Манипуляция данными, очистка и анализ с использованием библиотеки Pandas

    Приветствую вас во второй статье курса «Python для Data Science и машинного обучения». В прошлый раз мы заложили фундамент, изучив синтаксис Python и высокопроизводительные массивы NumPy. Мы узнали, что NumPy позволяет быстро проводить математические операции над числами. Но реальный мир данных редко состоит только из идеально упорядоченных чисел.

    В реальности данные приходят к нам в виде таблиц Excel, CSV-файлов или выгрузок из баз данных. В них смешаны текст, числа, даты, и, что самое страшное, там часто встречаются пропуски и ошибки. NumPy для таких задач слишком низкоуровневый и неудобный. Здесь на сцену выходит Pandas.

    Pandas — это библиотека, построенная поверх NumPy, которая предоставляет удобные структуры данных для работы с табличной информацией. Если NumPy — это молоток, то Pandas — это швейцарский нож для аналитика.

    Основные структуры данных: Series и DataFrame

    В Pandas есть два главных объекта, с которыми вы будете работать 99% времени: Series и DataFrame.

    Series (Серия)

    Series — это одномерный массив данных, похожий на список или массив NumPy, но с одной важной особенностью: у него есть индекс (метки). Представьте, что это один столбец в Excel.

    В отличие от NumPy, где доступ только по номеру (0, 1, 2...), здесь мы можем обращаться к данным по их меткам:

    DataFrame (Датафрейм)

    DataFrame — это двумерная структура данных, то есть таблица. Она состоит из строк и столбцов. По сути, DataFrame — это набор объектов Series, объединенных общим индексом.

    !Структура DataFrame: строки имеют индексы, столбцы имеют названия, а данные хранятся в ячейках.

    Создадим простой датафрейм вручную:

    Загрузка и первичный осмотр данных

    В Data Science мы редко создаем таблицы вручную. Обычно мы загружаем их из файлов. Самый популярный формат — CSV (Comma-Separated Values).

    После загрузки данных первое, что нужно сделать — понять, с чем мы имеем дело. Для этого есть несколько незаменимых методов:

  • df.head(n) — показывает первые строк таблицы. Это позволяет быстро взглянуть на структуру.
  • df.info() — выводит сводную информацию: названия колонок, типы данных и количество заполненных (не пустых) значений.
  • df.shape — атрибут, возвращающий кортеж (количество строк, количество столбцов).
  • df.describe() — выводит основные статистические метрики для числовых столбцов.
  • Рассмотрим подробнее describe(). Этот метод автоматически рассчитывает среднее, стандартное отклонение, минимум, максимум и квартили.

    Например, стандартное отклонение (std) рассчитывается по формуле:

    Где — стандартное отклонение, — количество элементов, — знак суммы, — конкретное значение элемента, а — среднее арифметическое выборки. Pandas делает этот расчет за нас одной командой.

    Индексация и выбор данных

    Как достать нужные данные из большой таблицы? В Pandas есть два основных способа доступа, которые часто путают новички: .loc и .iloc.

    .loc — доступ по меткам

    Используется, когда мы хотим выбрать данные по названию строк (индексу) или столбцов.

    .iloc — доступ по позиции

    Используется, когда нам важны только порядковые номера (как в NumPy).

    Условная фильтрация (Boolean Indexing)

    Это самый мощный инструмент анализа. Мы можем фильтровать строки по условию, точно так же, как мы делали это с масками в NumPy.

    Очистка данных (Data Cleaning)

    Данные из реального мира «грязные». В них часто встречаются пропуски, которые в Pandas обозначаются как NaN (Not a Number) или None. Работа с моделями машинного обучения невозможна, если в данных есть пропуски.

    Поиск пропусков

    Обработка пропусков

    Есть две основные стратегии:

  • Удаление: Если данных много, а пропусков мало, можно просто удалить строки с ошибками.
  • Заполнение (Импутация): Если данные ценны, мы можем заполнить пропуски средним значением, нулем или медианой.
  • Группировка и агрегация

    Часто нам нужно проанализировать данные в разрезе категорий. Например, узнать среднюю зарплату мужчин и женщин или максимальные продажи по городам. Для этого используется метод groupby.

    Этот процесс следует парадигме Split-Apply-Combine (Разделить-Применить-Объединить).

    !Визуализация метода GroupBy: данные разбиваются на группы, к каждой группе применяется функция, и результат собирается обратно.

    Математически, если мы считаем среднее по группам, мы выполняем следующую операцию для каждой группы :

    Где — среднее значение в группе , — количество элементов в этой группе, а — -й элемент группы . Метод groupby берет на себя всю сложность разделения индексов и суммирования.

    Создание новых признаков (Feature Engineering)

    В Data Science часто бывает, что исходных столбцов недостаточно. Нам нужно создавать новые. В Pandas это делается элементарно.

    Благодаря векторизации (наследие NumPy), эта операция применяется ко всему столбцу мгновенно, без циклов for.

    Сортировка данных

    Чтобы упорядочить данные, используем sort_values.

    Заключение

    Сегодня мы познакомились с библиотекой Pandas — основным инструментом аналитика данных. Мы научились:

  • Работать с DataFrame и Series.
  • Загружать и осматривать данные.
  • Выбирать нужные строки и столбцы с помощью .loc и .iloc.
  • Находить и обрабатывать пропуски.
  • Группировать данные для получения инсайтов.
  • Эти навыки — это 80% работы Data Scientist'а. Очистка и подготовка данных занимают гораздо больше времени, чем построение моделей. В следующей статье мы научимся визуализировать наши данные, чтобы видеть закономерности, которые скрыты за сухими цифрами таблиц.

    3. Разведочный анализ данных и визуализация с Matplotlib и Seaborn

    Разведочный анализ данных и визуализация с Matplotlib и Seaborn

    Добро пожаловать в третью часть нашего курса «Python для Data Science и машинного обучения». В предыдущих статьях мы научились работать с числами, используя NumPy, и манипулировать табличными данными с помощью Pandas. Теперь у нас есть очищенные данные, но мы всё ещё не «видим» их. Сухие таблицы с тысячами строк не дают интуитивного понимания закономерностей.

    Здесь на сцену выходит EDA (Exploratory Data Analysis) — разведочный анализ данных. Это процесс, в ходе которого мы используем статистику и визуализацию, чтобы понять природу данных, найти аномалии, проверить гипотезы и выявить взаимосвязи.

    Сегодня мы освоим два главных инструмента визуализации в Python: Matplotlib и Seaborn.

    Зачем визуализировать данные?

    Человеческий мозг обрабатывает визуальную информацию в 60 000 раз быстрее, чем текстовую. Взглянув на график, вы мгновенно заметите тренд или выброс, который могли бы пропустить, просматривая таблицу часами.

    Основные цели визуализации в Data Science:

  • Понимание распределения: Как часто встречаются те или иные значения?
  • Поиск корреляций: Зависит ли цена квартиры от её площади?
  • Выявление выбросов: Есть ли в данных ошибки или аномальные значения?
  • Matplotlib: Дедушка визуализации в Python

    Matplotlib — это базовая библиотека для построения графиков. Она мощная, гибкая, но иногда требует написания большого количества кода для простых вещей. Большинство других библиотек визуализации (включая Seaborn) построены на её основе.

    Основы работы

    Для начала работы нам нужно импортировать модуль pyplot.

    В Matplotlib мы работаем с концепцией «Фигуры» (Figure) — это холст, и «Осей» (Axes) — это сам график с координатами.

    Seaborn: Красота и статистика

    Seaborn — это надстройка над Matplotlib. Она делает графики красивыми по умолчанию и, что важнее, она «понимает» структуры данных Pandas (DataFrames). Если в Matplotlib вам нужно вручную передавать массивы X и Y, то в Seaborn часто достаточно передать название колонок и сам датафрейм.

    Далее мы разберем основные типы графиков, которые используются в 90% задач EDA, используя синтаксис Seaborn.

    Одномерный анализ (Univariate Analysis)

    Цель: изучить одну переменную изолированно.

    Гистограмма (Histogram)

    Гистограмма показывает распределение данных. Весь диапазон значений разбивается на интервалы (бины), и высота столбца показывает, сколько наблюдений попало в этот интервал.

    Параметр kde=True добавляет линию ядерной оценки плотности (Kernel Density Estimation) — плавную кривую, огибающую гистограмму.

    Ящик с усами (Boxplot)

    Это один из самых информативных графиков в статистике. Он позволяет увидеть медиану, квартили и выбросы.

    !Анатомия графика Boxplot: ящик показывает, где находятся 50% всех данных, а точки за усами — это аномалии.

    Для понимания Boxplot нам нужна математика квартилей. Межквартильный размах (IQR) рассчитывается так:

    Где — межквартильный размах (высота ящика), — третий квартиль (значение, ниже которого лежит 75% данных), а — первый квартиль (значение, ниже которого лежит 25% данных).

    «Усы» обычно простираются на расстояние . Всё, что лежит за их пределами, считается выбросом.

    Двумерный анализ (Bivariate Analysis)

    Цель: изучить взаимосвязь между двумя переменными.

    Диаграмма рассеяния (Scatter Plot)

    Используется для двух числовых переменных. Каждая точка — это наблюдение.

    Если точки выстраиваются в линию, идущую вверх, мы говорим о положительной корреляции. Силу этой связи описывает коэффициент корреляции Пирсона ():

    Где: * — коэффициент корреляции (от -1 до 1). * — конкретные значения переменных. * — средние значения переменных. * — знак суммирования.

    Если близок к 1, связь сильная и прямая. Если к -1 — сильная и обратная. Если к 0 — линейной связи нет.

    Столбчатая диаграмма (Bar Plot)

    Используется, когда одна переменная категориальная (например, день недели), а вторая — числовая (сумма чека). По умолчанию показывает среднее значение.

    Многомерный анализ (Multivariate Analysis)

    Иногда нам нужно увидеть связи между всеми переменными сразу.

    Тепловая карта (Heatmap)

    Тепловая карта идеально подходит для визуализации матрицы корреляций. Мы вычисляем корреляцию каждой пары переменных и раскрашиваем ячейки: чем ярче цвет, тем сильнее связь.

    !Пример тепловой карты корреляций, где цвет указывает на силу взаимосвязи между параметрами.

    Pairplot

    Это «швейцарский нож» разведочного анализа. Функция pairplot строит графики рассеяния для каждой пары числовых переменных и гистограммы распределения на диагонали.

    Параметр hue позволяет раскрасить точки в зависимости от категориальной переменной (например, пол), что сразу добавляет третье измерение на плоскость.

    Настройка графиков

    Хороший график должен быть понятен без слов. Всегда добавляйте подписи.

  • Размер: plt.figure(figsize=(width, height))
  • Заголовок: plt.title('Текст')
  • Подписи осей: plt.xlabel('Текст'), plt.ylabel('Текст')
  • Сохранение: plt.savefig('plot.png')
  • Заключение

    Разведочный анализ данных — это искусство задавать вопросы данным и получать ответы в виде образов. Мы изучили: * Matplotlib как фундамент визуализации. * Seaborn как инструмент для быстрого статистического анализа. * Основные типы графиков: гистограммы для распределений, boxplot для выбросов, scatterplot для корреляций и heatmap для обзора связей.

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

    4. Введение в машинное обучение: основные концепции и библиотека Scikit-learn

    Введение в машинное обучение: основные концепции и библиотека Scikit-learn

    Добро пожаловать в четвертую часть нашего курса «Python для Data Science и машинного обучения». Мы проделали большой путь: научились управлять данными с NumPy и Pandas, а также видеть скрытые закономерности с помощью Matplotlib и Seaborn. Теперь у нас есть данные, они очищены и изучены. Настало время магии.

    Сегодня мы переходим к сердцу Data Science — машинному обучению (Machine Learning). Мы разберем, как заставить компьютер не просто хранить данные, а учиться на них, делать предсказания и принимать решения. Нашим главным инструментом станет библиотека Scikit-learn — золотой стандарт индустрии.

    Что такое машинное обучение?

    В традиционном программировании разработчик пишет четкие правила. Например: «Если сумма покупки больше 1000 рублей, сделай скидку 5%». Это работает, когда правила просты и известны.

    Но как написать программу, которая отличает фотографию кошки от собаки? Правил миллионы: форма ушей, текстура шерсти, освещение. Человек не может описать их все вручную.

    Машинное обучение (ML) меняет парадигму. Вместо того чтобы писать правила, мы скармливаем компьютеру данные (фотографии кошек и собак) и правильные ответы. Алгоритм сам находит закономерности и формирует правила.

    > Machine Learning — это область искусственного интеллекта, которая дает компьютерам способность учиться без явного программирования. — Артур Сэмюэл, 1959

    !Сравнение подходов: в ML мы получаем правила (модель) на основе данных и ответов.

    Основные типы машинного обучения

    Глобально задачи ML делятся на три большие категории. Сегодня мы сосредоточимся на самой популярной — обучении с учителем.

    1. Обучение с учителем (Supervised Learning)

    У нас есть данные (признаки) и правильные ответы к ним (целевая переменная). Задача модели — научиться предсказывать ответы для новых, незнакомых данных.

    Примеры: * Предсказание цены квартиры по её площади и району. * Определение, является ли письмо спамом. * Диагностика заболевания по анализам.

    2. Обучение без учителя (Unsupervised Learning)

    У нас есть только данные, но нет правильных ответов. Задача модели — найти структуру в этих данных.

    Примеры: * Сегментация клиентов магазина (кто покупает элитные товары, а кто — бюджетные). * Сжатие данных.

    3. Обучение с подкреплением (Reinforcement Learning)

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

    Задачи обучения с учителем: Регрессия и Классификация

    В рамках обучения с учителем (Supervised Learning) мы решаем два типа задач, в зависимости от того, что мы хотим предсказать.

    Регрессия (Regression)

    Целевая переменная — это число (непрерывная величина).

    * Сколько будет стоить акция завтра? * Какая будет температура воздуха? * Сколько времени займет доставка?

    Классификация (Classification)

    Целевая переменная — это категория (метка класса).

    * Купит клиент товар или нет? (Бинарная классификация: 0 или 1). * Какая цифра изображена на картинке? (Многоклассовая классификация: 0-9).

    Терминология: Признаки и Целевая переменная

    В мире ML приняты стандартные обозначения:

    * X (Features, Признаки): Данные, на основе которых мы делаем прогноз. Обычно это матрица (таблица), где строки — это объекты, а столбцы — их характеристики. * y (Target, Целевая переменная): То, что мы хотим предсказать. Обычно это вектор (один столбец).

    Библиотека Scikit-learn

    Scikit-learn (или sklearn) — это самая популярная библиотека для классического машинного обучения в Python. Её любят за простой и единообразный интерфейс. Неважно, используете ли вы простую линейную регрессию или сложный случайный лес — команды будут одни и те же.

    Установка и импорт

    В большинстве дистрибутивов (Anaconda, Colab) она уже есть. Импортируется она обычно частями, чтобы не перегружать память.

    Жизненный цикл ML-модели

    Давайте пройдем полный путь создания модели на примере задачи регрессии: предскажем стоимость жилья.

    Шаг 1. Подготовка данных

    Представим, что у нас есть простые данные: площадь квартиры и её цена.

    Шаг 2. Разделение на обучающую и тестовую выборки

    Это самое важное правило машинного обучения: нельзя проверять модель на тех же данных, на которых она училась. Иначе модель просто «запомнит» ответы, но не сможет работать в реальном мире. Это называется переобучением (overfitting).

    Мы делим данные на две части:

  • Train (Обучающая): На ней модель учится (обычно 70-80% данных).
  • Test (Тестовая): На ней мы проверяем качество (20-30% данных).
  • Шаг 3. Выбор и обучение модели

    Мы будем использовать Линейную регрессию. Это алгоритм, который пытается провести прямую линию через наши точки данных так, чтобы расстояние от точек до линии было минимальным.

    Математически модель линейной регрессии для одного признака выглядит так:

    Где: * — предсказанное значение (цена). * — значение признака (площадь). * — вес признака (коэффициент наклона прямой). Он показывает, насколько сильно площадь влияет на цену. * — свободный член (сдвиг, bias). Это базовая цена, если площадь равна нулю.

    В Scikit-learn процесс обучения занимает всего две строчки:

    Метод .fit() — это команда «Учись!». В этот момент алгоритм подбирает оптимальные значения и .

    Шаг 4. Предсказание

    Теперь, когда модель обучена, мы можем спросить её: «Сколько будет стоить квартира площадью 120 метров?» или попросить предсказать цены для тестовой выборки.

    Шаг 5. Оценка качества

    Как понять, хорошо ли работает модель? Нам нужны метрики. Для регрессии одной из самых понятных метрик является MAE (Mean Absolute Error) — средняя абсолютная ошибка.

    Формула MAE:

    Где: * — значение средней абсолютной ошибки. * — количество объектов в выборке. * — знак суммирования (мы складываем ошибки для всех объектов). * — модуль числа (абсолютное значение), чтобы отрицательные и положительные ошибки не гасили друг друга. * — правильный ответ (реальная цена). * — предсказание модели.

    Простыми словами: мы смотрим, на сколько миллионов в среднем ошибается наша модель.

    Переобучение и Недообучение

    В процессе обучения вы часто будете сталкиваться с двумя проблемами:

  • Недообучение (Underfitting): Модель слишком простая. Она не уловила закономерности. Например, мы пытаемся описать сложную кривую прямой линией. Ошибка высока и на train, и на test.
  • Переобучение (Overfitting): Модель слишком сложная. Она не выучила закономерность, а просто «зазубрила» обучающие примеры вместе с шумом. Ошибка на train очень низкая, а на test — огромная.
  • !Визуализация баланса сложности модели: слева слишком просто, справа слишком сложно, посередине — идеально.

    Заключение

    Сегодня мы сделали огромный шаг. Мы разобрали:

  • Разницу между программированием и машинным обучением.
  • Основные типы задач: регрессия и классификация.
  • Как использовать библиотеку Scikit-learn.
  • Как обучить свою первую модель линейной регрессии и оценить её качество.
  • В следующей статье мы углубимся в методы классификации и узнаем, как научить компьютер определять, выживет ли пассажир Титаника или нет, используя логистическую регрессию и деревья решений.

    5. Практическое применение алгоритмов регрессии и классификации для решения реальных задач

    Практическое применение алгоритмов регрессии и классификации для решения реальных задач

    Приветствую вас в пятой части нашего курса «Python для Data Science и машинного обучения». В прошлой лекции мы открыли дверь в мир машинного обучения: разобрали основные понятия, жизненный цикл модели и даже обучили нашу первую линейную регрессию. Мы научились предсказывать числа, используя библиотеку Scikit-learn.

    Но реальный мир сложнее, чем прямая линия. Данные редко выстраиваются в идеальный ряд, а задачи не ограничиваются предсказанием цены на жилье. Часто нам нужно отвечать на вопросы «Да/Нет» (классификация) или работать с нелинейными зависимостями.

    Сегодня мы углубимся в алгоритмы. Мы разберем, как работает Логистическая регрессия (спойлер: это классификатор), изучим интуитивно понятные Деревья решений и научимся правильно оценивать качество наших моделей, чтобы не обманывать самих себя красивыми цифрами.

    Когда прямая линия не работает: Полиномиальная регрессия

    Вспомним линейную регрессию. Она пытается провести прямую линию через облако точек. Но что, если зависимость выглядит как дуга или волна? Например, зависимость расхода топлива от скорости автомобиля: сначала расход падает, а на высоких скоростях снова растет.

    Если мы попробуем описать это прямой линией, мы получим огромную ошибку (недообучение). Здесь нам помогает полиномиальная регрессия.

    Идея проста: мы добавляем в уравнение степени нашего признака (квадрат, куб и т.д.).

    Формула полиномиальной регрессии второй степени выглядит так:

    Где: * — предсказываемое значение. * — веса (коэффициенты), которые подбирает модель. * — значение признака. * — квадрат значения признака.

    С точки зрения библиотеки Scikit-learn, мы просто создаем новые признаки (возводим в квадрат) и скармливаем их обычной линейной регрессии. Модель начинает «изгибаться», подстраиваясь под данные.

    !Сравнение линейной модели (недообучение на сложных данных) и полиномиальной модели.

    Метрики качества регрессии

    В прошлый раз мы использовали MAE (среднюю абсолютную ошибку). Но в практике Data Science часто используют MSE (Mean Squared Error) — среднеквадратичную ошибку.

    Где: * — количество объектов. * — сумма по всем объектам. * — реальное значение. * — предсказанное значение.

    Почему квадрат? Потому что возведение в квадрат сильно «наказывает» модель за большие ошибки. Если модель ошиблась на 10 единиц, штраф будет 100. Это заставляет алгоритм избегать крупных промахов.

    Классификация: Логистическая регрессия

    Перейдем к задачам классификации. Допустим, мы хотим предсказать, уйдет клиент из банка или нет (0 или 1). Можно ли использовать обычную линейную регрессию? Нет. Линейная регрессия может выдать число 1.5 или -0.2, что не имеет смысла в контексте вероятности.

    Нам нужен алгоритм, который выдает значения строго от 0 до 1. Для этого используется Логистическая регрессия. Несмотря на название, это алгоритм классификации.

    В основе лежит сигмоида (логистическая функция). Она превращает любое число в вероятность.

    Где: * — результат функции (вероятность от 0 до 1). * — число Эйлера (основание натурального логарифма, примерно 2.718). * — результат работы линейного уравнения ().

    !Сигмоида трансформирует любой входной сигнал в диапазон от 0 до 1, что интерпретируется как вероятность.

    Если результат функции больше 0.5, мы говорим, что это класс 1 (клиент уйдет). Если меньше — класс 0 (клиент останется).

    Деревья решений (Decision Trees)

    Логистическая регрессия хороша, но она пытается разделить классы линией (или плоскостью). А что, если данные перемешаны сложнее? Представьте себе задачу: определить, стоит ли играть в гольф. Это зависит от погоды, влажности и ветра.

    Здесь идеально подходят Деревья решений. Это алгоритм, который имитирует человеческую логику, задавая последовательность вопросов.

    Пример дерева:

  • На улице идет дождь?
  • * Да -> Не играем. * Нет -> (Следующий вопрос) Ветрено ли? * Да -> Не играем. * Нет -> Играем.

    !Визуализация того, как алгоритм разбивает данные на группы, задавая пороговые вопросы.

    Как дерево учится?

    Алгоритм перебирает все возможные вопросы (например, «Возраст > 25?», «Возраст > 26?») и выбирает тот, который лучше всего разделяет данные на чистые группы. Мерой «чистоты» часто служит Энтропия или Неопределенность Джини.

    Главный плюс деревьев — их легко интерпретировать. Вы всегда можете проследить путь и понять, почему модель приняла такое решение.

    Главный минус — склонность к переобучению. Дерево может построить слишком сложную структуру, запомнив каждый отдельный пример. Чтобы этого избежать, мы ограничиваем глубину дерева параметром max_depth.

    Оценка качества классификации

    В регрессии мы считали ошибку. В классификации всё интереснее. Самая простая метрика — Accuracy (Точность): доля правильных ответов.

    Где: * (True Positive) — верно предсказанный класс 1. * (True Negative) — верно предсказанный класс 0. * (False Positive) — ложное срабатывание (сказали 1, а на деле 0). * (False Negative) — пропуск события (сказали 0, а на деле 1).

    Проблема Accuracy: Представьте, что мы ищем редкую болезнь, которой болеет 1% людей. Если модель просто скажет «Все здоровы», её Accuracy будет 99%. Но такая модель бесполезна! Она пропустила всех больных.

    Поэтому мы используем Precision (Точность срабатывания) и Recall (Полнота).

    Precision

    Показывает, сколько из тех, кого мы назвали «больными», действительно больны. Важно, когда цена ложного срабатывания высока (например, не хотим зря пугать пациента).

    Recall

    Показывает, какую долю реальных больных мы нашли. Важно, когда цена пропуска высока (лучше перепроверить здорового, чем пропустить больного).

    В Scikit-learn для этого есть удобный отчет:

    Матрица ошибок (Confusion Matrix)

    Это таблица, которая показывает, где именно ошибается модель. Она позволяет увидеть баланс между .

    Заключение

    Сегодня мы значительно расширили наш арсенал:

  • Узнали, что полиномиальная регрессия помогает моделировать кривые.
  • Поняли, что логистическая регрессия использует сигмоиду для предсказания вероятностей классов.
  • Разобрали деревья решений — интуитивный метод, похожий на человеческую логику.
  • Научились оценивать классификаторы с помощью Precision и Recall, избегая ловушки простой точности.
  • В следующей статье мы объединим эти знания и создадим ансамбли моделей (Случайный лес и Градиентный бустинг) — самые мощные инструменты в современном классическом машинном обучении, которые побеждают в соревнованиях Kaggle.