Машинное обучение с нуля: план обучения и первый проект на 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.
Что важно запомнить
- ML-модель получает правило из примеров, а не из готового списка условий.
- Постановка состоит из объектов, признаков, целевого ответа и метрики.
- Классификация предсказывает класс, регрессия — числовую величину.
- Закономерность в прогнозе не является автоматическим доказательством причины.
- Первый проект заканчивается сравнением с baseline, закрытой test-проверкой и воспроизводимым отчётом.
Частые вопросы
Для машинного обучения всегда нужна нейросеть?
Нет. Линейные модели, деревья и методы ближайших соседей часто проще, быстрее и лучше подходят для табличных данных. Алгоритм выбирают по задаче, объёму данных, ограничениям и результатам честной проверки.
Может ли модель обучаться без правильных ответов?
Да. При обучении без учителя алгоритм работает без целевой переменной и ищет структуру данных, например кластеры. Но полезность найденных групп всё равно должен оценить человек с учётом исходной задачи.
Достаточно ли один раз получить высокую точность?
Нет. Нужно проверить модель на неиспользованных данных, сравнить с простым базовым решением и убедиться, что метрика соответствует цене ошибок. После запуска качество также может меняться вместе с данными.
Нужно ли сначала полностью изучить математику?
Для первого эксперимента хватит подстановки в формулу, среднего, медианы и понимания выборки. Производные, матрицы и вероятности осваивайте вместе с моделями. Пропуск проверки данных нельзя компенсировать более сложной математикой.
Как понять, что я уже получил результат?
Вы можете заново запустить код, объяснить каждую колонку, сравнить модель с baseline и сообщить ошибку на закрытом test. Это небольшой законченный результат; высокая цифра без этих объяснений им не является.
Связанные исследования
- Где искать исследования по программированию и ML — Практический маршрут поиска исследований по программированию и ML: OpenAlex, Semantic Scholar, DBLP, arXiv, ACM, IEEE и проверка DOI через Crossref.
- AlphaFold 2 и 3: что предсказывают модели, как читать pLDDT и где их границы — Практический разбор AlphaFold 2 и 3: CASP14, pLDDT, PAE, комплексы биомолекул и ограничения вычислительного прогноза.