Метрики оценки

В этой статье мы обсудим различные метрики оценки в Python для оценки и сравнения различных моделей машинного обучения. Как правило, хорошей подходящей моделью является модель с минимальной разницей между фактическими и прогнозируемыми значениями для выбранной модели. Для задач классификации некоторые общие показатели оценки включают точность, матрицу путаницы, точность/отзыв, оценку F1 и кривую рабочих характеристик приемника (ROC). Для задач регрессии чаще всего используются среднеквадратическая ошибка (RMSE) и ошибка R-квадрата. В этой статье мы сосредоточимся на моделях регрессии. Мы вычислим и сравним ошибки RMSE и R-квадрата для прогнозирования цен на жилье в Бостоне с использованием моделей линейной регрессии и полиномиальной регрессии.

Введение в набор данных о жилье в Бостоне

Мы будем использовать цены на жилье в Бостоне в качестве набора данных, чтобы продемонстрировать измерения ошибок с использованием различных моделей регрессии. Есть много факторов, влияющих на стоимость жилья MEDV. В наборе данных о жилье в Бостоне учитываются и квантуются 13 факторов. Названия 13 факторов и целевая цена на жилье MEDV показаны в следующей таблице вместе с соответствующими пояснениями.

CRIM
Уровень преступности на душу населения по городам

ZN
Доля земель под жилую застройку, отведенных под участки площадью более 25 000 кв. футов

INDUS
Доля неторговых площадей на город

CHAS
фиктивная переменная Charles River (1, если участок граничит с рекой; 0 в противном случае)

NOX
Концентрация оксида азота (частей на 10 миллионов)

RM
Среднее количество комнат в жилом помещении

ВОЗРАСТ
Доля жилых единиц, построенных до 1940 г.

DIS
Взвешенное расстояние до пяти центров занятости в Бостоне

RAD
Индекс доступности радиальных магистралей

НАЛОГ
Ставка местного налога

PTRATIO
Соотношение учеников и учителей по городам

B
1000(Bk — 0,63)², где Bk — доля [лиц афроамериканского происхождения] по городам

LSTAT
Процент населения с более низким статусом

MEDV
Средняя стоимость домов, занимаемых владельцами, в 1000 долларов США

Настройте модель линейной регрессии

Мы будем использовать модель линейной регрессии из пакета Python sklearn для анализа набора данных и вычисления ошибок. Набор данных о жилье в Бостоне установлен в пакете Python sklearn. Следующий код Python импортирует все, что вам нужно для этой статьи. Мы используем pandas для преобразования формата CSV набора данных в формат фрейма данных, который может быть легко обработан sklearn.

import numpy as np
Import pandas as pd
from sklearn.datasets import load_boston
boston_dataset = load_boston()
dataset = pd.DataFrame(boston_dataset.data, columns = boston_dataset.feature_names)

Прежде чем мы выполним регрессионное вычисление, нам нужно сначала подготовить набор данных. Здесь мы импортируем пакет model_selection из sklearn, чтобы разделить исходный набор данных на обучающий и тестовый наборы. Параметр test_size сообщает, как разделить набор данных на обучающий и тестовый наборы. Учебный набор используется для обучения модели линейной регрессии, а тестовый набор используется для вычисления различных показателей ошибок.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 25)

Теперь мы можем импортировать модель линейной регрессии из sklearn следующим образом, чтобы подогнать модель к набору обучающих данных.

from sklearn.linear_model import LinearRegression
regressor_linear = LinearRegression()
regressor_linear.fit(X_train, y_train)

После подгонки мы вычислили все параметры (например, наклон и пересечение) модели линейной регрессии. Нам не нужно явно использовать эти параметры, поскольку все они хранятся в модели regressor_linear, и мы можем вызывать методы regressor_linear для выполнения прогнозирования и анализа ошибок. В приведенном ниже коде Python мы вызываем метод, предсказывающий из модели линейной регрессии, чтобы предсказать y_pred из X, где y хранит целевое MEDV (цену на жилье), а X хранит все 13 функций/столбцов, влияющих на цену на жилье. Мы вычисляем y_pred как для обучающего, так и для тестового набора данных. Теперь мы можем предсказать цену на жилье для любого нового набора данных X.

# Predicting R2 Score the Train set results
y_pred_train = regressor_linear.predict(X_train)
# Predicting R2 Score the Test set results
y_pred_test = regressor_linear.predict(X_test)

Ошибка RMSE и R2 для проблем регрессии

RMSE обычно используется в задачах регрессии. Отсюда следует предположение, что ошибка является несмещенной и подчиняется нормальному распределению. Как видно из названия, RMSE вычисляется путем извлечения квадратного корня из среднего значения квадратов разностей между прогнозируемыми и фактическими значениями. Это мера среднего отклонения предсказаний модели от фактических значений в наборе данных. Одной из отличительных особенностей RMSE является то, что на него сильно влияют выбросы. Другими словами, RMSE наказывает за большие ошибки. Другим подобным и также популярным показателем является ошибка R-квадрата, или R², которая представляет собой коэффициент детерминации, масштабируемый от 0 до 1: R² = 1-(SSE/SST), где SSE обозначает сумму квадратов ошибок, и SST обозначает общую сумму квадратов. Другими словами, R-квадрат — это просто доля дисперсии отклика, улавливаемая моделью. Например, если R² = 1, это означает, что модель идеально соответствует данным, а если R² = 0,7, это говорит о том, что модель может объяснить 70% того, что происходит в реальных данных, в то время как и RMSE, и R-квадрат указывают качество подгонки, R-квадрат легче интерпретировать. Мы будем использовать представленный выше набор данных о ценах на жилье в Бостоне в качестве примера для вычисления и сравнения RMSE и R².

Используя y_pred_train и y_pred_test, вычисленные из приведенной выше модели линейной регрессии, теперь мы можем вызвать метод r2_score из пакета sklearn.metrics для вычисления оценок R².

from sklearn.metrics import r2_score
r2_train = r2_score(y_train, y_pred_train)
r2_test = r2_score(y_test, y_pred_test)

Результаты R² для наборов данных для обучения и тестирования составляют 0,75 и 0,65 соответственно. Поскольку цена на жилье никогда не зависит линейно от 13 факторов в X, поэтому оценка R2 никогда не может быть равна 1. Оценка R² для набора обучающих данных выше, чем для набора тестовых данных, что ожидается. Затем мы вычисляем и сравниваем RMSE для двух наборов данных.

# Predicting RMSE the Test set results
rmse_train = (np.sqrt(mean_squared_error(y_test, y_pred_train)))
rmse_test = (np.sqrt(mean_squared_error(y_test, y_pred_test)))

Значения RMSE для наборов данных для обучения и тестирования составляют 4,70 и 4,83 соответственно. Чтобы проанализировать эти меры ошибок, мы вычисляем RMSE и R² для значений y, предсказанных полиномиальной регрессией. Поскольку основное внимание в этой статье уделяется показателям ошибок, мы не будем обсуждать в этой статье полиномиальную регрессию. Вместо этого мы просто перечисляем и сравниваем вычисленные ошибки моделей линейной и полиномиальной регрессии в следующей таблице.

Ошибка R² дает процент данных, которые можно хорошо объяснить. Из таблицы выше мы видим, что модель полиномиальной регрессии правильно предсказывает 80% данных тестирования, в то время как модель линейной регрессии правильно предсказывает только 65%. RMSE измеряет отклонение от истинных значений. Приведенная выше модель полиномиальной регрессии всегда дает меньшую среднеквадратичную ошибку, чем модель линейной регрессии.