Ансамблевые методы. Отрывок из книги

    image

    Привет, Хаброжители, мы сдали в типографию новую книгу «Машинное обучение: алгоритмы для бизнеса». Здесь приводим отрывок про ансамблевые методы, его цель — объяснить, что делает их эффективными, а также как избежать распространенных ошибок, приводящих к неправильному использованию их в финансах.

    6.2. Три источника ошибок


    Модели МО обычно страдают от трех ошибок.

    1. Смещение: данная ошибка вызвана нереалистичными допущениями. Когда смещение высоко, это означает, что алгоритм МО не смог распознать важные связи между признаками и исходами. В этой ситуации говорят, что алгоритм «недоподогнан».

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

    3. Шум: Данная ошибка вызвана дисперсией наблюдаемых значений, как, например, непредсказуемые изменения или ошибки замеров. Это неустранимая ошибка, которая не может быть объяснена ни одной моделью.

    image

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

    6.3. Агрегация бутстрапов


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

    Если для вычисления внепакетной точности вы используете класс BaggingClassifier библиотеки sklearn, то вы должны знать об этом дефекте: https://github.com/scikit-learn/scikitlearn/issues/8933. Один из обходных путей состоит в переименовании меток в целочисленном последовательном порядке.

    6.3.1. Сокращение дисперсии


    Главное преимущество бэггирования заключается в том, что оно уменьшает дисперсию прогнозов, тем самым помогая решать проблему переподгонки. Дисперсия в бэггированном предсказании (φi[c]) является функцией числа бэгированных оценщиков (N), средней дисперсии предсказания, выполняемого одним оценщиком (σ̄ ), и средней корреляции между их прогнозами (ρ̄ ):

    image

    последовательного бутстрапирования (глава 4) заключается в том, чтобы производить отборы образцов как можно более независимыми, тем самым уменьшая ρ̄, что должно снизить дисперсию бэггированных классификаторов. На рис. 6.1 построена диаграмма среднеквадратического отклонения бэггированного предсказания как функции N ∈ [5, 30], ρ̄ ∈ [0, 1] и σ̄ = 1.

    image

    6.3.2. Улучшенная точность


    Рассмотрим бэггированный классификатор, который делает предсказание на k классах мажоритарным голосованием среди N независимых классификаторов. Мы можем обозначить предсказания как {0,1}, где 1 означает правильное предсказание. Точность классификатора — это вероятность p промаркировать предсказание как 1. В среднем мы получим Np предсказаний, промаркированных как 1, с дисперсией Np(1 – p). Мажоритарное голосование делает правильное предсказание, когда наблюдается самый прогнозируемый класс. Например, для N = 10 и k = 3 бэггированный классификатор сделал правильное предсказание, когда наблюдался

    image

    image

    Листинг 6.1. Правильность бэггированного классификатора

    from scipy.misc import comb
    N,p,k=100,1./3,3.
    p_=0
    for i in xrange(0,int(N/k)+1):
         p_+=comb(N,i)*p**i*(1-p)**(N-i)
    print p,1-p_

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

    image

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

    6.3.3. Избыточность наблюдений


    В главе 4 мы исследовали одну из причин, по которой финансовые наблюдения нельзя считать одинаково распределенными и взаимно независимыми. Избыточные наблюдения оказывают два пагубных воздействия на бэггирование. Во-первых, образцы, изымаемые с возвратом, с большей вероятностью будут практически идентичными, даже если они не имеют общих наблюдений. Это делает image и бэггирование не сократит дисперсию, независимо от N. Например, если каждое наблюдение в t промаркировано в соответствии с финансовым возвратом между t и t + 100, то мы должны отобрать 1 % наблюдений в расчете на бэггированного оценщика, но не более. В главе 4, раздел 4.5, рекомендуются три альтернативных решения, одно из которых состояло в установке max_samples=out['tW'].mean() в реализации класса бэггированного классификатора в библиотеке sklearn. Еще одним (более качественным) решением было применение метода последовательного бутстраповского отбора.

    Второе пагубное влияние избыточности наблюдений заключается в том, что будет взвинчена внепакетная точность. Это происходит из-за того, что случайный отбор с возвратом образцов помещает в тренировочное подмножество образцы, которые очень похожи на те, что вне пакета. В таком случае правильная стратифицированная k-блочная перекрестная проверка без перетасовки перед разбиением покажет гораздо меньшую точность на тестовом подмножестве, чем та, которая была оценена вне пакета. По этой причине при использовании этого класса библиотеки sklearn рекомендуется установить stratifiedKFold(n_splits=k, shuffle=False), перекрестно проверить бэггированный классификатор и проигнорировать результаты внепакетной точности. Низкое число k предпочтительнее высокого, так как чрезмерное разбиение снова поместит в тестовое подмножество образцы, слишком похожие на те, которые используются в тренировочном подмножестве.

    6.4. Случайный лес


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

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

    Как и бэггирование, случайный лес уменьшает дисперсию прогнозов без переподгонки (напомним, что до тех пор, пока ). Второе преимущество состоит в том, что случайный лес оценивает важность признаков, которую мы обсудим подробно в главе 8. Третье преимущество заключается в том, что случайный лес предоставляет оценки внепакетной точности, однако в финансовых приложениях они, скорее всего, будут взвинчены (как описано в разделе 6.3.3). Но как и бэггирование, случайный лес не обязательно будет демонстрировать более низкое смещение, чем индивидуальные деревья решений.

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

    1. Установить для параметра max_features меньшее значение, чтобы добиться расхождения между деревьями.

    2. Ранняя остановка: установить параметр регуляризации min_weight_fraction_leaf равным достаточно большому значению (например, 5 %), для того чтобы внепакетная точность сходилась к вневыборочной (k-блочной) правильности.

    3. Использовать оценщик BaggingClassifier на базовом оценщике DecisionTreeClassifier, где max_samples установлен равным средней уникальности (avgU) между выборками.

    • clf=DecisionTreeClassifier(criterion='entropy', max_features='auto', class_weight='balanced')
    • bc=BaggingClassifier(base_estimator=clf, n_estimators=1000, max_samples=avgU, max_features=1.)

    4. Использовать оценщик BaggingClassifier на базовом оценщике RandomForestClassifier, где max_samples установлен равным средней уникальности (avgU) между выборками.

    • clf=RandomForestClassifier(n_estimators=1, criterion='entropy', bootstrap=False, class_weight='balanced_subsample')
    • bc=BaggingClassifier(base_estimator=clf, n_estimators=1000, max_samples=avgU, max_features=1.)

    5.Модифицировать класс случайного леса для замены стандартного бутстрапирования на последовательное бутстрапирование.

    Резюмируя, листинг 6.2 демонстрирует три альтернативных способа настройки случайного леса, используя разные классы.

    Листинг 6.2. Три способа настройки случайного леса

    clf0=RandomForestClassifier(n_estimators=1000, class_weight='balanced_
                                            subsample', criterion='entropy')
    clf1=DecisionTreeClassifier(criterion='entropy', max_features='auto',
                                            class_weight='balanced')
    clf1=BaggingClassifier(base_estimator=clf1, n_estimators=1000,
                                            max_samples=avgU)
    clf2=RandomForestClassifier(n_estimators=1, criterion='entropy',
                                            bootstrap=False, class_weight='balanced_subsample')
    clf2=BaggingClassifier(base_estimator=clf2, n_estimators=1000,
                                            max_samples=avgU, max_features=1.)

    При подгонке деревьев решений поворот признакового пространства в направлении, совпадающем с осями, как правило, сокращает число необходимых дереву уровней. По этой причине я предлагаю вам выполнять подгонку случайного дерева на PCA признаков, так как это может ускорить вычисления и немного сократить переподгонку (подробнее об этом в главе 8). Кроме того, как описано в главе 4, раздел 4.8, аргумент class_weight='balanced_subsample' поможет не допустить, чтобы деревья неправильно классифицировали миноритарные классы.

    6.5. Бустирование


    Kearns and Valiant [1989] были одними из первых, кто задались вопросом, можно ли объединить слабых оценщиков, для того чтобы достичь реализации высокоточного оценщика. Вскоре после этого Schapire [1990] продемонстрировал утвердительный ответ на этот вопрос, используя процедуру, которую мы сегодня называем бустированием (boosting, форсирование, усиление). В общих чертах она работает следующим образом: во-первых, сгенерировать одно тренировочное подмножество путем случайного отбора с возвратом в соответствии с некими весами выборки (инициализируемым равномерными весами). Во-вторых, выполнить подгонку одного оценщика с помощью этого тренировочного подмножества. В-третьих, если одиночный оценщик достигает точности, превышающей порог приемлемости (например, в бинарном классификаторе она равна 50 %, чтобы классификатор работал лучше, чем случайное гадание), то оценщик остается, в противном случае он отбрасывается. В-четвертых, придать больший вес неправильно классифицированным наблюдениям и меньший вес правильно классифицированным наблюдениям. В-пятых, повторять предыдущие шаги до тех пор, пока не будут получены N оценщиков. В-шестых, ансамблевый прогноз — это средневзвешенное значение индивидуальных прогнозов из N моделей, где веса определяются точностью индивидуальных оценщиков. Существует ряд бустированных алгоритмов, из которых адаптивное бустирование AdaBoost является одним из самых популярных (Geron [2017]). Рисунок 6.3 резюмирует поток принятия решений в стандартной реализации алгоритма AdaBoost.

    image

    6.6. Бэггинг vs бустинг в финансах


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

    • Подгонка индивидуальных классификаторов выполняется последовательно.
    • Слаборезультативные классификаторы отклоняются.
    • На каждой итерации наблюдения взвешиваются по-разному.

    Ансамблевый прогноз представляет собой средневзвешенное значение индивидуальных учеников.

    Главное преимущество бустирования состоит в том, что оно сокращает как дисперсию, так и смещение в прогнозах. Тем не менее исправление смещения происходит за счет большего риска переподгонки. Можно утверждать, что в финансовых приложениях бэггирование, как правило, предпочтительнее бустирования. Бэггирование решает проблему переподгонки, в то время как бустирование решает проблему недоподгонки. Переподгонка часто является более серьезной проблемой, чем недоподгонка, так как подогнать алгоритм МО слишком плотно к финансовым данным совсем не трудно из-за низкого соотношения сигнал/шум. Более того, бэггирование поддается параллелизации, тогда как бустирование обычно требует последовательного выполнения.

    6.7. Бэггинг для масштабируемости


    Как известно, некоторые популярные алгоритмы МО масштабируются не очень хорошо в зависимости от размера выборки. Метод опорных векторов (support vector machines, SVM) является ярким примером. Если вы попытаетесь выполнить подгонку оценщика SVM на миллионе наблюдений, то может потребоваться продолжительное время, пока алгоритм не сойдется. И даже после того, как он сошелся, нет никакой гарантии, что решение является глобальным оптимумом или что он не будет переподогнан.

    Один из практических подходов заключается в построении бэггированного алгоритма, где базовый оценщик принадлежит классу, который плохо масштабируется вместе с размером выборки, например SVM. При определении этого базового оценщика мы введем жесткое условие ранней остановки. Например, в реализации опорно-векторных машин (SVM) в библиотеке sklearn вы могли бы задать низкое значение для параметра max_iter, например 1Е5 итераций. По умолчанию принято значение max_iter=-1, которое сообщает оценщику продолжать выполнение итераций до тех пор, пока ошибки не упадут ниже уровня допуска. С другой стороны, вы можете повысить уровень допуска с помощью параметра tol, который по умолчанию имеет значение tol=iE-3. Любой из этих двух параметров приведет к ранней остановке. Вы можете останавливать другие алгоритмы рано с помощью эквивалентных параметров, таких как число уровней в случайном лесе (max_depth) или минимальная взвешенная доля итоговой суммы весов (всех входных выборок), обязанных находиться на листовом узле (min_weight_fraction_leaf).

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

    » Более подробно с книгой можно ознакомиться на сайте издательства
    » Оглавление
    » Отрывок

    Для Хаброжителей скидка 25% на предзаказ книги по купону — Машинное обучение
    Издательский дом «Питер»
    199,00
    Компания
    Поделиться публикацией

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое