18+
реклама
18+
Бургер менюБургер меню

Холл Майкл Л. – Алгоритмы машинного обучения: базовый курс (страница 11)

18

Пример кода:

```python

from sklearn.metrics import mean_absolute_error

y_real = [3.5, 5.2, 6.8, 7.1, 9.3] # Реальные цены

y_pred = [3.6, 5.0, 7.0, 7.3, 9.5] # Предсказанные цены

mae = mean_absolute_error(y_real, y_pred)

print(f"Средняя абсолютная ошибка (MAE): {mae:.2f} млн рублей")

```

Среднеквадратичная ошибка (MSE – Mean Squared Error)

MSE похожа на MAE, но ошибки возводятся в квадрат перед усреднением.

Зачем это нужно?

Большие ошибки сильнее наказываются, что помогает модели учитывать случаи, когда предсказание сильно отличается от реального значения. Однако из-за возведения в квадрат ошибка измеряется в других единицах (если предсказываем цену в миллионах рублей, MSE будет в миллионах в квадрате).

Пример кода:

```python

from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_real, y_pred)

print(f"Среднеквадратичная ошибка (MSE): {mse:.2f}")

```

Корень из среднеквадратичной ошибки (RMSE – Root Mean Squared Error) RMSE устраняет недостаток MSE: он измеряется в тех же единицах, что и предсказываемая величина. Это делается путем извлечения квадратного корня из MSE.

Пример кода:

```python

rmse = mean_squared_error(y_real, y_pred, squared=False)

print(f"Корень из среднеквадратичной ошибки (RMSE): {rmse:.2f} млн рублей")

```

Коэффициент детерминации (R² – R-squared, "коэффициент объяснённой дисперсии") Показывает, какую долю вариации целевой переменной объясняет модель.

– R² = 1 означает идеальную модель (все точки лежат на линии предсказания).

– R² = 0 значит, что модель предсказывает не лучше случайного угадывания.

– R² < 0 говорит о том, что модель вообще не подходит.

Пример кода:

```python

from sklearn.metrics import r2_score

r2 = r2_score(y_real, y_pred)

print(f"Коэффициент детерминации (R²): {r2:.2f}")

```

В задачах классификации важно оценить, насколько правильно модель относит объекты к нужным категориям.

Точность (Accuracy) Показывает, какая доля предсказаний оказалась верной.

Формула:

Пример: Если модель правильно определила 90 писем как "не спам" и 10 как "спам" из 100 писем, точность составит 90%.

Пример кода:

```python

from sklearn.metrics import accuracy_score

y_real = [1, 0, 1, 1, 0, 0, 1, 0, 1, 1] # Истинные метки (1 – спам, 0 – не спам)

y_pred = [1, 0, 1, 0, 0, 0, 1, 0, 1, 1] # Предсказанные моделью метки

accuracy = accuracy_score(y_real, y_pred)

print(f"Точность (Accuracy): {accuracy:.2f}")

```

Недостаток Accuracy:

Если классы сильно несбалансированы (например, 95% данных – это "не спам", а 5% – "спам"), модель может просто всегда предсказывать "не спам" и получать 95% точности, но при этом не распознавать спам.

Матрица ошибок (Confusion Matrix)

Показывает, сколько раз модель правильно и неправильно предсказала каждый класс.

```python

from sklearn.metrics import confusion_matrix

conf_matrix = confusion_matrix(y_real, y_pred)

print("Матрица ошибок:\n", conf_matrix)

```

Где:

– `TN` (True Negative) – правильно определённые объекты класса "не спам"

– `TP` (True Positive) – правильно определённые объекты класса "спам"

– `FN` (False Negative) – спам, который модель не распознала

– `FP` (False Positive) – "не спам", ошибочно классифицированный как спам

Precision, Recall, F1-score

Когда классы несбалансированы, точность уже не так важна. Лучше использовать Precision (точность) и Recall (полноту):

– Precision – из всех предсказанных "спам", сколько реально является спамом.

– Recall – из всех реальных "спам", сколько модель нашла.

F1-score – среднее значение Precision и Recall.