Начало работы
Узнайте, как настроить 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.0pandas: создание небольшого набора данных
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 columndf.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.00RandomForestClassifier обучает множество деревьев решений на случайных подмножествах данных и объединяет их голоса. Он хорошо справляется с нелинейными зависимостями и является сильным базовым решением для задач классификации. 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 и понимание полного конвейера обучения с учителем: загрузить данные, очистить их, разделить, обучить модель и оценить на отложенных данных. Следующие главы углубляются в каждый шаг — начиная с подготовки данных, проходя через отдельные алгоритмы и завершая продвинутыми темами, такими как кросс-валидация и подбор гиперпараметров.