Чтобы начать работу с машинным обучением на Python, выберите небольшую задачу, разделите данные на обучающую и тестовую выборки и сравните простую модель с базовым ориентиром. Для первого упражнения вам не нужно арендовать GPU. В этом руководстве мы создадим полноценный классификатор на CPU, интерпретируем его ошибки и решим, когда имеет смысл менять инфраструктуру.
Цель — получить эксперимент, который вы сможете повторить и объяснить. Получить отдельный правильный прогноз менее полезно, чем знать, какие данные видела модель, как ее оценивали и где она ошибается.
Что изучать в первую очередь в машинном обучении на Python
Проект обучения с учителем имеет входные данные, называемые признаками, и известный ответ, называемый целевой переменной. В примере этой статьи признаками являются измерения цветов, а целевой переменной — вид. Модель изучает зависимость на обучающей выборке, а затем пытается классифицировать примеры, которые были отложены отдельно.
Прежде чем выбирать библиотеку, сформулируйте вопрос, на который хотите ответить:
| Задача | Тип ответа | Возможный первый эксперимент |
|---|---|---|
| Классифицировать наблюдение | Категория | Логистическая регрессия или дерево решений |
| Оценить величину | Число | Линейная регрессия и анализ ошибок |
| Найти группы без меток | Кластеры | Метод кластеризации и проверка групп |
| Работать с изображениями или языком в большом масштабе | Более сложные представления и прогнозы | Подходящая библиотека deep learning после определения оценки |
Не выбирайте нейронную сеть только потому, что она кажется более продвинутой. Если простое решение выполняет задачу в рамках необходимых затрат и сроков, оно является важным ориентиром для любой последующей альтернативы.
Подготовьте изолированное окружение
Вам понадобится установка Python, совместимая со scikit-learn, и доступ к терминалу. Создайте рабочую папку и виртуальное окружение, чтобы избежать конфликтов с другими проектами:
python -m venv .venv
В macOS или Linux активируйте его командой source .venv/bin/activate. В Windows PowerShell используйте .venv\Scripts\Activate.ps1 в соответствии с локальными политиками терминала. Затем установите библиотеку и зафиксируйте версии:
python -m pip install scikit-learn
python -m pip freeze > requirements.txt
Используйте python3 вместо python, если так называется исполняемый файл на вашем компьютере. Файл зависимостей помогает воссоздать окружение; также сохраняйте версию Python, код и конфигурацию эксперимента.
Первая полноценная модель: классификация цветов
набор Iris из scikit-learn содержит 150 наблюдений, четыре числовых признака и три класса. Он небольшой и подходит для изучения рабочего процесса, но не доказывает, что система готова к реальным данным.
Сохраните код ниже как exemplo_iris.py и выполните python exemplo_iris.py. Он использует 120 наблюдений для обучения и 30 для тестирования. Стратифицированное разделение сохраняет представительство классов; фиксированное начальное значение позволяет повторить то же разделение.
import platform
from time import perf_counter
import sklearn
from sklearn.datasets import load_iris
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score, confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.20, random_state=42, stratify=y
)
models = {
"baseline": DummyClassifier(strategy="most_frequent"),
"logistica": make_pipeline(
StandardScaler(), LogisticRegression(max_iter=1000)
),
}
for name, model in models.items():
start = perf_counter()
model.fit(X_train, y_train)
train_seconds = perf_counter() - start
pred = model.predict(X_test)
print(name, "acuracia=", round(accuracy_score(y_test, pred), 3),
"f1_macro=", round(f1_score(
y_test, pred, average="macro", zero_division=0
), 3))
print("matriz de confusao:", confusion_matrix(y_test, pred).tolist())
print("tempo de treino (s):", round(train_seconds, 6))
print("Python:", platform.python_version(),
"scikit-learn:", sklearn.__version__)
DummyClassifier предоставляет сравнение, которое не изучает связь между признаками и классом. При используемой здесь стратегии он прогнозирует наиболее частый класс в обучающей выборке. Если более сложная модель не улучшает такой ориентир, изучите данные, цель и оценку, прежде чем тратить больше ресурсов. Стратегии описаны в документации DummyClassifier.
Логистическая регрессия получает данные через Pipeline: сначала стандартизация, затем классификатор. Преобразования настраиваются на обучающей выборке и повторно применяются к тестовой. Это позволяет избежать вычисления масштаба с использованием информации, которая должна быть зарезервирована для оценки, — распространённой формы утечки данных. В документации по лучшим практикам scikit-learn объясняется эта предосторожность.
Как интерпретировать результаты и не обмануться
При запуске этого примера на CPU с Python 3.14.4 и scikit-learn 1.9.1 мы получили приведённые ниже результаты. Это результаты упражнения и данного разделения данных, а не обещание для другого набора.
| Модель | Точность на тесте | Макро-F1 |
|---|---|---|
| Базовая модель наиболее частого класса | 0,333 | 0,167 |
| Стандартизация + логистическая регрессия | 0,933 | 0,933 |
Матрица второй модели была [[10, 0, 0], [0, 9, 1], [0, 1, 9]]: две из 30 тестовых цветков были перепутаны между двумя последними классами. Это информативнее, чем просто сказать, что модель верно предсказала около 93% случаев.
Точность показывает долю правильных предсказаний на оцениваемом наборе. Макро-F1 вычисляет F1 для каждого класса и усредняет значения, не придавая больший вес наиболее частому классу. Матрица ошибок показывает, какие классы были перепутаны. Используйте все три показателя, чтобы понять поведение модели, вместо того чтобы искать только наибольшее число.
Выведенное время — это только время обучения данного запуска на вашем компьютере. На столь маленьком наборе оно зависит от машины и погрешности измерения. Не используйте это число, чтобы обещать экономию в облаке или сравнивать CPU и GPU.
Результат на Iris также не следует превращать в ожидание точности для вашего продукта. На собственных данных распределение, качество меток и стоимость ошибок могут быть совершенно другими. Редкая ошибка может быть важнее десятков простых верных ответов.
Прежде чем менять алгоритм, ответьте:
- Превзошла ли модель базовый ориентир при использовании в точности того же теста?
- В каком классе сосредоточены ошибки и каково их влияние на задачу?
- Есть ли во входных данных информация, которая была бы доступна только после предсказания?
- Представляет ли тест новые примеры или содержит дубликаты и наблюдения, связанные с обучающей выборкой?
- Сохраняется ли производительность при других корректных разделениях данных?
От упражнения к реальному набору данных
Случайное разделение удобно для Iris. Оно может быть неподходящим, если вы предсказываете будущие события, имеете несколько строк на одного клиента или обнаруживаете копии одного и того же наблюдения. В таких случаях рассмотрите разделение по времени или по группам в соответствии с тем, как будет использоваться модель. Параметр random_state не исправляет концептуально неверное разделение. В справке по train_test_split описаны элементы управления, доступные для этого простого разделения.
Отведите валидацию для выбора конфигураций и сохраняйте отдельный финальный тест. Если вы многократно обращаетесь к тесту, чтобы решить, какую следующую настройку сделать, он начинает влиять на ваш выбор. Для небольшого проекта уже поможет таблица экспериментов:
| Запись | Что фиксировать |
|---|---|
| Данные | Источник, дата, размер, столбцы и правило исключения |
| Разделение | По времени, по группам или случайное; seed, когда применимо |
| Модель | Алгоритм, параметры и версия зависимостей |
| Оценка | Основная метрика, ошибки по классам и сравнение с ориентиром |
| Эксплуатация | Время, память, размер артефакта и измеренная стоимость |
| Решение | Что улучшилось и какая проблема остаётся открытой |
Когда вы заменяете Iris собственной таблицей, проверяйте типы, пропущенные поля и категории до обучения. Храните преобразования вместе с моделью, чтобы при предсказании использовалась та же подготовка данных. Столбец, единица измерения которого изменилась, может вызвать проблемы, даже если код продолжает выполняться.
Когда GPU помогает — и когда не помогает
Пример в этом руководстве работает на CPU. Добавление видеокарты в машину не заставляет автоматически весь код scikit-learn использовать её. Проект документирует поддержку GPU для ограниченного набора оценщиков и конфигураций, в том числе через специальные входные данные и параметры. Проверьте точный путь выполнения выбранного алгоритма.
GPU стоит проверить экспериментально, когда есть совместимая реализация и нагрузка, способная её использовать, например обучение определённых нейронных сетей или пакетная обработка. Однако выигрыш должен компенсировать передачу данных, подготовку среды и стоимость инфраструктуры.
| Наблюдаемая ситуация | Рекомендуемое следующее действие |
|---|---|
| Мало данных и быстрое обучение на CPU | Уделите приоритетное внимание качеству данных и оценке |
| Чтение или подготовка занимают большую часть времени | Измерьте время хранения, загрузки и преобразований |
| Алгоритм без совместимого с GPU пути | Пересмотрите библиотеку или оставайтесь на CPU |
| Совместимое с GPU обучение занимает значительную часть цикла | Проведите контролируемый тест на рассматриваемой конфигурации |
| Большая модель или высокий объём инференса | Измерьте память, задержку и параллелизм на реальной нагрузке |
Сравнивайте общее время до получения полезного результата, а не только время выполнения одной операции. Учитывайте установку, передачу данных, обучение, валидацию, хранение и периоды простоя. Более быстрый вариант на одну эпоху может оказаться хуже, если для достижения необходимого качества потребуется больше попыток.
Когда проект дойдёт до этого этапа, Flatkey Cloud GPU позволяет оценить варианты аренды GPU NVIDIA. Проверьте конфигурацию, регион, доступность и условия для предполагаемой нагрузки. Учитывайте размер набора данных, библиотеку, необходимую память и цель теста; для завершения этого руководства не требуется арендовать GPU.
Перед вводом модели в эксплуатацию
Определите допустимый формат входных данных, поведение при некорректных полях и способ отслеживания ошибок после публикации. Храните версию модели и подготовку данных вместе. Перед масштабированием протестируйте прогноз на репрезентативных данных вне ноутбука.
Если следующий шаг — развернуть языковую модель на собственной инфраструктуре, руководство по развертыванию vLLM посвящено другому типу нагрузки. Не путайте небольшой табличный классификатор с эксплуатацией LLM: требования к памяти, оценке и серверу различаются.
Часто задаваемые вопросы
Нужна ли GPU, чтобы изучать машинное обучение с Python?
Нет. Представленный пример можно выполнить на CPU. Выбирайте более мощную инфраструктуру, когда есть измеренное узкое место и реализация, способная её использовать.
Почему перед более сложной моделью следует использовать базовый ориентир?
Он показывает, что можно получить с помощью простого правила. Это позволяет оценить, научилась ли модель чему-то полезному и оправдана ли дополнительная сложность.
Гарантирует ли одно и то же начальное значение одинаковый результат в любой среде?
Оно фиксирует случайные выборы, контролируемые этим параметром. Также записывайте версии и среду: различия в реализации и выполнении могут повлиять на результаты. Не путайте воспроизводимость одного разбиения с универсальной гарантией производительности.
Какой проект выбрать следующим после Iris?
Выберите небольшую задачу с понятными вам данными, проверяемой целевой переменной и критерием успеха. Повторите процесс: ориентир, корректное разбиение, модель, анализ ошибок и измерения. Эта привычка — основа для развития в машинном обучении с Python без увеличения затрат до возникновения необходимости.



