Оценка методом бутстрепа

Оценка методом бутстрепа

Здравствуйте и вновь добро пожаловать на занятия по теме «Машинное обучение с учителем на языке Python: ансамблевые методы».

В предыдущих статьях курса мы рассмотрели дилемму смещения-дисперсии, и я намекнул, что на самом деле можно одновременно уменьшить и смещение, и дисперсию, комбинируя несколько моделей. В этой части мы вначале рассмотрим усреднение моделей. Ключевым инструментом для этого является так называемый бутстреп, также известный как метод повторной выборки.

Чтохорошо в объединении моделей – так это то, что даже при использовании тех жеданных мы можем получить куда лучший результат. На первый взгляд, это довольностранно, ведь если мы создаём модель, исходя из определённого набора примеров,то как результат может отличаться от среднего по разным моделям, обученным наразличных подмножествах одного и того же набора данных? В конце концов, это жеодин и тот же набор! Это уже странно. Но достаточно сказать, что усреднениемоделей действительно работает, даже применительно к тем же данным, что былипри работе с одной моделью.

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

Итак,как же работает оценка методом бутстрепа? Алгоритм следующий. Пусть у нас естьряд точек данных от x1 до xN. Мы берём выборкус возвращением Xbиз этих данных Bраз, каждый размерностью N. Если ранее вы никогда с таким не сталкивались, этоможет показаться непонятным, но я объясню, что такое выборка с возвращениемчуть позже. Для каждой из B подвыборок вычисляется интересующий нас параметр –это может быть среднее значение, дисперсия или любой другой статистическийпоказатель. После того, как цикл будет закончен, у нас окажется B разных оценокданного параметра, которые можно использовать для нахождения среднего значенияи дисперсии параметра. Зачем нам нужны среднее значение и дисперсия? Преждевсего среднее значение показывает наиболее вероятное значение параметра или,другими словами, ожидаемое значение параметра, а дисперсия показывает точностьтакой оценки. Большая дисперсия означает, что среднее значение являетсянеточным, малая дисперсия означает большуюточность.

Наслучай, если вы никогда с не сталкивались с понятием выборки с возвращением.Предположим, у нас есть набор данных {1, 2, 3, 4, 5}. Предположим также, что мывыбираем один из этих элементов и это оказывается 5. Выборка с возвращениемозначает, что если мы выберем элемент ещё раз, мы может опять получить 5. Вдействительности возможно набрать подвыборку из одних пятёрок, поскольку мывозвращаем пример после того, как взяли его из набора данных. Противоположнымслучаем является выборка без возвращения. В этом случае если мы выберем числоэлементов, равное набору данных, мы просто выберем сам набор данных. Поэтомунам важна именно выборка с возвращением.

Каквидите, бустреп – очень простой алгоритм: мы просто вычисляем оценку параметраиз одного и того же набора данных несколько раз. Но почему же он работает?Вначале я покажу вам итоговый результат, а потом мы выведем его. Не забывайте,что нас интересует среднее значение и дисперсия. Среднее значение оценкиметодом бутстрепа равна самому параметру, тут ничего не меняется:

Сдисперсией несколько сложнее. Пусть коэффициент корреляции между двумя оценками и  равен ρ,а дисперсия каждой из них равна σ2.Тогда дисперсия оценки методом бутстрепа будет равна

Сдисперсией несколько сложнее. Пусть коэффициент корреляции между двумя оценками и  равен ρ,а дисперсия каждой из них равна σ2.Тогда дисперсия оценки методом бутстрепа будет равна

Заметьте,что если каждая из оценок методом бутстрепа совершенно не коррелирует сдругими, то дисперсия будет равна исходной дисперсии, делённой на B. Это значит,что для каждой берущейся выборки бутстрепа дисперсия нашей оценки уменьшается,что примечательно.

Однимиз применений оценки методом бутстрепа является то, что мы также можем оценитьдоверительный интервал нашей оценки. Предположим, у нас гауссово приближение инам нужно получить 95%-й доверительный интервал. Это значит, что мы хотим,чтобы левая и правая границы θпокрывала 95% площади под кривой плотности распределения вероятностей. Этопримерно равно среднему значению бутстреп-выборки плюс-минус 1,96, умноженноена стандартное отклонение бутстреп-выборки:

Болееподробно доверительные интервалы разбираются в моём курсе по байесовскомумашинному обучению; если хотите узнать об этом больше, рекомендую обратиться кнему. Кроме того, напишите мне, если хотите более подробного освещения данной темыв именно этом курсе.

Теперь, когда вы знаете основные результаты оценки методом бутстрепа, как показать, что они истинны? Начнём со среднего значения и его определения как ожидаемого значения θB. Среднее значение каждого из  равно, конечно же, самому θ, поэтому

Болееподробно доверительные интервалы разбираются в моём курсе по байесовскомумашинному обучению; если хотите узнать об этом больше, рекомендую обратиться кнему. Кроме того, напишите мне, если хотите более подробного освещения данной темыв именно этом курсе.

Теперь, когда вы знаете основные результаты оценки методом бутстрепа, как показать, что они истинны? Начнём со среднего значения и его определения как ожидаемого значения θB. Среднее значение каждого из  равно, конечно же, самому θ, поэтому

Такимобразом, ожидаемое значение оценки параметра методом бутстрепа  равно самому параметру.

Теперь рассмотрим дисперсию. Начнём с ряда определений. Предположим, ожидаемое значение θ равно μ. Это не обязательно должно быть равно среднему значению исходных данных X, это лишь среднее значение параметра, которой мы хотим оценить. Определим также дисперсию θ через σ2:

Кроме того, обозначим корреляцию между двумя разными θ через ρ:

Кроме того, обозначим корреляцию между двумя разными θ через ρ:

Корреляциямасштабируется стандартным отклонением, а потому всегда находится между -1 и 1.

Суммувсех  обозначим через SB:

Тогдасреднее значение выборки оценок методом бутстрепа будет равно

Тогдасреднее значение выборки оценок методом бутстрепа будет равно

Следующее– просто выписать определение дисперсии  через SB, вынести за скобки B и раскрыть их:

Посколькуμ и B – константы, мы можем вынести их за знак ожидаемогозначения:

Теперь сосредоточимся на нахождении ожидаемого значения SB2. Начнём с определения SB как суммы отдельных θ:

Тутважно понять, что после перемножения мы получим два типа членов. В первом изних будет , умноженное на само себя, другимисловами, в ожидаемом значении индекс будет одинаков для обоих θ. Это будет , и так далее – всего B таких членов. В другомтипе членов будет , умноженное на , где ij. Поскольку всего B2 членов, где i = j, то получится B(B-1) членов, где ij. Все эти члены будутне равны нулю. Подставив наши исходные уравнения для дисперсии и корреляции θ, мы находим ожидаемое значение SB:

Потратьтенемного времени и удостоверьтесь, что можете самостоятельно вывести эторешение:

Тутвозникает один интересный вопрос: какой будет дисперсия бутстрепа, есликоэффициент корреляции максимален? Напомню, что максимально возможным значениемкоэффициента корреляции ρ являетсяединица. Это значит, что две переменные идеально коррелируют друг с другом.Если ρ = 1, то (1 – ρ)/B становится равным нулю и остаётся только ρσ2.Это логично, поскольку если каждая отдельная оценка коррелирует с другой, тодисперсия оценки методом бутстрепа совсем не будет уменьшаться. Если же ρ = 0, то мы получаем лучшее извозможных уменьшение дисперсии, равное 1/B.

Важноотметить, что использование оценки среднего значения методом бутстрепа длякакой-либо линейной модели не даёт существенного улучшения дисперсии модели. Так,в случае линейной модели ρ будетравно

что при большом N даёт коэффициент корреляции, примерно равный 0,5.Вывод этого утверждения довольно сложен, поэтому я не буду включать его вданный курс, пока меня не попросит достаточно много слушателей.

Реальные же преимущества бутстрепа проявляются при использовании крайне нелинейных моделей вроде деревьев решений. На разных наборах данных они будут давать весьма несхожие границы, которые будут слабо коррелировать друг с другом, а следовательно, будет малым и ρ. Переформулировав, можно сказать, что в конечном итоге мы уменьшаем дисперсию путём сочетания нелинейных моделей, которые коррелируют с меньшей вероятностью.

Бутстреп. Демонстрация

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

Итак импортируем библиотеки Numpy, Matplotlib, а также из Scipy импортируем функцию norm.

import numpy as np

import matplotlib.pyplot as plt

fromscipy.stats import norm

Определимначальные значения:

B = 200

N = 20

X = np.random.randn(N)

print “sample mean of X:”, X.mean()

Начнём,не забывая сохранять отдельные оценки:

individual_estimates = np.empty(B)

for b in xrange(B):

  sample =np.random.choice(X, size=N)

 individual_estimates[b] = sample.mean()

bmean = individual_estimates.mean()

bstd = individual_estimates.std()

lower = bmean + norm.ppf(0.025)*bstd

upper = bmean + norm.ppf(0.975)*bstd

Посчитаемдоверительные интервалы обычным методом:

lower2 = X.mean() + norm.ppf(0.025)*X.std()/np.sqrt(N)

upper2 = X.mean() + norm.ppf(0.975)*X.std()/np.sqrt(N)

Ивыведем всё на экран:

print “bootstrap mean of X:”, bmean

plt.hist(individual_estimates, bins=20)

plt.axvline(x=lower,linestyle=’–‘, color=’g’, label=”lowerbound for 95%% CI (bootstrap)”)

plt.axvline(x=upper,linestyle=’–‘, color=’g’, label=”upperbound for 95%% CI (bootstrap)”)

plt.axvline(x=lower2,linestyle=’–‘, color=’r’, label=”lowerbound for 95%% CI”)

plt.axvline(x=upper2,linestyle=’–‘, color=’r’, label=”upperbound for 95%% CI”)

plt.legend()

plt.show()

Запустими посмотрим, что получится.

Итак, мы видим, что доверительные интервалы практически совпадают, чего и следовало ожидать.

что при большом N даёт коэффициент корреляции, примерно равный 0,5.Вывод этого утверждения довольно сложен, поэтому я не буду включать его вданный курс, пока меня не попросит достаточно много слушателей.

Реальные же преимущества бутстрепа проявляются при использовании крайне нелинейных моделей вроде деревьев решений. На разных наборах данных они будут давать весьма несхожие границы, которые будут слабо коррелировать друг с другом, а следовательно, будет малым и ρ. Переформулировав, можно сказать, что в конечном итоге мы уменьшаем дисперсию путём сочетания нелинейных моделей, которые коррелируют с меньшей вероятностью.

Бутстреп. Демонстрация

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

Итак импортируем библиотеки Numpy, Matplotlib, а также из Scipy импортируем функцию norm.

import numpy as np

import matplotlib.pyplot as plt

fromscipy.stats import norm

Определимначальные значения:

B = 200

N = 20

X = np.random.randn(N)

print “sample mean of X:”, X.mean()

Начнём,не забывая сохранять отдельные оценки:

individual_estimates = np.empty(B)

for b in xrange(B):

  sample =np.random.choice(X, size=N)

 individual_estimates[b] = sample.mean()

bmean = individual_estimates.mean()

bstd = individual_estimates.std()

lower = bmean + norm.ppf(0.025)*bstd

upper = bmean + norm.ppf(0.975)*bstd

Посчитаемдоверительные интервалы обычным методом:

lower2 = X.mean() + norm.ppf(0.025)*X.std()/np.sqrt(N)

upper2 = X.mean() + norm.ppf(0.975)*X.std()/np.sqrt(N)

Ивыведем всё на экран:

print “bootstrap mean of X:”, bmean

plt.hist(individual_estimates, bins=20)

plt.axvline(x=lower,linestyle=’–‘, color=’g’, label=”lowerbound for 95%% CI (bootstrap)”)

plt.axvline(x=upper,linestyle=’–‘, color=’g’, label=”upperbound for 95%% CI (bootstrap)”)

plt.axvline(x=lower2,linestyle=’–‘, color=’r’, label=”lowerbound for 95%% CI”)

plt.axvline(x=upper2,linestyle=’–‘, color=’r’, label=”upperbound for 95%% CI”)

plt.legend()

plt.show()

Запустими посмотрим, что получится.

Итак, мы видим, что доверительные интервалы практически совпадают, чего и следовало ожидать.

Понравилась статья? Поделить с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: