Реализация квадратичной функции риска для классификаторов sklearn, регрессоров и keras/tensorflow

Привет, что случилось? дела идут отлично? надеюсь на это.

как в старые добрые времена, сегодня мы обсудим кое-что новое!.

Что нового?

— — — — — — Компромисс дисперсии смещения, может быть, вы думаете, что это старая вещь, но применяли ли вы ее когда-нибудь в своем реальном случае использования мл?

90% нет. мы просто прочитали теорию вот и все. Это не сработает! Давайте изучим эту классную функцию, которая выделит нас впереди других :)

Небольшой обзор: компромисс между погрешностью и дисперсией

Вики: В статистике и машинном обучении компромисс между смещением и дисперсией — это свойство модели, при котором дисперсия параметра оценивается по выборкам. можно уменьшить, увеличив смещение в оценочных параметрах. Дилемма отклонения-отклонения или проблема отклонения-отклонения — это конфликт в попытках одновременно минимизировать эти два источника ошибки, которые не позволяют алгоритмам обучения с учителем обобщаться за пределы их возможностей. тренировочный набор: [1][2]

  • Ошибка предвзятость — это ошибка из-за ошибочных предположений в алгоритме обучения. Высокое смещение может привести к тому, что алгоритм упустит соответствующие отношения между функциями и целевыми выходными данными (недообучение).
  • Дисперсия — это ошибка чувствительности к небольшим колебаниям обучающей выборки. Высокая дисперсия может быть результатом алгоритма, моделирующего случайный шум в обучающих данных (переобучение).

Чтобы использовать более формальные термины для смещения и дисперсии, предположим, что у нас есть точечная оценка θ ^ (тета-шляпа) некоторого параметра или функции θ. Затем смещение обычно определяется как разница между ожидаемым значением оценщика и параметром, который мы хотим оценить:

Смещение = E[θ^]-θ. Смещение = E[θ^]-θ.

Если смещение больше нуля, мы также говорим, что оценщик имеет положительное смещение, если смещение меньше нуля, оценщик имеет отрицательное смещение, а если смещение равно нулю, то оценщик является несмещенным. Точно так же мы определяем дисперсию как разницу между математическим ожиданием, возведенным в квадрат, и квадратным математическим ожиданием, полученным оценщиком:

Var(θ^)=E[θ²]−(E[θ^])2.Var(θ^)=E[θ²]−(E[θ^])2.

Обратите внимание, что в контексте этой лекции будет удобнее записать дисперсию в ее альтернативной форме:

Var(θ^)=E[(E[θ^]−θ^)2].

Слышали о MSE? конечно у вас было! что за глупый вопрос

MSE — это функция риска, соответствующая ожидаемому значению квадрата потерь из-за ошибки. Тот факт, что MSE почти всегда строго положительный (а не нулевой), объясняется случайностью или тем, что оценщик не учитывает информацию, которая могла бы дать более точную оценку.

MSE может относиться к эмпирическому риску (средняя потеря в наблюдаемом наборе данных) как к оценке истинной MSE (истинный риск: средняя потеря на фактическом Распределение населения)

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

Для несмещенной оценки MSE – это дисперсия оценки. Как и дисперсия, MSE имеет те же единицы измерения, что и квадрат оцениваемой величины.

более подробная информация: https://en.wikipedia.org/wiki/Mean_squared_error

Мы пропустим теорию, есть тонны информации и статей по этому поводу. Нам больше интересно посмотреть, как применять наши модели машинного обучения.

Простые слова: квадратичный риск = дисперсия + погрешность²

Давайте начнем!

Разложение смещения-дисперсии потерь 0–1

Обратите внимание, что разложение потерь 0–1 на компоненты смещения и дисперсии не так просто, как для квадратичных потерь ошибок. Процитируем Педро Домингоса, известного исследователя машинного обучения и профессора Вашингтонского университета:

«Несколько авторов предложили разложение смещения-дисперсии, связанное с потерей ноль-единица (Kong & Dietterich, 1995; Breiman, 1996b; Kohavi & Wolpert, 1996; Tibshirani, 1996; Friedman, 1997). Однако каждое из этих разложений имеет существенные недостатки».

Напомним, что потеря 0–1, LL, равна 0, если метка класса предсказана правильно, и единице в противном случае.

Пример 1. Декомпозиция дисперсии смещения классификатора дерева решений

from mlxtend.evaluate import bias_variance_decomp
from sklearn.tree import DecisionTreeClassifier
from mlxtend.data import iris_data
from sklearn.model_selection import train_test_split

X, y = iris_data()
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    test_size=0.3,
                                                    random_state=123,
                                                    shuffle=True,
                                                    stratify=y)
tree = DecisionTreeClassifier(random_state=123)
avg_expected_loss, avg_bias, avg_var = bias_variance_decomp(
        tree, X_train, y_train, X_test, y_test, 
        loss='0-1_loss',
        random_seed=123)
print('Average expected loss: %.3f' % avg_expected_loss)
print('Average bias: %.3f' % avg_bias)
print('Average variance: %.3f' % avg_var)

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

from sklearn.ensemble import BaggingClassifier
tree = DecisionTreeClassifier(random_state=123)
bag = BaggingClassifier(base_estimator=tree,
                        n_estimators=100,
                        random_state=123)
avg_expected_loss, avg_bias, avg_var = bias_variance_decomp(
        bag, X_train, y_train, X_test, y_test, 
        loss='0-1_loss',
        random_seed=123)
print('Average expected loss: %.3f' % avg_expected_loss)
print('Average bias: %.3f' % avg_bias)
print('Average variance: %.3f' % avg_var)

Пример 2. Декомпозиция дисперсии смещения регрессора дерева решений

from mlxtend.evaluate import bias_variance_decomp
from sklearn.tree import DecisionTreeRegressor
from mlxtend.data import boston_housing_data
from sklearn.model_selection import train_test_split

X, y = boston_housing_data()
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    test_size=0.3,
                                                    random_state=123,
                                                    shuffle=True)
tree = DecisionTreeRegressor(random_state=123)
avg_expected_loss, avg_bias, avg_var = bias_variance_decomp(
        tree, X_train, y_train, X_test, y_test, 
        loss='mse',
        random_seed=123)
print('Average expected loss: %.3f' % avg_expected_loss)
print('Average bias: %.3f' % avg_bias)
print('Average variance: %.3f' % avg_var)

Для сравнения ниже показано разложение по смещению и дисперсии регрессора бэггинга, которое интуитивно должно иметь меньшую дисперсию, чем одно дерево решений:

from sklearn.ensemble import BaggingRegressor
tree = DecisionTreeRegressor(random_state=123)
bag = BaggingRegressor(base_estimator=tree,
                       n_estimators=100,
                       random_state=123)
avg_expected_loss, avg_bias, avg_var = bias_variance_decomp(
        bag, X_train, y_train, X_test, y_test, 
        loss='mse',
        random_seed=123)
print('Average expected loss: %.3f' % avg_expected_loss)
print('Average bias: %.3f' % avg_bias)
print('Average variance: %.3f' % avg_var)

Пример 3 — Поддержка TensorFlow/Keras

Начиная с версии mlxtend v0.18.0, bias_variance_decomp теперь поддерживает модели Keras. Обратите внимание, что исходная модель сбрасывается в каждом раунде (перед ее повторной подгонкой к образцам начальной загрузки).

from mlxtend.evaluate import bias_variance_decomp
from mlxtend.data import boston_housing_data
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import tensorflow as tf
import numpy as np

np.random.seed(1)
tf.random.set_seed(1)

X, y = boston_housing_data()
X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    test_size=0.3,
                                                    random_state=123,
                                                    shuffle=True)

model = tf.keras.Sequential([
    tf.keras.layers.Dense(32, activation=tf.nn.relu),
    tf.keras.layers.Dense(1)
  ])
optimizer = tf.keras.optimizers.Adam()
model.compile(loss='mean_squared_error', optimizer=optimizer)
model.fit(X_train, y_train, epochs=100, verbose=0)
mean_squared_error(model.predict(X_test), y_test)
32.69300595184836

Обратите внимание, что настоятельно рекомендуется использовать то же количество тренировочных эпох, которое вы использовали бы в исходном тренировочном наборе, чтобы обеспечить сходимость:

np.random.seed(1)
tf.random.set_seed(1)

avg_expected_loss, avg_bias, avg_var = bias_variance_decomp(
        model, X_train, y_train, X_test, y_test, 
        loss='mse',
        num_rounds=100,
        random_seed=123,
        epochs=200, # fit_param
        verbose=0) # fit_param

print('Average expected loss: %.3f' % avg_expected_loss)
print('Average bias: %.3f' % avg_bias)
print('Average variance: %.3f' % avg_var)
Repo:http://rasbt.github.io/mlxtend/user_guide/evaluate/bias_variance_decomp/

Ну вот и все!

Tспасибо команде mlxtend и мне тоже? за то, что рассказал вам об этом?

Я надеюсь, что вы найдете эту статью полезной для ваших случаев машинного обучения и статистики. Точно так же я постараюсь найти новые пути под девизом «любопытство ведет к инновациям» :)

Ознакомьтесь с реализацией kaggle: https://www.kaggle.com/code/rupakroy/bias-variance-decomposition

Еще раз спасибо за уделенное время. Если вам понравилась эта короткая статья, в моем среднем репозитории есть множество тем по расширенной аналитике, науке о данных и машинному обучению. https://medium.com/@bobrupakroy

Некоторыми из моих альтернативных интернет-присутствий являются Facebook, Instagram, Udemy, Blogger, Issuu, Slideshare, Scribd и другие.

Также доступно на Quora @ https://www.quora.com/profile/Rupak-Bob-Roy

Дайте мне знать, если вам нужно что-нибудь. Говорите Скоро.