Статья Автор: Деникина Н.В., Деникин А.В.

Библиотека sklearn и обучение моделей

scikit-learn — это самая популярная библиотека машинного обучения для Python. Она предоставляет простые и эффективные инструменты для анализа данных и построения предиктивных моделей.

Основные возможности sklearn:

  • Классификация (определение категории объекта)
  • Регрессия (предсказание числового значения)
  • Кластеризация (группировка похожих объектов)
  • Снижение размерности (уменьшение числа признаков)
  • Предобработка данных (нормализация, кодирование)
  • Оценка качества моделей

Процесс обучения модели: пошагово

Шаг 1: Подготовка данных

Данные должны быть представлены в виде:

  • X (признаки) — массив формы (n_samples, n_features)
  • y (целевая переменная) — массив формы (n_samples,)
import pandas as pd
import numpy as np

# Пример данных
df = pd.DataFrame({
    'площадь': [50, 60, 70, 80, 90],
    'комнаты': [1, 2, 2, 3, 3],
    'цена': [3000, 3500, 4000, 4500, 5000]
})

# Разделение на признаки и целевую переменную
X = df[['площадь', 'комнаты']]  # Признаки (features)
y = df['цена']  # Целевая переменная (target)

print(X.shape)  # (5, 2) — 5 объектов, 2 признака
print(y.shape)  # (5,) — 5 значений цены
Важно: X должен быть двумерным массивом, даже если используется один признак!
 
# ❌ Неправильно
X = df['площадь']  # Одномерный массив

# ✅ Правильно
X = df[['площадь']]  # Двумерный массив

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

Это необходимо для честной оценки качества модели на данных, которые она не видела при обучении.
 

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,    # 20% данных для теста
    random_state=42   # Для воспроизводимости результатов
)

print(f"Обучающая выборка: {X_train.shape}")
print(f"Тестовая выборка: {X_test.shape}")
Шаг 3: Создание и обучение модели
from sklearn.linear_model import LinearRegression

# Создание экземпляра модели
model = LinearRegression()

# Обучение модели (fit)
model.fit(X_train, y_train)

Что происходит внутри fit()?

Для линейной регрессии модель ищет оптимальные коэффициенты w и b, минимизирующие ошибку:

y = w₁·x₁ + w₂·x₂ + ... + wₙ·xₙ + b

Шаг 4: Получение параметров модели

После обучения у модели появляются атрибуты с результатами:

# Коэффициенты (веса признаков)
print(f"Коэффициенты: {model.coef_}")
# Например: [45.5, 320.8] — каждый м² добавляет 45.5 руб, 
#                            каждая комната — 320.8 руб

# Свободный член (intercept, смещение)
print(f"Intercept: {model.intercept_}")
# Например: 1200.0 — базовая цена

Шаг 5: Предсказание

# Предсказание на тестовой выборке
y_pred = model.predict(X_test)

# Предсказание для новых данных
new_data = np.array([[75, 2]])  # 75 м², 2 комнаты
price_prediction = model.predict(new_data)
print(f"Предсказанная цена: {price_prediction[0]:.2f}")

Шаг 6: Оценка качества модели

from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error

# R² (коэффициент детерминации): от 0 до 1, чем ближе к 1 — тем лучше
r2 = r2_score(y_test, y_pred)
print(f"R² = {r2:.4f}")

# MSE (средняя квадратичная ошибка): чем меньше — тем лучше
mse = mean_squared_error(y_test, y_pred)
print(f"MSE = {mse:.2f}")

# MAE (средняя абсолютная ошибка): среднее отклонение в тех же единицах, что и y
mae = mean_absolute_error(y_test, y_pred)
print(f"MAE = {mae:.2f}")

# Быстрый способ через метод score()
score = model.score(X_test, y_test)  # Возвращает R²
print(f"Score (R²) = {score:.4f}")

Печать