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}")