W3docs

Начало работы

Узнайте, как настроить Python для машинного обучения, понять рабочий процесс ML и запустить первую модель с scikit-learn, NumPy и pandas.

Начало работы с машинным обучением на Python

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

К концу главы вы запустите полный пример классификации с использованием трёх основных библиотек: NumPy, pandas и scikit-learn.

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

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

Существует три широкие категории:

КатегорияЧто делаетТипичный пример
Обучение с учителемОбучается на размеченных примерах (вход → известный выход)Определение спама, предсказание цены дома
Обучение без учителяНаходит скрытую структуру в неразмеченных данныхСегментация клиентов, обнаружение аномалий
Обучение с подкреплениемАгент обучается методом проб и ошибок с вознаграждениямиИгровой ИИ, робототехника

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

Почему Python для машинного обучения?

Python стал языком по умолчанию для ML по нескольким причинам:

  • Читаемый синтаксис — алгоритмы можно быстро прототипировать без лишнего шаблонного кода.
  • Богатая экосистема — scikit-learn, TensorFlow, PyTorch и Keras имеют первоклассные Python API.
  • Инструменты для работы с данными — NumPy и pandas делают обработку данных простой и удобной.
  • Сообщество — крупнейшее ML-сообщество, то есть множество обучающих материалов, ответов на Stack Overflow и предобученных моделей.

Настройка среды разработки

Установка Python

Скачайте Python 3.10 или новее с сайта python.org. Проверьте установку:

python3 --version

Вы должны увидеть вывод вида Python 3.10.15 (или новее).

Создание виртуальной среды

Виртуальная среда изолирует пакеты вашего проекта от системной установки Python. Это предотвращает конфликты версий между проектами.

python3 -m venv ml-env

Активируйте её:

# macOS / Linux
source ml-env/bin/activate

# Windows (Command Prompt)
ml-env\Scripts\activate.bat

В строке приглашения теперь будет отображаться (ml-env), подтверждая, что среда активна.

Установка основных библиотек

При активной виртуальной среде установите три библиотеки, которые вы будете использовать на протяжении всей серии:

pip install numpy pandas scikit-learn

Сохраните точные версии для воспроизводимости:

pip freeze > requirements.txt

Любой, кто клонирует ваш проект, сможет воспроизвести вашу среду с помощью pip install -r requirements.txt.

Рабочий процесс машинного обучения

Каждый проект по обучению с учителем следует одному и тому же пятишаговому конвейеру:

Raw data → Clean & prepare → Split → Train model → Evaluate

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

Шаг 1 — Изучение данных с помощью NumPy и pandas

Прежде чем что-либо обучать, нужно понять, как выглядят ваши данные. NumPy обеспечивает быструю арифметику с массивами; pandas добавляет таблицы с метками (DataFrames), которые упрощают исследование.

NumPy: изучение числового массива

import numpy as np

data = np.array([2.1, 3.4, 1.8, 5.0, 2.7])
print('Mean:', data.mean())   # 3.0
print('Std: ', round(data.std(), 4))  # 1.1402
print('Max: ', data.max())    # 5.0

pandas: создание небольшого набора данных

import pandas as pd

df = pd.DataFrame({
    'age':    [25, 30, 22, 35, 28],
    'income': [40000, 55000, 32000, 70000, 48000],
    'bought': [0,     1,     0,     1,     0],
})

print(df.shape)             # (5, 3)
print(df['income'].mean())  # 49000.0
print(df.isnull().sum())    # 0 missing values in each column

df.shape показывает количество строк и столбцов. isnull().sum() считает пропущенные значения по каждому столбцу — всегда проверяйте это перед построением модели.

Шаг 2 — Очистка и подготовка данных

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

Обработка пропущенных значений

Замените пропущенные числа медианой столбца (устойчивой к выбросам) или средним:

import pandas as pd

df = pd.DataFrame({
    'age':    [25, None, 22, 35, 28],
    'income': [40000, 55000, None, 70000, 48000],
})

df['age']    = df['age'].fillna(df['age'].median())
df['income'] = df['income'].fillna(df['income'].mean())

print(df.isnull().sum())
# age       0
# income    0

Масштабирование признаков

Многие алгоритмы (метод k-ближайших соседей, SVM, нейронные сети) чувствительны к масштабу признаков. Столбец со значениями в тысячах будет доминировать над столбцом с единичными значениями, если не нормализовать их. StandardScaler вычитает среднее и делит на стандартное отклонение, так что каждый признак имеет среднее 0 и стандартное отклонение 1:

from sklearn.preprocessing import StandardScaler
import numpy as np

X = np.array([[1.0, 200.0], [2.0, 400.0], [3.0, 300.0]])
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled.round(2))
# [[-1.22 -1.22]
#  [ 0.    1.22]
#  [ 1.22  0.  ]]

Подробнее см. в разделе Масштабирование признаков.

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

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

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

test_size=0.2 резервирует 20 % данных для тестирования. random_state=42 делает разбиение воспроизводимым. См. главу Train/Test Split о стратегиях, таких как стратифицированное разбиение и кросс-валидация.

Шаг 4 — Обучение модели

Располагая чистыми, разделёнными данными, можно обучить первую модель. В примере ниже используется набор данных Iris — классический эталонный тест с 150 образцами, 4 числовыми признаками и 3 видами цветов для классификации.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 1. Load
iris = load_iris()

# 2. Split
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42
)

# 3. Train
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 4. Predict & evaluate
predictions = model.predict(X_test)
print(f'Test samples: {len(X_test)}')   # 30
print(f'Accuracy: {accuracy_score(y_test, predictions):.2f}')  # 1.00

RandomForestClassifier обучает множество деревьев решений на случайных подмножествах данных и объединяет их голоса. Он хорошо справляется с нелинейными зависимостями и является сильным базовым решением для задач классификации. n_estimators=100 задаёт количество деревьев.

Шаг 5 — Оценка модели

Точность (доля правильных предсказаний) проста для понимания, но может вводить в заблуждение, когда один класс значительно реже других. scikit-learn предоставляет полный набор метрик:

МетрикаЧто измеряет
Accuracy (точность)Общая доля правильных ответов
Precision (точность предсказания)Из предсказанных положительных — сколько действительно положительные
Recall (полнота)Из реальных положительных — сколько мы предсказали правильно
F1 scoreГармоническое среднее precision и recall

Подробнее об оценке см. в главе Матрица ошибок.

Выбор подходящего алгоритма

Разные задачи требуют разных алгоритмов. Вот краткий ориентир:

Тип задачиПопробуйте сначала
КлассификацияRandomForestClassifier, LogisticRegression
РегрессияLinearRegression, RandomForestRegressor
КластеризацияKMeans
Снижение размерностиPCA

Большинство из них вы изучите в остальной части серии. Хорошие отправные точки: K-Nearest Neighbors, Decision Tree и Linear Regression.

Типичные ошибки новичков

  • Утечка данных — подгонка масштабировщика на полном наборе данных (до разбиения) приводит к проникновению статистики тестовой выборки в обучение. Всегда обучайте трансформеры только на обучающей выборке, а затем применяйте их к тестовой.
  • Переобучение — модель, которая запоминает обучающие данные, плохо работает на новых данных. Используйте Кросс-валидацию для раннего обнаружения этой проблемы.
  • Игнорирование дисбаланса классов — если 95 % ваших меток — «отрицательные», модель, всегда предсказывающая «отрицательное», даст 95 % точности, но окажется бесполезной. Проверяйте распределение классов перед выбором метрики.
  • Пропуск исследования данных — всегда изучайте данные перед построением модели. Проверяйте диапазоны, распределения и количество пропущенных значений.

Заключение

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

Was this page helpful?