ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Машинное обучение с нуля: план обучения и первый проект на Python

Автор: · Обновлено

Машинное обучение — это способ строить правила по примерам, когда все условия трудно или дорого записать вручную. Разработчик задаёт данные, ожидаемый результат и способ измерения ошибки, а алгоритм подбирает параметры модели, которые помогают делать прогнозы для новых объектов.

Чем модель отличается от обычной программы

В обычной программе человек формулирует правила: если температура ниже нуля, показать предупреждение. В ML-системе правило получается из наблюдений. Например, для оценки стоимости квартиры модель сопоставляет площадь, район, этаж и состояние с известными ценами, а затем ищет зависимость между признаками и ответом.

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

Четыре части учебной задачи

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

Что нужно знать до первого проекта

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

ОсноваЧто нужно уметьКак проверить себя
PythonСписки, циклы, условия, функции, импорт модулейНаписать функцию средней абсолютной ошибки для двух списков
Табличные данныеСтрока, столбец, тип, пропуск, фильтрацияОбъяснить, что представляет одна строка и когда известны её поля
АлгебраПодстановка в формулу, степень, среднееПосчитать три прогноза по формуле y = 2x + 1
СтатистикаРазброс, выборка, среднее и медианаОбъяснить, почему один выброс по-разному меняет среднее и медиану
Проверка программЧитать исключение, проверять форму данныхНайти строку, из-за которой список чисел превратился в список строк

Производную можно освоить вместе с линейной регрессией: она объяснит направление изменения ошибки. Матрицы потребуются для нескольких признаков, вероятности — для интерпретации классификации. Учите эти темы по мере появления конкретного вопроса, возвращаясь к маленьким расчётам. Такой набор предпосылок согласуется с официальным вводным курсом Google, но таблица самопроверки выше составлена для этого урока.

Минимальный набор инструментов

Для небольших таблиц достаточно обычного компьютера, Python 3, редактора с терминалом и отдельного виртуального окружения. NumPy пригодится для массивов, pandas — для таблиц, scikit-learn — для обучения и оценки. Jupyter удобен для последовательных заметок, но этот проект запускается обычным файлом; GPU, облачный сервер и платный доступ к моделям не требуются.

Создайте пустую папку проекта. На Linux или macOS выполните:

python3 -m venv .venv
.venv/bin/python -m pip install numpy pandas scikit-learn

В Windows PowerShell, если установлен Python Launcher:

py -m venv .venv
.venv/Scripts/python.exe -m pip install numpy pandas scikit-learn

Прямой путь к интерпретатору позволяет обойтись без активации окружения. Если редактор сообщает ModuleNotFoundError, сначала проверьте, что он использует Python из этой же .venv. Установка пакета и запуск файла разными интерпретаторами — частая причина ошибки. Подробности есть в руководстве Python по окружениям и инструкции scikit-learn.

Как изучать машинное обучение по шагам

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

ЭтапДействиеРезультат для перехода дальше
1. ПостановкаВыбрать один числовой или категориальный ответАбзац: объект, момент прогноза, допустимые признаки, цена ошибки
2. Анализ данныхПосчитать строки, пропуски и диапазоныПаспорт таблицы и список обнаруженных проблем
3. РазделениеВыбрать независимые train, validation и testСохранённые индексы разбиения и объяснение его выбора
4. Базовое решениеПредсказывать константу или самый частый классМетрика, с которой можно сравнить обученную модель
5. Первая модельОбучить линейную модель или небольшое деревоМетрика validation и несколько разобранных ошибок
6. Итоговая проверкаЗафиксировать выбор и один раз открыть testКороткий отчёт с результатом и ограничениями
7. ПовторениеЗапустить проект из чистого окруженияТе же данные, версии пакетов и воспроизводимый результат

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

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

Представим учебную службу уборки. До начала работы известна площадь комнаты, а после окончания — затраченные минуты. Все значения ниже выдуманы программой; это упражнение по построению эксперимента, а не модель реального сервиса. Случайное разделение допустимо именно для созданных здесь независимых наблюдений. Для повторных заказов одного клиента или прогноза будущей недели потребовался бы другой split.

Сохраните код в start_ml.py. Метод fit настраивает параметры, predict получает прогнозы. Для MAE меньшая величина означает меньшую среднюю ошибку в минутах. Данные делятся на 60% train, 20% validation и 20% test; две заранее выбранные модели сравниваются только на validation.

from random import Random
from sklearn.dummy import DummyRegressor
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split

rng = Random(42)
X = [[rng.uniform(20, 120)] for _ in range(240)]
y = [10 + 0.8 * row[0] + rng.uniform(-5, 5) for row in X]

X_train, X_rest, y_train, y_rest = train_test_split(
    X, y, test_size=0.4, random_state=42
)
X_valid, X_test, y_valid, y_test = train_test_split(
    X_rest, y_rest, test_size=0.5, random_state=42
)

models = {
    "baseline": DummyRegressor(strategy="median"),
    "linear": LinearRegression(),
}
scores = {}
for name, model in models.items():
    model.fit(X_train, y_train)
    scores[name] = mean_absolute_error(y_valid, model.predict(X_valid))
    print(f"validation {name}: MAE={scores[name]:.3f}")

winner = min(scores, key=scores.get)
final_model = models[winner].fit(X_train + X_valid, y_train + y_valid)
test_mae = mean_absolute_error(y_test, final_model.predict(X_test))
print(f"test {winner}: MAE={test_mae:.3f}")
print(f"60 квадратных метров: {final_model.predict([[60]])[0]:.1f} мин")

Запуск: .venv/bin/python start_ml.py на Linux/macOS или .venv/Scripts/python.exe start_ml.py в Windows. Вы должны получить две validation-оценки, одну test-оценку и прогноз для площади 60. При проверке примера получился такой вывод:

validation baseline: MAE=20.603
validation linear: MAE=2.742
test linear: MAE=2.436
60 квадратных метров: 58.2 мин

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

После выбора модели мы переобучили её на train вместе с validation; test при этом оставался закрыт. Не меняйте алгоритм после каждого взгляда на test: тогда он тоже станет частью настройки. Для числовой цели начните с MAE и просмотра остатков. Для классификации сначала выясните доли классов и цену ошибок: одна accuracy может скрыть полный пропуск редкого класса.

Какие ресурсы использовать и что сохранить

После основ программирования Python Tutorial помогает освоить язык; сам справочник предупреждает, что предполагает общие навыки программирования. Для таблиц подойдут вводные упражнения pandas, для интерфейсов моделей — Getting Started scikit-learn. Выберите один маршрут и применяйте прочитанное к своему проекту, вместо одновременного прохождения нескольких курсов.

Сохраните код, seed, описание происхождения данных, индексы выборок и версии зависимостей. Список пакетов можно записать командой .venv/bin/python -m pip freeze > requirements.txt (в Windows замените путь на .venv/Scripts/python.exe). В отчёте достаточно пяти пунктов: что прогнозируем, как разделили данные, с чем сравнили модель, какую ошибку получили и где модель применять нельзя. Для следующего проекта замените синтетику небольшим открытым набором с понятной лицензией и описанием сбора, заново проверив единицу разбиения.

Где чаще всего ошибаются в начале

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

Другая ошибка — считать найденную зависимость причинной. Если продажи зонтов связаны с числом пробок, это ещё не значит, что зонты создают заторы: обе величины может менять дождь. Предсказательная модель обнаруживает закономерность, но сама по себе не доказывает причину.

Практика: сформулируйте задачу

Выполните проект и составьте его краткий отчёт. Затем выберите один бытовой прогноз: время поездки, необходимость полива растения или категорию сообщения. Запишите объект, три допустимых признака, целевую переменную и действие после прогноза. Найдите поле, известное только после события, и исключите его. Наконец, объясните, почему разбиение из синтетического примера нельзя автоматически перенести на новый набор. Результат упражнения — постановка и план проверки, а не просто выполненный вызов fit.

Что важно запомнить

Частые вопросы

Для машинного обучения всегда нужна нейросеть?

Нет. Линейные модели, деревья и методы ближайших соседей часто проще, быстрее и лучше подходят для табличных данных. Алгоритм выбирают по задаче, объёму данных, ограничениям и результатам честной проверки.

Может ли модель обучаться без правильных ответов?

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

Достаточно ли один раз получить высокую точность?

Нет. Нужно проверить модель на неиспользованных данных, сравнить с простым базовым решением и убедиться, что метрика соответствует цене ошибок. После запуска качество также может меняться вместе с данными.

Нужно ли сначала полностью изучить математику?

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

Как понять, что я уже получил результат?

Вы можете заново запустить код, объяснить каждую колонку, сравнить модель с baseline и сообщить ошибку на закрытом test. Это небольшой законченный результат; высокая цифра без этих объяснений им не является.

Источники