Python для Data Science и Машинного обучения

Интенсивный курс, охватывающий полный цикл работы с данными: от основ программирования на Python и предобработки информации до построения и оценки моделей машинного обучения. Студенты освоят ключевые библиотеки (Pandas, NumPy, Scikit-Learn) и научатся решать прикладные задачи анализа данных.

1. Введение в экосистему Python: настройка окружения и базовые структуры данных

Введение в экосистему Python: настройка окружения и базовые структуры данных

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

Почему Python стал стандартом в Data Science?

Python — это интерпретируемый язык высокого уровня, который завоевал популярность благодаря своему простому и читаемому синтаксису. Однако в контексте Data Science его сила заключается не только в простоте, но и в экосистеме.

Представьте, что вы строите дом. Python — это ваш набор инструментов (молоток, дрель, пила). Но чтобы построить небоскреб (сложную модель машинного обучения), вам нужны готовые блоки, краны и бетономешалки. В мире Python этими «блоками» являются библиотеки:

* NumPy и Pandas — для работы с данными. * Matplotlib и Seaborn — для визуализации. * Scikit-learn, TensorFlow, PyTorch — для машинного обучения.

!Экосистема библиотек Python, на которой строится Data Science.

Настройка окружения: Anaconda и Jupyter

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

Что такое Jupyter Notebook?

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

Установка через Anaconda

Самый простой способ получить Python, Jupyter и все необходимые библиотеки сразу — установить дистрибутив Anaconda.

  • Скачайте Anaconda Distribution с официального сайта.
  • Установите её, следуя инструкциям.
  • Запустите Anaconda Navigator и выберите Jupyter Notebook.
  • Альтернативой для тех, кто не хочет ничего устанавливать, является Google Colab — это облачный Jupyter Notebook от Google, который работает прямо в браузере.

    Переменные и базовые типы данных

    В Data Science мы постоянно работаем с данными разных типов: числами, категориями, текстом. Давайте разберем, как Python хранит эту информацию.

    Присваивание переменных

    В Python не нужно объявлять тип переменной заранее (это называется динамической типизацией). Вы просто присваиваете значение имени.

    Основные скалярные типы

  • Integer (int): Целые числа. Используются для счетчиков, индексов.
  • Float (float): Числа с плавающей точкой. Используются для большинства вычислений в Data Science (веса моделей, вероятности).
  • String (str): Строки. Используются для обработки текста (NLP).
  • Boolean (bool): Логический тип (True или False). Нужен для фильтрации данных.
  • Структуры данных: контейнеры для информации

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

    1. Списки (Lists)

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

    Особенности списков: * Упорядоченность: Элементы хранятся в том порядке, в котором вы их добавили. * Индексация: Доступ к элементам осуществляется по индексу, начиная с нуля.

    * Изменяемость (Mutability): Вы можете изменить элемент списка после его создания.

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

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

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

    В коде это выглядит так:

    2. Кортежи (Tuples)

    Кортеж очень похож на список, но он неизменяем (immutable). Он создается с помощью круглых скобок ().

    Если вы попытаетесь сделать dimensions[0] = 1280, Python выдаст ошибку. Зачем это нужно? В Data Science кортежи часто используются для возврата нескольких значений из функции или для хранения конфигураций, которые не должны случайно измениться в процессе работы программы.

    3. Словари (Dictionaries)

    Словарь — это неупорядоченная коллекция пар «ключ-значение». Это аналог реального словаря, где вы ищете слово (ключ) и получаете его определение (значение). Словари создаются с помощью фигурных скобок {}.

    Доступ к данным осуществляется по ключу, а не по индексу:

    !Визуализация принципа работы словаря: доступ к значению через уникальный ключ.

    В машинном обучении словари часто используются для хранения параметров моделей (гиперпараметров), например: {'learning_rate': 0.01, 'epochs': 100}.

    4. Множества (Sets)

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

    Обратите внимание, что дубликат 101 исчез. Множества идеально подходят для удаления дубликатов из данных или проверки принадлежности элемента к группе.

    Математически операции над множествами в Python соответствуют теории множеств. Например, объединение двух множеств и :

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

    В Python:

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

    Структуры данных бесполезны без возможности их перебирать и проверять условия.

    Цикл for

    В Python цикл for работает как итератор. Он проходит по каждому элементу коллекции.

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

    Позволяет выполнять код только при выполнении определенного условия.

    Заключение

    Сегодня мы подготовили почву для серьезной работы. Мы настроили окружение с помощью Anaconda и Jupyter Notebook, а также разобрали базовые кирпичики языка Python: переменные, списки, кортежи, словари и множества. Понимание различий между ними (например, когда использовать кортеж вместо списка) критически важно для написания эффективного кода.

    В следующей статье мы перейдем от встроенных структур Python к специализированным инструментам для анализа данных и познакомимся с библиотекой NumPy.

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

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

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

    Представьте, что вам нужно умножить каждый элемент списка из миллиона чисел на 2. В чистом Python вам пришлось бы писать цикл, который обрабатывает каждое число по очереди. Это медленно. В мире больших данных нам нужна скорость и эффективность.

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

    NumPy: Фундамент вычислительной математики

    NumPy (Numerical Python) — это библиотека, которая добавляет в Python поддержку быстрых многомерных массивов и матриц, а также огромную коллекцию математических функций для работы с ними.

    Почему NumPy быстрее списков?

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

    Массивы NumPy (ndarray) — это типизированные массивы. Это значит, что все элементы в них имеют один и тот же тип (обычно числа). Благодаря этому данные в памяти располагаются плотно, друг за другом, что позволяет процессору обрабатывать их невероятно быстро, используя векторные инструкции.

    !Сравнение организации памяти: разрозненные объекты списка Python против плотного массива NumPy.

    Создание массивов и векторизация

    Для начала работы нужно импортировать библиотеку. Стандартное сокращение — np.

    Обратите внимание: мы умножили массив на 2, и операция применилась ко всем элементам сразу без всяких циклов for. Это называется векторизацией.

    Основные операции линейной алгебры

    В машинном обучении данные часто представляются в виде матриц. Одной из самых частых операций является перемножение матриц (Dot Product).

    Математически произведение двух матриц (размером ) и (размером ) записывается так:

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

    Простыми словами: мы берем строку из первой матрицы, столбец из второй, попарно перемножаем их элементы и складываем результаты.

    В NumPy это делается одной командой:

    Pandas: Excel на стероидах

    Если NumPy — это мощный двигатель для чисел, то Pandas — это удобная приборная панель. Эта библиотека создана для работы с табличными данными (как в Excel или SQL), но с мощью программирования.

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

    Основные структуры данных

  • Series — одномерный массив с метками (похож на одну колонку в Excel).
  • DataFrame — двумерная таблица, где каждый столбец может иметь свой тип данных (числа, строки, даты).
  • !Структура DataFrame: индексы строк, названия столбцов и сами данные.

    Загрузка и осмотр данных

    Чаще всего данные хранятся в файлах CSV (Comma-Separated Values). Загрузим их:

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

    В Pandas есть два основных способа выбрать данные:

    * .iloc — выбор по позиции (как в списках, по номеру индекса). * .loc — выбор по метке (по названию индекса или колонки).

    Фильтрация данных

    Одна из самых мощных возможностей Pandas — фильтрация по условию (Boolean Indexing).

    Допустим, мы хотим найти всех клиентов старше 30 лет:

    Предварительная обработка данных (Preprocessing)

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

    1. Работа с пропущенными значениями

    Пропуски в Pandas обозначаются как NaN (Not a Number). Модели машинного обучения обычно не умеют работать с пропусками, поэтому их нужно либо удалить, либо заполнить.

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

    * Удаление: Если пропусков мало, строки с ними можно удалить.

    * Заполнение (Импутация): Часто лучше заполнить пропуски средним значением или нулем, чтобы не терять данные.

    Математически заполнение средним выглядит так. Пусть — вектор значений признака, где некоторые значения отсутствуют. Мы вычисляем среднее по имеющимся значениям:

    Где: * — среднее арифметическое. * — количество непропущенных значений. * — значения признака.

    В коде:

    2. Удаление дубликатов

    Повторяющиеся строки могут исказить статистику.

    3. Базовая статистика

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

    Метод .describe() покажет количество записей, среднее, стандартное отклонение, минимум, максимум и квартили для всех числовых колонок.

    Заключение

    Мы разобрали основы работы с NumPy и Pandas. Теперь вы умеете:

  • Создавать быстрые массивы и выполнять математические операции.
  • Загружать табличные данные и фильтровать их.
  • Очищать данные от пропусков и дубликатов.
  • Эти навыки — это 80% работы Data Scientist'а. В следующей статье мы научимся превращать эти сухие цифры в понятные графики с помощью библиотек визуализации Matplotlib и Seaborn.

    3. Разведочный анализ данных (EDA) и визуализация с помощью Matplotlib и Seaborn

    Разведочный анализ данных (EDA) и визуализация с помощью Matplotlib и Seaborn

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

    В этой статье мы займемся Разведочным анализом данных (Exploratory Data Analysis, или EDA). Это процесс, в ходе которого мы «знакомимся» с данными, ищем закономерности, аномалии и проверяем гипотезы с помощью визуализации.

    Нашими инструментами станут две самые популярные библиотеки Python: Matplotlib и Seaborn.

    Зачем нужна визуализация?

    Представьте, что у вас есть таблица с данными о продажах. Вы посчитали среднее значение и стандартное отклонение. Кажется, что вы знаете о данных всё. Но существует знаменитый пример — Квартет Анскомба. Это четыре набора данных, у которых одинаковые средние значения, дисперсии и корреляции, но если построить их графики, они выглядят совершенно по-разному.

    !Квартет Анскомба: четыре набора данных с идентичными статистическими показателями, но абсолютно разной визуальной структурой.

    Визуализация — это единственный способ увидеть структуру данных, которую скрывает сухая статистика.

    Matplotlib: Фундамент графики в Python

    Matplotlib — это базовая библиотека для построения графиков в Python. Она очень мощная и позволяет настроить каждый пиксель изображения, но её синтаксис может показаться многословным.

    Анатомия графика

    Чтобы эффективно работать с Matplotlib, нужно понимать иерархию объектов:

  • Figure (Фигура): Это «холст» или окно, в котором рисуется всё содержимое.
  • Axes (Оси): Это сам график (система координат) внутри фигуры. На одной фигуре может быть несколько осей (например, два графика рядом).
  • Axis (Ось): Это конкретная ось X или Y с делениями и подписями.
  • !Структура объекта Figure в Matplotlib: контейнер, содержащий оси, графики и текстовые элементы.

    Простой пример

    Команда plt.plot() строит линейный график. Мы последовательно добавляем заголовок, подписи осей и сетку.

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

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

    Для работы нам понадобятся обе библиотеки:

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

    Первый шаг EDA — изучить каждую переменную отдельно. Нас интересует распределение данных.

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

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

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

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

    Boxplot (или диаграмма размаха) — незаменимый инструмент для поиска выбросов (аномальных значений). Чтобы понять его, нам нужно немного математики описательной статистики.

    Boxplot строится на основе квартилей — значений, которые делят упорядоченные данные на 4 равные части.

    * (25-й перцентиль): 25% данных находятся ниже этого значения. * (Медиана): 50% данных находятся ниже этого значения. * (75-й перцентиль): 75% данных находятся ниже этого значения.

    Ключевое понятие здесь — Межквартильный размах (Interquartile Range, IQR). Он показывает разброс центральной половины данных.

    Где: * — межквартильный размах. * — третий квартиль (75%). * — первый квартиль (25%).

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

    Формула для определения границ выбросов:

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

    !Устройство диаграммы Boxplot: медиана, квартили и определение выбросов через межквартильный размах.

    В коде это выглядит очень просто:

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

    Теперь посмотрим, как две переменные зависят друг от друга.

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

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

    Параметр hue='sex' раскрашивает точки в разные цвета в зависимости от пола клиента. Это позволяет добавить третье измерение (категориальное) на плоский график.

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

    Корреляция — это мера линейной связи между двумя переменными. Самый популярный коэффициент — коэффициент корреляции Пирсона (). Он меняется от -1 до 1.

    Математическая формула коэффициента Пирсона:

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

    Если , это полная положительная связь (рост одной переменной ведет к росту другой). Если — полная отрицательная связь. Если — линейной связи нет.

    Чтобы визуализировать корреляцию сразу всех переменных, используют тепловую карту:

    Pairplot: Взгляд с высоты птичьего полета

    Если вы хотите увидеть всё и сразу, используйте pairplot. Он строит диаграммы рассеяния для каждой пары переменных и гистограммы распределения на диагонали.

    Это невероятно мощный инструмент для быстрого старта анализа нового датасета.

    Заключение

    Разведочный анализ данных (EDA) — это искусство задавать вопросы данным с помощью графиков. Мы изучили:

  • Matplotlib для создания основы графиков.
  • Seaborn для красивой и быстрой статистической визуализации.
  • Гистограммы и Boxplot для анализа распределений и поиска выбросов.
  • Scatterplot и Heatmap для поиска взаимосвязей и корреляций.
  • Теперь, когда мы умеем загружать, очищать и визуализировать данные, мы готовы к самому интересному этапу — созданию предсказательных моделей. В следующей части курса мы погрузимся в основы Машинного обучения.

    4. Основы машинного обучения: обучение с учителем и библиотека Scikit-Learn

    Основы машинного обучения: обучение с учителем и библиотека Scikit-Learn

    Мы прошли долгий путь: настроили окружение, научились манипулировать данными с Pandas и визуализировать их с помощью Seaborn. Теперь, когда данные очищены и изучены, мы подошли к самому захватывающему этапу — Машинному обучению (Machine Learning).

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

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

    В традиционном программировании вы пишете правила. Например, «если сумма чека больше 5000 рублей, сделай скидку 10%». Вы явно задаете логику.

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

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

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

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

    В терминах Data Science: * Признаки (Features, ): Характеристики объекта (вес фрукта, цвет, текстура). * Целевая переменная (Target, ): Правильный ответ (название фрукта).

    Задача модели — найти математическую зависимость , такую что:

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

    Два типа задач обучения с учителем

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

  • Регрессия (Regression): Целевая переменная — это число (непрерывная величина).
  • Примеры:* Предсказание цены квартиры, температуры воздуха, выручки магазина.
  • Классификация (Classification): Целевая переменная — это категория (класс, метка).
  • Примеры:* Спам или не спам, болен пациент или здоров, кошка или собака на фото.

    !Визуальное различие между задачами регрессии (предсказание числа) и классификации (разделение на классы).

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

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

    Алгоритм работы с Scikit-Learn

  • Импорт: Загружаем нужный класс модели.
  • Инициализация: Создаем экземпляр модели (можно задать настройки — гиперпараметры).
  • Обучение (fit): Скармливаем модели данные () и ответы (). Здесь происходит магия математики.
  • Предсказание (predict): Просим обученную модель предсказать ответы для новых данных.
  • Задача Регрессии: Линейная регрессия

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

    Линейная регрессия пытается провести прямую линию через данные, которая описывается уравнением:

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

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

    Пример кода

    Разделение данных: Train и Test

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

    Если студент выучит ответы к экзамену наизусть, он сдаст его на отлично, но не поймет предмет. Это называется переобучением (Overfitting). Чтобы проверить реальные знания, нужны новые вопросы.

    Поэтому мы делим данные на две части:

  • Обучающая выборка (Training set): Обычно 70-80% данных. На них модель учится.
  • Тестовая выборка (Test set): Оставшиеся 20-30%. На них мы проверяем качество.
  • В Scikit-Learn для этого есть функция train_test_split.

    Задача Классификации: k-Ближайших Соседей (k-NN)

    Рассмотрим задачу классификации на примере алгоритма k-Nearest Neighbors (k-NN). Это простой и интуитивный алгоритм.

    Идея: «Скажи мне, кто твой друг, и я скажу, кто ты». Чтобы классифицировать новый объект, алгоритм смотрит на ближайших к нему объектов из обучающей выборки и выбирает тот класс, который встречается чаще всего.

    !Иллюстрация работы алгоритма k-NN: классификация новой точки на основе большинства голосов ближайших соседей.

    Пример с ирисами Фишера

    Используем встроенный датасет Iris, где по размерам лепестков нужно определить вид цветка.

    Оценка качества модели

    Как понять, что модель работает хорошо? Нам нужны метрики.

    Для классификации часто используют Accuracy (Точность) — долю правильных ответов:

    Где: * — точность модели. * — количество правильно классифицированных объектов. * — общее количество объектов.

    Для регрессии Accuracy не подходит (мы редко угадываем число с точностью до копейки). Там используют MSE (Mean Squared Error) — среднюю квадратичную ошибку:

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

    Чем меньше MSE, тем лучше модель.

    Заключение

    Сегодня мы сделали огромный шаг вперед. Мы разобрали суть обучения с учителем, узнали разницу между регрессией и классификацией, и построили свои первые модели с помощью Scikit-Learn.

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

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

    5. Оценка качества моделей, подбор гиперпараметров и введение в кластеризацию

    Оценка качества моделей, подбор гиперпараметров и введение в кластеризацию

    В предыдущей статье мы сделали важный шаг: обучили наши первые модели с учителем — линейную регрессию и метод ближайших соседей. Мы даже проверили их точность с помощью метрики accuracy (доля правильных ответов). Казалось бы, дело сделано?

    На самом деле, обучение модели (model.fit) — это лишь начало. В реальных проектах Data Science возникают два критических вопроса:

  • Действительно ли модель хороша? (Спойлер: accuracy часто врет).
  • Как сделать модель лучше? (Настройка «ручек» управления).
  • Кроме того, сегодня мы откроем дверь в новый раздел машинного обучения, где у нас нет правильных ответов, — обучение без учителя и алгоритмы кластеризации.

    Почему Accuracy недостаточно?

    Представьте, что вы строите модель для обнаружения редкого заболевания, которое встречается у 1% населения. Если ваша модель будет просто всем подряд говорить «Здоров», её точность (accuracy) составит 99%. Звучит великолепно, но такая модель абсолютно бесполезна, так как она пропустит всех больных.

    Для более глубокой оценки классификации используется Матрица ошибок (Confusion Matrix).

    Матрица ошибок

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

    * True Positive (TP): Истинно положительные. Модель сказала «Да», и это правда. * True Negative (TN): Истинно отрицательные. Модель сказала «Нет», и это правда. * False Positive (FP): Ложноположительные (Ошибка I рода). Модель сказала «Да», но ошиблась (ложная тревога). * False Negative (FN): Ложноотрицательные (Ошибка II рода). Модель сказала «Нет», но ошиблась (пропуск цели).

    !Визуальное представление четырех исходов классификации.

    На основе этих значений строятся более надежные метрики.

    Precision (Точность) и Recall (Полнота)

    Precision отвечает на вопрос: «Если модель назвала объект целевым, какова вероятность, что она права?». Это важно, когда высока цена ложной тревоги (например, спам-фильтр: мы не хотим, чтобы важное письмо улетело в спам).

    Где: * — точность. * — количество истинно положительных срабатываний. * — количество ложных срабатываний.

    Recall отвечает на вопрос: «Какую долю целевых объектов модель смогла найти?». Это критически важно в медицине: лучше перестраховаться, чем пропустить болезнь.

    Где: * — полнота. * — количество истинно положительных срабатываний. * — количество пропущенных целей.

    F1-Score

    Часто нам нужен баланс между Precision и Recall. Для этого используют их гармоническое среднее — F1-меру.

    Где: * — итоговая метрика качества. * — точность. * — полнота.

    Если одна из метрик (Precision или Recall) близка к нулю, F1-Score тоже упадет до нуля.

    Кросс-валидация: защита от случайности

    В прошлый раз мы делили данные на train и test один раз. Но что, если нам «повезло» с разделением, и в тест попали самые легкие примеры? Оценка будет завышена.

    Чтобы получить честную оценку, используют кросс-валидацию (Cross-Validation).

    Метод K-Fold работает так:

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

    В Scikit-Learn это делается одной функцией:

    Подбор гиперпараметров (Hyperparameter Tuning)

    У каждой модели есть два типа параметров:

  • Параметры модели: Выучиваются сами в процессе fit (например, веса в линейной регрессии).
  • Гиперпараметры: Задаются человеком до обучения (например, количество соседей в k-NN).
  • Как найти идеальные гиперпараметры? Не перебирать же их вручную?

    Grid Search (Поиск по сетке)

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

    Введение в кластеризацию (Clustering)

    До сих пор мы занимались обучением с учителем: у нас были правильные ответы . Но что делать, если ответов нет? Представьте, что у вас есть база данных клиентов магазина, и вы хотите разбить их на сегменты (например, «экономные», «богатые», «новички»), но вы заранее не знаете, кто есть кто.

    Это задача обучения без учителя (Unsupervised Learning). Самый популярный метод здесь — Кластеризация.

    Алгоритм K-Means (К-средних)

    Это простой и эффективный алгоритм, который разбивает данные на групп (кластеров).

    Как это работает:

  • Мы выбираем число кластеров .
  • Алгоритм случайно ставит точек в пространстве данных — это начальные центры кластеров (центроиды).
  • Каждая точка данных приписывается к ближайшему центроиду.
  • Центроиды перемещаются в центр масс своих новых кластеров.
  • Шаги 3 и 4 повторяются, пока центроиды не перестанут двигаться.
  • Расстояние между точками обычно считается как Евклидово расстояние:

    Где: * — расстояние между точками и . * — количество признаков (измерений). * — координаты точек по -му измерению. * — сумма квадратов разностей координат.

    Метод локтя (Elbow Method)

    Главная проблема K-Means — нужно заранее сказать, сколько кластеров мы ищем. Как узнать оптимальное число?

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

    Где: * — сумма квадратов внутрикластерных расстояний. * — количество кластеров. * — множество точек, принадлежащих кластеру . * — конкретная точка данных. * — центр (центроид) кластера .

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

    Заключение

    Сегодня мы превратились из новичков, умеющих просто запускать fit/predict, в инженеров, которые:

  • Понимают, что accuracy — не панацея, и используют Precision/Recall.
  • Умеют честно оценивать модели через кросс-валидацию.
  • Автоматически подбирают лучшие настройки через Grid Search.
  • Познакомились с миром без учителя и алгоритмом K-Means.
  • В следующей части курса мы коснемся темы, которая сейчас у всех на слуху — Нейронные сети и Глубокое обучение (Deep Learning).