Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Backtesting.py — Полный курс по python
Backtesting.py — Полный курс по python
Во время урока инструктор обсуждает положительные и отрицательные стороны использования backtesting.py в качестве библиотеки для тестирования торговых стратегий. Библиотека разработана, чтобы сосредоточиться исключительно на основах тестирования на истории, опуская такие функции, как библиотека индикаторов или интеграция с брокерами или другими платформами. Эта простота позволяет библиотеке быть легкой и простой в использовании. Предоставленная документация ясна и проста для понимания, что позволяет пользователям быстро понять концепции и функциональные возможности библиотеки.
Одним из существенных преимуществ backtesting.py является его скорость, особенно при тестировании отдельных стратегий. Библиотека оптимизирована для повышения производительности, что позволяет пользователям эффективно проводить бэктесты и своевременно получать результаты. Эта скорость удобна при переборе нескольких стратегий или комбинаций параметров для поиска оптимальных настроек.
Однако при использовании backtesting.py следует учитывать несколько ограничений. Во-первых, библиотека не поддерживает торговлю несколькими активами. Он в первую очередь предназначен для тестирования стратегий на одном активе или ценной бумаге. Кроме того, backtesting.py не обеспечивает поддержку дробных акций, что может быть недостатком для пользователей, заинтересованных в торговле с меньшими размерами позиций.
Несмотря на эти ограничения, backtesting.py остается отличным выбором для тех, кто хочет сосредоточиться исключительно на тестировании своих торговых стратегий. Его простота и легкость позволяют легко понять и интегрировать его в существующие рабочие процессы.
В этом руководстве инструктор демонстрирует использование backtesting.py, выполняя шаги по созданию виртуальной среды и установке необходимых зависимостей. Импортируя необходимые компоненты, такие как тестовые данные о ценах на акции Google с 2006 по 2013 год, инструктор подготавливает почву для проведения ретроспективного тестирования.
Затем инструктор переходит к созданию класса стратегии, в котором определены две основные функции, __init__ и next. В функции __init__ инструктор рассчитывает значение индикатора Индекса относительной силы (RSI). Следующая функция используется для оценки критериев покупки на основе значений RSI.
Затем инструктор объясняет, как реализовать простую стратегию кроссовера с использованием предварительно вычисленных значений, передаваемых в следующую функцию. Библиотека кроссовера из backtesting.py импортируется для сравнения RSI с верхними и нижними граничными значениями. Когда RSI превышает определенное значение, генерируется сигнал на продажу, а когда он падает ниже другого значения, срабатывает сигнал на покупку. Преподаватель определяет верхние и нижние граничные значения и назначает их классу для доступа в следующей функции.
Чтобы протестировать стратегию, инструктор настраивает бэктест, предоставляя данные, выбирая начальную сумму наличных и распечатывая статистику. Преподаватель обращает внимание на простоту отображения результатов тестирования на истории с помощью backtesting.py и подчеркивает, как красные и зеленые прямоугольники на экране обозначают месяцы.
Преподаватель переходит к обзору информационной панели backtesting.py, которая предлагает всестороннее представление торговой информации, прибылей и убытков, стоимости портфеля и индикаторов, а также других полезных показателей. Инструктор демонстрирует, как можно оптимизировать стратегию с помощью backtesting.py, определяя различные диапазоны для верхней и нижней границ окна RSI. Оптимизатор генерирует статистику, такую как коэффициент Шарпа, и моделирует различные комбинации, чтобы найти наиболее ценную функцию. Преподаватель подчеркивает, что пользователи могут определять собственные показатели и применять ограничения для улучшения результатов оптимизации.
Кроме того, инструктор объясняет, как применять ограничения для выбора подмножества значений с помощью лямбда-функций, которые возвращают значение true или false в зависимости от определенных параметров. Видео демонстрирует, как оптимизировать стратегию с помощью функции оптимизатора, чтобы максимизировать коэффициент Шарпа, и как определить функцию оптимизации как обычную функцию Python. Инструктор также обсуждает создание метрики для максимизации прибыли при минимизации времени, проведенного на рынке.
В руководстве инструктор добавляет в функцию оптимизации фильтр минимального количества сделок, чтобы предотвратить переоснащение. Включив этот фильтр, функция тестирования на исторических данных вынуждена выйти за рамки одного периода колебаний, что увеличивает шансы обнаружения более прибыльных комбинаций параметров. Кроме того, инструктор показывает, как создавать HTML-файлы с результатами ретроспективного тестирования, что может быть полезно при выполнении нескольких ретроспективных тестов и необходимости отслеживать различные комбинации параметров. Преподаватель также дает рекомендации по именованию и организации сгенерированных файлов, чтобы не загромождать рабочий каталог.
В учебнике также рассматривается использование функции оптимизации в backtesting.py для эффективной оптимизации стратегии без необходимости тестирования всех возможных комбинаций. Установив максимальное количество попыток, программа выполняет рандомизированный поиск комбинаций по сетке, сокращая время, затрачиваемое на тестирование на исторических данных, и риск переобучения. Преподаватель демонстрирует, как создавать тепловые карты для визуализации влияния различных значений на стратегию путем изменения верхней и нижней границ. Оператор pandas group by используется для группировки столбцов по верхней и нижней границам, а среднее значение вычисляется для получения средних значений для каждой комбинации.
Докладчик объясняет, как функция в backtesting.py находит все уникальные комбинации указанных столбцов, например верхнюю и нижнюю границы. Эти комбинации затем группируются вместе, и применяется функция агрегирования, такая как среднее значение. В результате получается тепловая карта, которую можно построить с помощью модуля Seaborn. Преподаватель демонстрирует оптимизацию коэффициента Шарпа и изменение цветовой карты для тепловой карты. Кроме того, инструктор показывает, как использовать встроенную функцию plot_heat_maps для построения нескольких тепловых карт для более чем двух параметров.
Преподаватель демонстрирует, как использовать тепловые карты для оптимизации параметров и реализации стратегий с несколькими таймфреймами с помощью функции применения повторной выборки из библиотеки backtesting.py. Тепловые карты дают визуальное представление о том, как изменения различных параметров влияют на торговые стратегии. Комбинируя различные таймфреймы с помощью функции повторной выборки, трейдеры могут создавать более сложные стратегии, учитывающие различные рыночные условия.
Инструктор объясняет, как можно использовать разные таймфреймы в торговой стратегии с помощью библиотеки backtesting.py. Посредством понижения дискретизации и применения функций библиотека может выполнять прямое заполнение и переиндексацию обратно к меньшему таймфрейму, облегчая анализ различных таймфреймов. В приведенном примере стратегия включает использование дневного и еженедельного RSI для запуска сделок только тогда, когда происходит пересечение и RSI выше или ниже определенного порога. Инструктор упоминает, что стратегию можно оптимизировать, настроив параметры, и что библиотека поддерживает эксперименты с различными типами ордеров, такими как стоп-лосс и тейк-профит.
Докладчик демонстрирует, как открыть короткую позицию, когда RSI опускается ниже нижней границы, и закрыть любые короткие позиции при покупке. Точно так же ведущий демонстрирует, что, когда RSI поднимается выше верхней границы, он продает любые длинные позиции и открывает короткую позицию. Тем не менее, докладчик отмечает, что нет никакого кода, который бы не позволял программе занимать несколько позиций, что приводит к потере 80 процентов вложенного капитала. Докладчик объясняет, как решить эту проблему, добавив пункт, чтобы инициировать новую сделку только в том случае, если нет текущей позиции или если в портфеле есть длинная/короткая позиция.
Инструктор демонстрирует, как использовать ордера стоп-лосс и тейк-профит в backtesting.py. Установив стоп-лосс на определенный процент ниже текущей цены, стратегия может ограничить убытки по каждой сделке, а установка уровня тейк-профита позволяет закрывать сделки при определенном уровне прибыли. Инструктор также показывает, как настроить параметр размера в процессе покупки, чтобы выделить определенный процент доступных средств для каждой сделки. Хотя в этом примере есть некоторые проблемы с тактикой продаж, видео дает полезную информацию об использовании backtesting.py для создания и тестирования торговых стратегий.
В видео обсуждаются различные способы реализации определения размера позиции при тестировании на исторических данных. Один из подходов состоит в том, чтобы покупать и продавать по одной акции за раз, а не в процентах от имеющихся денежных средств. Этот подход может быть полезен для стратегий, включающих вхождение в позицию или усреднение стоимости в долларах. Видео демонстрирует изменение стратегии кроссовера на стратегию, основанную на индикаторе RSI. В этой модифицированной стратегии сделки выполняются, когда последнее значение RSI меньше нижней границы. В видео также подчеркивается, что сделки могут быть извлечены из бэктеста в виде кадра данных pandas, включая даты входа и выхода и другие важные показатели. Эти торговые данные можно экспортировать в другие инструменты визуализации, такие как Excel или другие скрипты Python, для дальнейшего анализа и изучения.
Создатель backtesting.py представляет функцию «бары с тех пор», которая является мощным инструментом для оптимизации стратегий и избавления от необходимости писать многочисленные операторы if для сравнения данных за предыдущие дни. Функция позволяет пользователям определять количество баров с момента последнего выполнения определенного торгового условия. Эта функция обеспечивает удобный способ оптимизации стратегий на основе конкретных временных условий. Кроме того, создатель подчеркивает открытый исходный код backtesting.py, поощряя пользователей настраивать библиотеку в соответствии со своими конкретными потребностями и предпочтениями.
В заключение, учебник по backtesting.py завершается тем, что инструктор призывает зрителей обращаться с любыми вопросами или проблемами. Преподаватель желает им удачи в тестировании на исторических данных и напоминает им, что нужно повеселиться, изучая возможности тестирования и оптимизации торговых стратегий с помощью backtesting.py. Преподаватель подчеркивает важность обращения к документации по бэктестингу для получения более подробной информации и обнаружения дополнительных функций, доступных для создания и оптимизации инфраструктуры бэктестинга.
В целом, руководство предоставляет исчерпывающий обзор backtesting.py, его преимуществ, ограничений и различных функций. Он помогает пользователям в процессе создания тестовой среды, реализации стратегий, оптимизации параметров, использования тепловых карт для анализа, включения нескольких временных рамок и применения методов определения размера позиции. Следуя этому руководству, зрители получают ценную информацию и практические знания, которые помогут им эффективно тестировать и совершенствовать свои торговые стратегии с помощью бэктестинга.py.
Легко протестируйте свою стратегию средней стоимости в долларах на Python
Легко протестируйте свою стратегию средней стоимости в долларах на Python
В течение следующих 20 минут или около того мы будем реализовывать стратегию усреднения долларовых затрат в Python. Эта стратегия позволит вам оценить эффективность усреднения долларовой стоимости для конкретного актива или индекса за определенный период времени. Мы будем использовать инструмент под названием backtesting.py для реализации этой стратегии. Backtesting.py — это удобный фреймворк на Python, который менее пугающий, чем другие библиотеки, такие как Vectorbt или Backtrader. Если вы новичок в Python, это будет отличным вариантом для вас.
Стратегия усреднения долларовой стоимости, которую мы будем применять, относительно проста, но я также покажу вам, как ее расширить. Наша стратегия включает в себя покупку определенного актива на фиксированную сумму в долларах каждый понедельник или вторник и повторение этого процесса до тех пор, пока у нас не закончатся данные. Для начала откройте терминал и настройте новую виртуальную среду, чтобы обеспечить чистую среду для нашей реализации. После того, как вы настроили виртуальную среду, установите пакет обратного тестирования с помощью pip:
проверка установки pip
После установки пакета мы можем продолжить работу с нашим файлом Python. Нам нужно будет импортировать некоторые необходимые модули и данные. Из бэктестинга импортируйте модули бэктестинга и стратегии. Кроме того, импортируйте некоторые фиктивные данные из backtesting.test, в частности данные Google. Нам также понадобится модуль pandas для манипулирования данными.
Теперь давайте определим наш класс стратегии. Создайте класс с именем DCA (средняя стоимость в долларах), который наследуется от класса стратегии. Внутри этого класса мы установим переменную класса с именем amount_to_invest, которая представляет собой фиксированную сумму в долларах, которую мы хотим инвестировать. Изначально установите значение 10.
Далее нам нужно определить две функции внутри этого класса: __init__ и next. Функция __init__ вызывается во время инициализации и используется для предварительного вычисления любых значений, которые могут нам понадобиться позже. В нашем случае мы создадим индикатор, который выдает нам день недели. Для этого мы будем использовать метод self.indicator, предоставленный backtesting.py. Мы можем определить наш индикатор как self.day_of_week = self.indicator(lambda x: x, self.data.close.s.dt.dayofweek). Этот индикатор вернет массив значений дня недели (0-6, где понедельник — 0, а воскресенье — 6) для наших данных.
Теперь давайте перейдем к следующей функции, в которой мы реализуем нашу торговую логику. Эта функция вызывается для каждого бара данных и позволяет нам принимать решения на основе текущих данных. В нашем случае мы проверим, равен ли день недели 1 (вторник), используя if self.day_of_week == 1:. Если сегодня вторник, мы подадим сигнал на покупку. Чтобы выполнить ордер на покупку, мы будем использовать функцию self.buy, предоставляемую backtesting.py. Мы можем рассчитать размер ордера на покупку, разделив сумму_инвестирования на текущую цену закрытия актива. Чтобы убедиться, что мы покупаем целое количество акций, мы можем использовать math.floor для округления результата в меньшую сторону.
Чтобы обрабатывать дробные доли, мы можем разделить доли, умножив актив на небольшое число, например 10 ** -6. Это разделит акции на микроакции, которые позже можно будет преобразовать обратно в фактическое количество купленных акций путем деления на такое же небольшое число.
Наконец, нам нужно запустить бэктест и извлечь статистику. Для этого мы можем использовать bt.run() и присвоить результат переменной с именем stats. Мы также можем построить результаты, используя bt.plot().
Поскольку мы еще не реализовали логику продажи, график выглядит как непрерывная линия без каких-либо точек продажи. Мы исправим это в ближайшее время. Но прежде чем мы это сделаем, давайте извлечем некоторую статистику из результатов ретроспективного тестирования.
Для этого мы будем использовать переменную статистики, которую мы определили ранее. Мы можем распечатать различные статистические данные, такие как общий доход, доход в годовом исчислении, максимальная просадка и многое другое.
Не стесняйтесь добавлять дополнительные статистические данные, если вы заинтересованы в изучении дополнительных показателей производительности.
Теперь перейдем к реализации логики продажи. Поскольку мы используем стратегию усреднения стоимости в долларах, мы будем продавать одну и ту же фиксированную сумму в долларах каждую неделю. В нашем случае мы будем продавать по пятницам.
Здесь мы проверяем, является ли день недели 4 (пятница), используя индикатор day_of_week, который мы создали ранее. Если это пятница, мы продаем ту же сумму в долларах, которую мы купили ранее, путем деления суммы_в_инвестиции на текущую цену закрытия. Это гарантирует, что мы продаем соответствующее количество акций, соответствующее сумме наших инвестиций.
Теперь, когда мы запустим бэктест, мы должны увидеть на графике точки продажи, указывающие на пятницу, когда мы продаем нашу позицию.
Не стесняйтесь экспериментировать с различными вариациями этой стратегии, например, корректируя дни покупки/продажи или вводя дополнительные условия в зависимости от движения цены. Эта структура позволяет вам легко расширять и настраивать вашу стратегию в соответствии с вашими требованиями.
Не забудьте настроить переменную amount_to_invest и изучить различные данные об активах, чтобы увидеть, как работает стратегия.
Я надеюсь, что это поможет вам в реализации и изучении стратегии усреднения долларовых затрат с использованием библиотеки backtesting.py в Python. Дайте мне знать, если у вас есть дополнительные вопросы!
Пользовательские индикаторы в Backtesting.py — Python Deep Dive
Пользовательские индикаторы в Backtesting.py — Python Deep Dive
В этом видео мы рассмотрим процесс создания пользовательских индикаторов в библиотеке backtesting.py. Эта функция позволит нам легко тестировать любую торговую стратегию, создавая индикаторы и переводя функции Python в формат, совместимый с экосистемой backtesting.py.
Прежде чем мы углубимся в детали создания индикатора, рекомендуется ознакомиться с бесплатным курсом на YouTube, который охватывает большинство аспектов бэктестинга.py. Этот курс обеспечит общее понимание библиотеки, что будет полезно при изучении создания индикаторов в этом видео.
В этом видео мы сосредоточимся на трех разных примерах, чтобы осветить различные идеи индикаторов. Первый пример включает в себя использование сигналов, сгенерированных во внешней программе Python, и их интеграцию в backtesting.py. Этот подход полезен, когда у вас уже есть сигналы на покупку и продажу из внешнего источника и вы хотите включить их в процесс тестирования на исторических данных.
Второй пример продемонстрирует использование библиотеки pandas-ta для возврата нескольких значений для каждого индикатора. В частности, мы будем работать с индикатором «Полосы Боллинджера» и продемонстрируем, как вернуть фрейм данных, содержащий как нижнюю, так и верхнюю полосы, вместо простого пустого массива. Этот пример подчеркнет универсальность создания индикаторов с несколькими значениями.
Наконец, мы закодируем импульсную стратегию, чтобы продемонстрировать, как можно создавать пользовательские индикаторы с помощью чистого Python. Этот пример продемонстрирует гибкость создания индикаторов с помощью программирования на Python, предоставляя безграничные возможности в дизайне индикаторов.
Чтобы следовать примерам, убедитесь, что у вас установлены необходимые библиотеки, включая бэктестинг, pandas и pandas-ta. После установки этих библиотек создайте файл Python для примеров кода.
Начальная часть кода устанавливает необходимый шаблон при использовании backtesting.py. Он импортирует необходимые классы, «бэктест» и «стратегия», а также импортирует образцы данных для акций Google из бэктестинга.py. Импортированные данные представляют собой фрейм данных pandas, содержащий ежедневные данные о ценах, включая открытие, максимум, минимум, закрытие и объем, с индексом даты и времени.
Для первого примера мы предполагаем, что вы уже сгенерировали какие-то сигналы во внешней программе и хотите передать их в backtesting.py. Чтобы продемонстрировать это, мы создаем случайные сигналы с помощью numpy и добавляем их во фрейм данных Google. Эти сигналы могут представлять любой индикатор, который вы запрограммировали на Python, где -1 обозначает сигнал на продажу, 0 указывает на отсутствие действий, а 1 представляет сигнал на покупку.
Затем мы определяем класс стратегии под названием «SignalStrategy», который наследуется от импортированного ранее класса «Strategy». Этот класс будет отвечать за реализацию логики покупки и продажи на основе сигналов. Класс включает в себя функцию инициализации " init " и функцию "next".
В функции « init » в этом конкретном примере нам нечего делать, но рекомендуется включить ее. В «следующей» функции будет реализована логика покупки и продажи на основе сигналов.
Чтобы выполнить бэктест, мы создаем экземпляр класса бэктеста, передавая фрейм данных Google и класс «SignalStrategy». Мы также устанавливаем значение кеша на 10 000. Затем мы запускаем бэктест и сохраняем результаты в переменной «stats». Наконец, мы распечатываем статистику, чтобы увидеть эффективность стратегии.
Запуск кода на этом этапе не приведет ни к каким сделкам, потому что мы еще не реализовали логику покупки и продажи. Однако мы можем получить доступ к значениям сигнала, используя «self.data.signal» в функции «next», которая даст нам самое последнее значение сигнала.
Для реализации логики покупки и продажи мы проверяем текущее значение сигнала и текущую позицию. Если сигнал равен 1 (сигнал на покупку) и существующей позиции нет, мы выполняем ордер на покупку, используя «self.buy». Если сигнал равен -1 (сигнал на продажу) и существует длинная позиция, мы выполняем ордер на продажу, используя "self.sell".
Стратегия внешнего сигнала:
Использование pandas-ta для пользовательских индикаторов:
Не забудьте заменить заполнители, такие как GOOG, вашими фактическими данными и настроить стратегии в соответствии с вашими конкретными требованиями.
Стоп-лоссы в Backtesting.py
Стоп-лоссы в Backtesting.py
В этом видео мы рассмотрим концепцию стоп-лоссов в библиотеке «backtesting.py». Видео будет охватывать три примера возрастающей сложности и глубины, обеспечивая всестороннее понимание стоп-лоссов в «backtesting.py». Докладчик предполагает наличие некоторых предварительных знаний о «backtesting.py» и рекомендует посмотреть бесплатный курс на YouTube для начинающих, прежде чем углубляться в эту сложную тему.
Для начала откройте терминал и убедитесь, что «backtesting.py» установлен, выполнив команду «pip install backtesting». Это установит все необходимые пакеты. Затем создайте новый файл Python, назовем его «example.py» и импортируйте необходимые модули: «backtest» и «strategy» из «backtesting» и «googledale» из «backtesting.test». «googledale» — это тестовый набор данных, который поставляется с «backtesting.py».
Затем определите класс стратегии, создав класс с именем «Strats», который наследуется от класса «стратегия». Реализуйте две обязательные функции: " init " и "next". На данный момент мы готовы запустить наш бэктест. Инициализируйте новый объект бэктеста "bt" с помощью функции "бэктест". Передайте данные «googledale» и класс стратегии, который мы только что определили. Установите начальную денежную стоимость на 10 000 долларов. Наконец, запустите бэктест с помощью метода «bt.run» и нанесите результаты на график с помощью «bt.plot».
Изначально класс стратегии не выполняет никаких торговых действий. Чтобы продемонстрировать простой пример стоп-лосса, мы добавим некоторую базовую логику покупки и продажи. Если у нас есть существующая позиция, мы не будем предпринимать никаких действий. Однако, если у нас нет позиции, мы разместим ордер на покупку, используя метод «self.to_buy», указав размер позиции (например, 1 акция). Дополнительно добавим стоп-лосс и тейк-профит. Стоп-лосс будет установлен на 10 единиц ниже текущей цены закрытия, а тейк-профит будет установлен на 20 единиц выше текущей цены закрытия.
Запуск бэктеста приведет к большому количеству сделок. Как только сделка будет закрыта, новая сделка будет открыта на следующем баре, если не сработает стоп-лосс или тейк-профит. Важно понимать, как backtesting.py обрабатывает стоп-лоссы и тейк-профиты. В случаях, когда и стоп-лосс, и тейк-профит срабатывают на одном и том же баре, библиотека предполагает, что стоп-лосс срабатывает первым. Такое поведение может привести к неожиданным результатам, особенно при работе с ежедневными данными, в которых могут быть значительные пробелы.
Чтобы более эффективно управлять стоп-лоссами, мы можем расширить класс стратегии и использовать «стратегию трейлинга», предоставляемую «backtesting.py». Импортируйте необходимые модули, в том числе «кроссовер» и «трейлинговую стратегию» из «backtesting.lib». В новом классе стратегии наследуйте от «конечной стратегии» вместо базового класса «стратегии». Переопределите функцию « init », чтобы вызвать функцию « init » родительского класса, используя «super». Затем используйте функцию «set_trailing_stop_loss» из родительского класса, чтобы установить значение скользящего стоп-лосса.
В следующем разделе видео ведущий более подробно объясняет, как работает «стратегия трейлинга» и как ее настроить под конкретные требования. Однако в этом разделе основное внимание уделяется использованию «стратегии трейлинга» в нашем коде. Вызывая функцию « init » родительского класса и используя функцию «set_trailing_stop_loss», мы можем использовать функцию трейлинг-стопа в нашем тестировании на исторических данных.
В целом, видео дает пошаговое объяснение реализации стоп-лоссов в «backtesting.py». Он охватывает простые примеры, а также более сложные концепции, такие как отставание от значения 10, что означает, что наш стоп-лосс будет отставать от цены на 10 единиц.
Теперь, когда мы настроили нашу функцию инициализации, давайте перейдем к следующей функции. Здесь будет реализована основная часть нашей торговой логики. Внутри функции next мы сначала вызовем функцию next родительского класса, используя super().next(). Это гарантирует, что функция скользящего стоп-лосса будет выполняться вместе с другой торговой логикой.
Далее мы добавим код для настройки нашего скользящего стоп-лосса. Мы будем использовать условный оператор, чтобы проверить, есть ли у нас открытая позиция (self.position не None). Если у нас есть позиция, мы обновим трейлинг-стоп с помощью метода update_trailing_sl, предоставляемого классом trailing_strategy. Этот метод принимает текущую цену в качестве аргумента и соответствующим образом обновляет стоп-лосс.
Проверка на истории в Python (обманутая случайностью)
Проверка на истории в Python (обманутая случайностью)
Мы все были в такой ситуации, когда мы создаем торговую стратегию, тестируем ее на истории, и когда мы, наконец, реализуем ее, она не работает должным образом. Одной из основных причин этого разочарования является подгонка стратегии к определенному набору исторических данных, используемых при тестировании на исторических данных. В этом видео я продемонстрирую стратегию борьбы с переоснащением и позабочусь о том, чтобы вы не полагались на стратегии, которым не хватает прочной основы или которые могут быть обмануты случайностью.
Давайте углубимся в конкретный пример. Я провел ретроспективное тестирование простой стратегии на основе RSI, используя Биткойн в качестве актива. Стратегия включает продажу, когда RSI высок, и покупку, когда RSI низок. Результаты ретроспективного тестирования показали скромную доходность около трех процентов, несмотря на то, что Биткойн испытал 15-процентное снижение в течение тестируемого периода. На первый взгляд может показаться, что это многообещающая стратегия для медвежьих рынков.
Тем не менее, крайне важно изучить эффективность стратегии на разных временных интервалах, чтобы определить, постоянно ли она определяет прибыльные возможности или просто повезло с выбранными значениями параметров во время тестирования на исторических данных. Для этого я провел несколько 30-дневных бэктестов, охватывающих разные периоды в течение года.
Построив график распределения доходов от этих бэктестов, мы можем получить представление об эффективности стратегии. График показывает каждое 30-дневное окно в виде точки, представляющей доходы, полученные за этот период. На прилагаемом прямоугольном графике отображается медиана доходности, квартили, максимальное и минимальное значения. Анализируя график, становится очевидным, что средняя доходность за 30-дневный период составляет -8,5 процента. Кроме того, распределение доходов кажется случайным, как и результаты, которые можно было бы ожидать от генератора случайных чисел, установленного между -35 и 15. Эти результаты убедительно указывают на то, что стратегия не является уникальной или эффективной за пределами конкретных исторических данных, используемых в анализе. бэктест.
Чтобы проверить стратегию и смягчить влияние переобучения, нам необходимо провести бэктесты на более широком диапазоне данных. Для этой цели я загрузил несколько файлов данных за весь год, с начала 2022 года до конца 2022 года. Я объединил эти файлы в основной CSV-файл, содержащий данные минутной свечи за весь период.
В коде проверки я внес небольшие изменения, чтобы приспособить расширенный набор данных. Основная стратегия остается прежней, фокусируясь на торговой логике на основе RSI. Тем не менее, я ввел цикл для проведения бэктестов в 30-дневных окнах по всем данным. Каждый бэктест рассчитывает доходность, которая затем добавляется в список для дальнейшего анализа.
Создав коробчатую диаграмму с использованием собранных доходов, мы можем визуализировать распределение эффективности стратегии по различным 30-дневным окнам. Этот график показывает изменчивость доходности и дает более четкое представление о том, как стратегия работает на разных временных интервалах. В этом конкретном примере график показывает преимущественно отрицательную доходность почти каждый месяц, что позволяет предположить, что стратегии не хватает стабильной прибыльности.
Эти методы проверки и проверки торговых стратегий можно применять к любой системе тестирования на истории по вашему выбору. В предоставленном коде используется библиотека backtesting.py, но вы можете адаптировать ее к другим библиотекам, таким как vectorbt или backtrader. Основная идея состоит в том, чтобы убедиться, что ваша стратегия демонстрирует надежность в различных временных рамках, а не является просто продуктом подгонки к определенному набору исторических данных.
Выполняя эти шаги проверки, вы можете снизить риск полагаться на стратегии, которые не основаны на реальности, или стать жертвой случайных результатов. Важно выйти за рамки тестирования на исторических данных и рассмотреть эффективность стратегии в различных рыночных условиях, чтобы принимать обоснованные решения при реализации торговых стратегий.
Проанализировав результаты бэктеста и распределение доходности по разным таймфреймам, мы обнаружили, что эффективность стратегии была по существу случайной. Он не обеспечивал стабильной прибыльности за пределами определенного периода времени, используемого для тестирования на исторических данных. Это указывает на то, что стратегия страдает от переобучения и не обладает надежностью.
Чтобы не попасть в ловушку переобучения и повысить шансы на разработку надежных торговых стратегий, вот несколько рекомендаций:
Используйте достаточное количество разнообразных данных. Убедитесь, что ваш бэктест включает в себя значительный объем исторических данных для охвата различных рыночных условий. Это помогает охватить более широкий спектр сценариев и снижает вероятность переобучения конкретным рыночным условиям.
Проверка на нескольких таймфреймах: вместо того, чтобы полагаться исключительно на один период времени для тестирования на исторических данных, протестируйте свою стратегию на разных таймфреймах. Это дает представление о ее эффективности в различных рыночных условиях и помогает определить, имеет ли стратегия постоянную прибыльность или наблюдаемые результаты были вызваны случайностью.
Внедрите тестирование вне выборки: зарезервируйте часть ваших исторических данных для тестирования вне выборки. После проведения основного обратного тестирования исходного набора данных проверьте стратегию на зарезервированных данных, которые модель раньше не видела. Это помогает оценить способность стратегии адаптироваться к невидимым рыночным условиям и обеспечивает более реалистичную оценку ее эффективности.
Остерегайтесь подгонки кривой: избегайте чрезмерной оптимизации или настройки параметров, чтобы стратегия слишком точно подходила к историческим данным. Стратегии, которые слишком адаптированы к конкретным моделям данных, с большей вероятностью потерпят неудачу в реальной торговле. Стремитесь к надежности, а не гоняйтесь за исключительной производительностью только на исторических данных.
Рассмотрите возможность анализа Walk-Forward: вместо того, чтобы полагаться исключительно на статические бэктесты, рассмотрите возможность использования анализа Walk-Forward. Это включает в себя периодическую повторную оптимизацию и повторное тестирование вашей стратегии по мере поступления новых данных. Это позволяет вам постоянно адаптировать и настраивать свою стратегию, повышая ее эффективность в меняющихся рыночных условиях.
Используйте тесты статистической значимости: примените статистические тесты, чтобы оценить значимость эффективности вашей стратегии. Это помогает определить, являются ли наблюдаемые результаты статистически значимыми или просто случайными. Общие статистические тесты, используемые при тестировании на истории, включают t-тесты, бутстрап-тесты и моделирование Монте-Карло.
Следуя этим рекомендациям, вы можете снизить риск разработки стратегий, которые чрезмерно приспособлены к историческим данным, и повысить вероятность создания надежных торговых подходов.
Помните, что цель состоит в том, чтобы разработать торговые стратегии, которые демонстрируют постоянную прибыльность в различных рыночных условиях, а не стратегии, которые просто хорошо работают на исторических данных.
Краткое введение в Python для инженеров по машинному обучению
Краткое введение в Python для инженеров по машинному обучению
Преподаватель курса начинает с представления концепции прогнозного моделирования и его значения в отрасли. Прогнозное моделирование направлено на разработку моделей, которые могут делать точные прогнозы, даже если они не могут объяснить, почему эти прогнозы сделаны. Преподаватель подчеркивает, что курс будет специально посвящен табличным данным, таким как электронные таблицы или базы данных. Цель состоит в том, чтобы помочь учащимся пройти путь от разработчиков, заинтересованных в машинном обучении на Python, до навыков работы с новыми наборами данных, разработки сквозных прогностических моделей и использования Python и библиотеки SCIPy для задач машинного обучения.
Для начала инструктор проводит ускоренный курс по синтаксису Python. Они охватывают фундаментальные понятия, такие как переменные и присваивания, разъясняя различие между знаком «равно», используемым для присваивания, и знаком «двойное равно», используемым для сравнения на равенство. Преподаватель демонстрирует, как использовать Jupyter Notebook для написания кода на Python, и дает советы по навигации, например, по созданию новой записной книжки, использованию псевдонимов для библиотек, выполнению ячеек, а также копированию или перемещению ячеек. Они также объясняют функцию автоматического сохранения и ручное сохранение записных книжек. Наконец, видео кратко касается остановки выполнения ядра.
Далее инструктор объясняет, как использовать панель инструментов в Jupyter Notebook для навигации по движку Python и как аннотировать блокноты с помощью Markdown. Видео охватывает основные операторы управления потоком, включая условия if-then-else, циклы for и циклы while. Эти операторы позволяют принимать решения и повторять их в коде Python. Затем инструктор представляет три важные структуры данных для машинного обучения: кортежи, списки и словари. Эти структуры данных обеспечивают эффективные способы хранения данных и управления ими. Кроме того, видео включает в себя ускоренный курс по NumPy, библиотеке, позволяющей выполнять числовые операции в Python. Он охватывает создание массивов, доступ к данным и выполнение арифметических операций с массивами.
Далее в видео обсуждаются две важные библиотеки, Matplotlib и Pandas, которые обычно используются в машинном обучении для анализа и визуализации данных. Matplotlib позволяет пользователям создавать различные графики и диаграммы, облегчая визуализацию данных. Pandas, с другой стороны, предоставляет структуры данных и функции для обработки и анализа данных, в частности, с помощью структур серий и фреймов данных. Видео подчеркивает важность функции read_csv Pandas для загрузки CSV-файлов, наиболее распространенного формата в приложениях машинного обучения. В нем также подчеркивается полезность функций Pandas для обобщения и построения графиков данных, чтобы получить представление и подготовить данные для задач машинного обучения. Описательная статистика в Python упоминается как важнейший инструмент для понимания характеристик и природы данных.
Видео рассказывает о конкретных методах визуализации данных, которые могут помочь в анализе данных перед применением методов машинного обучения. Гистограммы, диаграммы плотности и ящичные диаграммы представлены как способы наблюдения за распределением атрибутов и выявления потенциальных выбросов. Матрицы корреляции и матрицы точечных диаграмм представлены как методы определения взаимосвязей между парами атрибутов. В видео подчеркивается важность масштабирования, стандартизации, нормализации и бинаризации данных как необходимых шагов предварительной обработки для подготовки данных для алгоритмов машинного обучения. Метод подгонки и преобразования объясняется как общий подход к предварительной обработке данных.
Следующая обсуждаемая тема — методы предварительной обработки данных в машинном обучении. Видео охватывает нормализацию и стандартизацию как два важных метода. Нормализация включает в себя изменение масштаба атрибутов, чтобы они имели тот же масштаб, в то время как стандартизация включает преобразование атрибутов, чтобы они имели среднее значение, равное нулю, и стандартное отклонение, равное единице. Также объясняется бинаризация, при которой данные обрабатываются порогом для создания двоичных атрибутов или четких значений. Подчеркивается важность выбора функций, поскольку нерелевантные или частично нерелевантные функции могут негативно повлиять на производительность модели. Видео представляет одномерный отбор как один из статистических подходов к выбору признаков и подчеркивает использование методов рекурсивного исключения признаков и важности признаков, которые используют ансамбли дерева решений, такие как случайный лес или дополнительные деревья. Анализ основных компонентов (PCA) также обсуждается как метод сокращения данных, который может сжимать набор данных до меньшего количества измерений с использованием линейной алгебры.
Видео подчеркивает важность методов передискретизации для оценки эффективности алгоритмов машинного обучения на невидимых данных. Он предостерегает от оценки алгоритмов на том же наборе данных, который используется для обучения, поскольку это может привести к переоснащению и плохому обобщению новых данных. Такие методы, как разделение наборов обучающих тестов, k-кратная перекрестная проверка, перекрестная проверка с исключением одного и повторяющиеся случайные разделения тестов, объясняются как способы получения надежных оценок производительности алгоритма. Видео завершается обсуждением различных показателей производительности алгоритмов машинного обучения, таких как точность классификации, логарифмическая потеря, площадь под кривой, матрица путаницы и отчет о классификации.
Видео раскрывает показатели производительности, используемые для оценки прогнозов, сделанных моделями машинного обучения. Он охватывает точность классификации, логарифмическую потерю (для оценки вероятностей), площадь под кривой рабочих характеристик приемника (ROC) (для задач бинарной классификации), матрицу путаницы (для оценки точности модели с несколькими классами) и отчет о классификации (который обеспечивает точность , отзыв, оценка F1 и поддержка для каждого класса). Кроме того, в видео объясняются три общих показателя регрессии: средняя абсолютная ошибка, среднеквадратическая ошибка и R-квадрат. Демонстрируются практические примеры, иллюстрирующие, как рассчитать эти показатели с помощью Python.
Докладчик представляет концепцию выборочной проверки, чтобы определить, какие алгоритмы машинного обучения хорошо работают для конкретной проблемы. Выборочная проверка включает в себя оценку нескольких алгоритмов и сравнение их производительности. Видео демонстрирует выборочную проверку шести различных моделей машинного обучения, включая как линейные, так и нелинейные алгоритмы, с использованием Python и библиотеки scikit-learn. Спикер подчеркивает, что результаты могут отличаться из-за стохастического характера моделей. Раздел завершается введением в регрессионные модели машинного обучения, подготавливая зрителей к следующему разделу, посвященному выборочной проверке этих моделей.
Затем докладчик представляет линейные и нелинейные модели машинного обучения на примере набора данных о ценах на жилье в Бостоне. Тестовый комплект с 10-кратной перекрестной проверкой используется для демонстрации того, как выборочно проверять каждую модель, а среднеквадратическая ошибка используется в качестве индикатора производительности (инвертируется из-за особенностей функции оценки перекрестных файлов). Обсуждается модель линейной регрессии, предполагающая гауссово распределение входных переменных и их связь с выходной переменной. Также объясняется гребенчатая регрессия, модификация линейной регрессии, сводящая к минимуму сложность модели. Докладчик подчеркивает важность понимания конвейера или процесса, а не погружения в конкретную реализацию кода на данном этапе.
Видео исследует процесс понимания и визуализации входных переменных для задачи машинного обучения. Он предлагает использовать одномерные графики, такие как графики с решеткой и усами и гистограммы, чтобы понять распределение входных переменных. Для многомерного анализа диаграммы рассеивания могут помочь определить структурные отношения между входными переменными и выявить высокие корреляции между конкретными парами атрибутов. В видео также обсуждается процесс оценки с использованием набора тестов с 10-кратной перекрестной проверкой для оценки производительности модели. Подчеркивается важность создания проверочного набора данных для независимой оценки точности наилучшей модели. Оцениваются шесть различных моделей машинного обучения, и для прогнозирования выбирается наиболее точная. Отчет о классификации, матрица путаницы и оценка точности используются для оценки прогнозов. Наконец, видео касается регрессии регуляризации, подчеркивая построение моделей Lasso и Elastic Net для уменьшения сложности моделей регрессии.
Видео знакомит с проблемой бинарной классификации в машинном обучении, целью которой является предсказание металла по камню с использованием набора данных Sonar Mines vs Rocks. Набор данных содержит 208 экземпляров с 61 атрибутом, включая атрибут класса. Анализируются описательные статистические данные, указывающие на то, что, хотя данные находятся в одном диапазоне, различные средства предполагают, что стандартизация данных может быть полезной. Унимодальные и мультимодальные визуализации данных, такие как гистограммы, графики плотности и корреляционные визуализации, используются для понимания данных. Создается проверочный набор данных, и базовый уровень производительности модели устанавливается путем тестирования различных моделей, включая линейную регрессию, логистическую регрессию, линейный дискриминантный анализ, деревья классификационной регрессии, машины опорных векторов (SVM), наивную байесовскую модель и k-ближайших соседей ( КНН). Точность каждого алгоритма рассчитывается с использованием 10-кратной перекрестной проверки и сравнивается.
В следующем сегменте видео обсуждается, как оценивать различные алгоритмы машинного обучения с использованием стандартизированных данных и настройки. Стандартизация включает в себя преобразование данных, поэтому каждый атрибут имеет среднее значение 0 и стандартное отклонение 1, что может повысить производительность некоторых моделей. Чтобы предотвратить утечку данных в процессе преобразования, рекомендуется конвейер, который стандартизирует данные и строит модель для каждой складки в наборе тестов перекрестной проверки. В видео демонстрируются методы настройки k-ближайших соседей (KNN) и машин опорных векторов (SVM) с использованием поиска по сетке с 10-кратной перекрестной проверкой стандартизированной копии обучающего набора данных. Определены оптимальные конфигурации для KNN и SVM, и оценена точность моделей. Наконец, в видео кратко обсуждаются KNN, регрессия дерева решений и SVM как модели нелинейного машинного обучения.
Прикладная статистика для инженеров по машинному обучению
Прикладная статистика для инженеров по машинному обучению
Преподаватель в видео знакомит с областью статистики и подчеркивает ее важность в работе с задачами прогнозного моделирования в машинном обучении. Они объясняют, что статистика предлагает ряд методов, начиная от простой сводной статистики и заканчивая проверкой гипотез и оценочной статистикой. Курс предназначен для предоставления пошаговой основы статистических методов с практическими примерами на Python. Он охватывает шесть основных аспектов статистики для машинного обучения и фокусируется на реальных приложениях, что делает его подходящим для инженеров по машинному обучению.
Преподаватель подчеркивает тесную связь между машинным обучением и статистикой и предлагает программистам извлечь пользу из улучшения своих статистических навыков с помощью этого курса. Они классифицируют поле статистики на две категории: описательная статистика и статистика вывода. Описательная статистика включает в себя обобщение и описание данных с использованием таких измерений, как средние значения и графические представления. Логическая статистика, с другой стороны, используется для того, чтобы делать выводы о большей совокупности на основе выборочных данных.
Также подчеркивается важность надлежащей обработки данных, включая устранение потери данных, повреждения и ошибок. Затем в видео рассматриваются различные этапы подготовки данных для моделей машинного обучения. Это включает в себя очистку данных, выборку данных, выборку данных и преобразование данных с использованием статистических методов, таких как стандартизация и нормализация. Особое внимание уделяется оценке данных, и в видео обсуждается план эксперимента, повторная выборка данных и выбор модели для оценки навыков модели. Для прогнозирования новых данных видео рекомендует использовать оценочную статистику.
В видео объясняются различные шкалы измерения, используемые в статистике, а именно номинальная, порядковая, интервальная и относительная шкалы. В нем обсуждаются статистические методы, применимые к каждой шкале, и то, как их можно реализовать в машинном обучении. Подчеркивается важность понимания и сообщения о неопределенности при моделировании, особенно при работе с выборками. Затем видео фокусируется на нормальном распределении, которое обычно наблюдается в различных наборах данных. Он демонстрирует, как генерировать выборочные данные и визуально оценивать их соответствие распределению Гаусса с помощью гистограммы. Хотя большинство наборов данных не имеют идеального гауссовского распределения, они часто демонстрируют гауссовские свойства.
Подчеркивается важность выбора детального способа разделения данных для выявления лежащего в их основе распределения Гаусса. Меры центральной тенденции, такие как среднее значение и медиана, исследуются вместе с дисперсией и стандартным отклонением в качестве мер разброса распределения. Случайность обсуждается как важный инструмент машинного обучения, помогающий алгоритмам стать более надежными и точными. Объясняются различные источники случайности, включая ошибки данных и шум.
В видео объясняется, что алгоритмы машинного обучения часто используют случайность для повышения производительности и создания более оптимальных моделей. Случайность позволяет алгоритмам исследовать различные возможности и находить лучшие отображения данных. Обсуждаются контролируемые и неконтролируемые источники случайности, а также объясняется использование функции начального числа для согласования случайности в модели. В видео представлен пример использования модуля Python random для генерации случайных чисел и подчеркивается разница между генератором псевдослучайных чисел библиотеки numpy и генератором псевдослучайных чисел стандартной библиотеки. Также обсуждаются два случая, когда заполнять генератор случайных чисел, а именно во время подготовки данных и разделения данных.
Особое внимание уделяется последовательному разделению данных и использованию генераторов псевдослучайных чисел при оценке алгоритма. В видео рекомендуется оценивать модель таким образом, чтобы учитывать измеренную неопределенность и производительность алгоритма. Оценка алгоритма на нескольких разбиениях данных дает представление о том, как его производительность зависит от различных данных обучения и тестирования. Многократная оценка алгоритма на одних и тех же разбиениях данных помогает понять, как его производительность меняется сама по себе. Видео также представляет закон больших чисел и центральную предельную теорему, подчеркивая, что наличие большего количества данных улучшает производительность модели и что по мере увеличения размера выборки распределение среднего приближается к распределению Гаусса.
Видео демонстрирует центральную предельную теорему с использованием бросков игральных костей и кода, показывая, как выборочные средние аппроксимируют распределение Гаусса по мере увеличения размера выборки.
В видео подчеркивается важность оценки моделей машинного обучения и понимания неопределенности, связанной с их прогнозами. Он вводит оценочные показатели, такие как точность, достоверность, полнота и оценка F1, которые обычно используются для оценки производительности моделей классификации. В видео объясняется, что точность измеряет общую правильность прогнозов, точность измеряет долю истинно положительных предсказаний среди всех положительных предсказаний, полнота измеряет долю истинно положительных предсказаний во всех фактических положительных случаях, а показатель F1 объединяет точность и полноту в единая метрика. В нем также обсуждается концепция матрицы путаницы, которая обеспечивает более подробное представление о производительности модели классификации, показывая количество истинно положительных, истинно отрицательных, ложноположительных и ложноотрицательных прогнозов.
Докладчик демонстрирует, как рассчитать эти показатели оценки с помощью библиотеки Python scikit-learn. В нем показано, как импортировать необходимые модули, разбивать данные на наборы для обучения и тестирования, обучать модель классификации, делать прогнозы на наборе тестов и оценивать производительность модели, используя точность, воспроизводимость, полноту и оценку F1. Видео подчеркивает важность оценки моделей на невидимых данных для обеспечения их возможностей обобщения.
Кроме того, видео знакомит с концепцией кривых рабочих характеристик приемника (ROC) и площади под кривой (AUC) в качестве показателей оценки для моделей бинарной классификации. Кривые ROC отображают процент истинных положительных результатов в сравнении с уровнем ложных положительных результатов при различных пороговых значениях классификации, обеспечивая визуальное представление производительности модели при различных пороговых значениях. AUC представляет собой площадь под кривой ROC и представляет собой единую метрику для сравнения производительности различных моделей. В видео объясняется, как построить кривую ROC и рассчитать AUC с помощью библиотеки Python scikit-learn.
Концепция переобучения обсуждается как распространенная проблема в машинном обучении, когда модель хорошо работает на обучающих данных, но не может обобщать новые, невидимые данные. В видео объясняется, что переоснащение происходит, когда модель становится слишком сложной и изучает шаблоны, характерные для обучающих данных, которые не соблюдаются в общей популяции. Видео демонстрирует, как можно визуализировать переоснащение, сравнивая производительность обучения и тестирования модели. Это объясняет, что модель переобучения будет иметь низкую ошибку обучения, но высокую ошибку тестирования, что указывает на плохое обобщение. В видео предлагаются методы регуляризации, такие как гребневая регрессия и регрессия Лассо, как способы смягчения переобучения путем добавления штрафного члена к целевой функции модели.
Вводится понятие перекрестной проверки как метода оценки производительности и обобщения моделей машинного обучения. В видео объясняется, что перекрестная проверка включает в себя разделение данных на несколько подмножеств, обучение модели на части данных и оценку ее производительности на оставшейся части. Этот процесс повторяется несколько раз, при этом для обучения и тестирования используются разные подмножества, а результаты усредняются для оценки производительности модели. Видео демонстрирует, как выполнять перекрестную проверку с использованием библиотеки Python scikit-learn, в частности, метод перекрестной проверки K-fold.
Далее в видео обсуждается концепция выбора функций и их важность в машинном обучении. В нем объясняется, что выбор функций включает определение наиболее важных функций или переменных, которые влияют на производительность модели. Видео подчеркивает важность выбора информативных функций для повышения точности модели, уменьшения переобучения и улучшения интерпретируемости. В нем представлены различные методы выбора признаков, такие как одномерный выбор, рекурсивное исключение признаков и оценки важности признаков. Видео демонстрирует, как реализовать выбор функций с помощью библиотеки Python scikit-learn.
Концепция уменьшения размерности также обсуждается как метод устранения проклятия размерности в машинном обучении. В видео объясняется, что уменьшение размерности включает в себя уменьшение количества признаков или переменных в наборе данных при сохранении большей части релевантной информации. Он вводит анализ основных компонентов (PCA) как широко используемый метод уменьшения размерности. PCA стремится преобразовать данные в пространство более низкого измерения, определяя направления максимальной дисперсии данных. В видео объясняется, что PCA создает новые функции, называемые главными компонентами, которые представляют собой линейные комбинации исходных функций. Эти основные компоненты собирают наиболее важную информацию в данных и могут использоваться в качестве входных данных для моделей машинного обучения.
Видео демонстрирует, как выполнить PCA с помощью библиотеки Python scikit-learn. Он показывает, как импортировать необходимые модули, стандартизировать данные, инициализировать объект PCA, подогнать модель PCA к данным и преобразовать данные в пространство более низкой размерности. В видео также объясняется, как определить оптимальное количество основных компонентов, которые необходимо сохранить, на основе объясненного коэффициента дисперсии.
Концепция ансамблевого обучения представлена как метод повышения производительности моделей машинного обучения путем объединения нескольких отдельных моделей. В видео объясняется, что ансамблевое обучение использует мудрость толпы, где каждая отдельная модель вносит свои собственные прогнозы, а окончательный прогноз определяется на основе механизма голосования или усреднения. В видео обсуждаются два популярных метода ансамблевого обучения: бэггинг и бустинг. Бэггинг включает в себя обучение нескольких моделей на разных подмножествах данных и агрегирование их прогнозов, в то время как повышение фокусируется на последовательном обучении моделей, при этом каждая модель придает большее значение экземплярам, которые были неправильно классифицированы предыдущими моделями.
Видео демонстрирует, как реализовать ансамблевое обучение с помощью библиотеки Python scikit-learn. В нем показано, как импортировать необходимые модули для бэггинга и бустинга, инициализировать модели ансамбля, подгонять их к данным и делать прогнозы с использованием моделей ансамбля. В видео подчеркивается, что ансамблевое обучение часто может повысить общую производительность и надежность моделей машинного обучения.
Наконец, видео кратко затрагивает передовые темы машинного обучения, такие как глубокое обучение и обработка естественного языка (NLP). В нем упоминается, что глубокое обучение включает в себя обучение глубоких нейронных сетей с несколькими слоями для изучения сложных закономерностей в данных. NLP фокусируется на разработке моделей и методов для понимания и обработки человеческого языка, что позволяет использовать такие приложения, как классификация текста, анализ настроений и машинный перевод. Видео завершается подчеркиванием того, что машинное обучение — это обширная и быстро развивающаяся область с многочисленными приложениями и возможностями для дальнейшего изучения и обучения.
В видео представлен всесторонний обзор основных концепций и методов машинного обучения, включая оценку моделей, переоснащение, регуляризацию, перекрестную проверку, выбор функций, уменьшение размерности, ансамблевое обучение, а также введение в глубокое обучение и НЛП. Он демонстрирует практические реализации с использованием Python и библиотеки scikit-learn, что делает его ценным ресурсом для начинающих и тех, кто хочет улучшить свое понимание машинного обучения.
Прикладная линейная алгебра для инженеров по машинному обучению
Прикладная линейная алгебра для инженеров по машинному обучению
В видео подчеркивается важность изучения линейной алгебры для инженеров по машинному обучению, поскольку она служит фундаментальным строительным блоком для понимания исчисления и статистики, которые необходимы в машинном обучении. Более глубокое понимание линейной алгебры дает практикам лучшее понимание того, как работают методы машинного обучения, позволяя им настраивать алгоритмы и разрабатывать новые.
Курс использует нисходящий подход для обучения основам линейной алгебры, используя конкретные примеры и структуры данных для демонстрации операций с матрицами и векторами. Линейная алгебра описывается как математика матриц и векторов, предоставляющая язык для манипулирования данными и позволяющая создавать новые столбцы или массивы чисел посредством операций над этими структурами данных. Первоначально разработанная в конце 1800-х годов для решения систем линейных уравнений, линейная алгебра стала ключевой предпосылкой для понимания машинного обучения.
Докладчик вводит понятие числовой линейной алгебры, которое включает в себя применение линейной алгебры в компьютерах. Это включает в себя реализацию операций линейной алгебры и решение проблем, возникающих при работе с ограниченной точностью вычислений с плавающей запятой в цифровых компьютерах. Численная линейная алгебра играет решающую роль в машинном обучении, особенно в алгоритмах глубокого обучения, которые в значительной степени полагаются на графические процессоры (GPU) для эффективного выполнения вычислений линейной алгебры. Различные библиотеки числовой линейной алгебры с открытым исходным кодом, в основе которых лежат библиотеки на основе Fortran, обычно используются для вычисления операций линейной алгебры, часто в сочетании с такими языками программирования, как Python.
Подчеркивается значение линейной алгебры в статистике, особенно в многомерном статистическом анализе, анализе главных компонентов и решении задач линейной регрессии. В видео также упоминается широкий спектр приложений линейной алгебры в таких областях, как обработка сигналов, компьютерная графика и даже физика, с примерами, такими как теория относительности Альберта Эйнштейна, использующая тензоры и тензорное исчисление, тип линейной алгебры.
В видео дополнительно исследуется практическое применение линейной алгебры в задачах машинного обучения. Он вводит концепцию использования операций линейной алгебры, таких как кадрирование, масштабирование и обрезка, для управления изображениями, демонстрируя, как обозначения и операции линейной алгебры могут использоваться в этом контексте. Кроме того, видео объясняет популярную технику кодирования, называемую горячим кодированием для категориальных переменных. Представлена основная структура данных, используемая в машинном обучении, N-мерные массивы или массивы ND, а библиотека NumPy в Python обсуждается как мощный инструмент для создания этих массивов и управления ими. В видео рассматриваются важные функции, такие как v-стек и горизонтальное стекирование, которые позволяют создавать новые массивы из существующих массивов.
Объясняется управление и доступ к данным в массивах NumPy, которые обычно используются для представления данных машинного обучения. В видео показано, как преобразовать одномерные списки в массивы с помощью функции массива и создать двумерные массивы данных с помощью списков списков. Он также охватывает операции индексации и нарезки в массивах NumPy, включая использование оператора двоеточия для нарезки и отрицательной индексации. Подчеркивается важность нарезки при указании входных и выходных переменных в машинном обучении.
В видео обсуждаются приемы работы с многомерными наборами данных в машинном обучении. Он начинается с одномерного среза и переходит к двумерному срезу, а также к разделению данных на входные и выходные значения для обучения и тестирования. Описывается изменение формы массива и объясняется, как преобразовать одномерные массивы в двумерные массивы с одним столбцом и преобразовать двумерные данные в трехмерные массивы для алгоритмов, требующих нескольких выборок одного или нескольких временных шагов и признаков. Вводится концепция широковещательной рассылки массивов, которая позволяет использовать массивы разного размера в арифметических операциях, обеспечивая эффективную обработку наборов данных разного размера.
В видео также затрагиваются ограничения арифметики массивов в NumPy, в частности то, что арифметические операции могут выполняться только с массивами с одинаковыми размерами и размерами с одинаковым размером. Однако это ограничение преодолевается встроенной функцией вещания NumPy, которая реплицирует меньший массив по последнему несоответствующему измерению, позволяя выполнять арифметические действия между массивами с разными формами и размерами. В видео представлены три примера трансляции, включая скалярный и одномерный массивы, скалярный в двумерном массиве и одномерный массив в двумерном массиве. Отмечается, что широковещательная передача следует строгому правилу, утверждающему, что арифметика может быть выполнена только тогда, когда форма каждого измерения в массивах равна или одно из них имеет размерность, равную единице.
Далее докладчик вводит понятие векторов, которые представляют собой кортежи из одного или нескольких значений, называемых скалярами. Векторы часто представляются с помощью символов нижнего регистра, таких как «v», и могут рассматриваться как точки или координаты в n-мерном пространстве, где «n» представляет количество измерений. Объясняется создание векторов в виде массивов NumPy в Python. Видео также охватывает векторные арифметические операции, такие как сложение и вычитание векторов, которые выполняются поэлементно для векторов одинаковой длины, в результате чего получается новый вектор той же длины. Кроме того, спикер объясняет, как векторы можно умножать на скаляры для масштабирования их величины, и демонстрирует, как выполнять эти операции с помощью массивов NumPy в Python. Также обсуждается скалярное произведение двух векторов, которое дает скаляр и может использоваться для вычисления взвешенной суммы вектора.
Затем акцент смещается на векторные нормы и их важность в машинном обучении. Векторные нормы относятся к размеру или длине вектора и рассчитываются с использованием меры, суммирующей расстояние вектора от начала координат векторного пространства. Подчеркивается, что векторные нормы всегда положительны, за исключением вектора всех нулевых значений. Видео знакомит с четырьмя распространенными расчетами нормы вектора, используемыми в машинном обучении. Он начинается с векторной нормы L1, за которой следует норма L2 (евклидова норма) и максимальная норма. В этом разделе также определяются матрицы и объясняется, как манипулировать ими в Python. Обсуждается матричная арифметика, включая умножение матрицы на матрицу (скалярное произведение), умножение матрицы на вектор и скалярное умножение. Матрица описывается как двумерный массив скаляров с одним или несколькими столбцами и одной или несколькими строками, обычно представленный прописными буквами, такими как «A».
Далее вводится понятие матричных операций для машинного обучения. Это включает матричное умножение, матричное деление и матричное скалярное умножение. Умножение матриц, также известное как матричное скалярное произведение, требует, чтобы количество столбцов в первой матрице равнялось количеству строк во второй матрице. В видео упоминается, что для реализации этой операции можно использовать функцию точки в NumPy. Также объясняется концепция транспонирования матриц, когда новая матрица создается путем перестановки количества строк и столбцов исходной матрицы. Наконец, обсуждается процесс обращения матриц, который включает в себя поиск другой матрицы, которая при умножении на исходную матрицу дает единичную матрицу.
Продолжая обсуждение инверсии матриц, видео более подробно исследует эту концепцию. Обращение матрицы обозначается отрицательным верхним индексом 1 рядом с матрицей. В видео объясняется, что инверсия матриц требует поиска эффективных численных методов. Введена операция трассировки квадратной матрицы, которая вычисляет сумму диагональных элементов и может быть вычислена с помощью функции трассировки в NumPy. Определитель квадратной матрицы определяется как скалярное представление объема матрицы, и его также можно вычислить с помощью функции det в NumPy. Кратко упоминается ранг матрицы, который оценивает количество линейно независимых строк или столбцов в матрице и обычно вычисляется с использованием разложения по сингулярным числам. Наконец, объясняется концепция разреженных матриц, подчеркивая, что они преимущественно содержат нулевые значения и могут требовать больших вычислительных ресурсов для представления и работы с ними.
Затем видео углубляется в разреженные матрицы, которые в основном состоят из нулевых значений и отличаются от плотных матриц, которые в основном имеют ненулевые значения. Разреженность количественно определяется путем вычисления показателя разреженности, который представляет собой количество нулевых значений, деленное на общее количество элементов в матрице. Видео подчеркивает две основные проблемы, связанные с разреженностью: сложность пространства и сложность времени. Отмечается, что представление разреженных матриц и работа с ними могут быть дорогостоящими в вычислительном отношении.
Для решения этих проблем в видео упоминается, что Scipy предоставляет инструменты для создания разреженных матриц и управления ими. Кроме того, в нем подчеркивается, что многие функции линейной алгебры в NumPy и Scipy могут работать с разреженными матрицами, обеспечивая эффективные вычисления и операции с разреженными данными.
Разреженные матрицы обычно используются в прикладном машинном обучении для наблюдения за данными и подготовки данных. Их разреженность позволяет более эффективно хранить и обрабатывать большие наборы данных со значительным количеством нулевых значений. Используя разреженную структуру, алгоритмы машинного обучения могут выиграть от сокращения использования памяти и ускорения вычислений.
Далее в видео обсуждаются различные типы матриц, обычно используемые в линейной алгебре, особенно те, которые имеют отношение к машинному обучению. Вводятся квадратные матрицы, в которых количество строк равно количеству столбцов. Также упоминаются прямоугольные матрицы с разным количеством строк и столбцов. Видео объясняет главную диагональ квадратной матрицы, которая состоит из элементов с одинаковыми индексами строк и столбцов. Также рассматривается порядок квадратной матрицы, определяемый количеством строк или столбцов.
Кроме того, в видео представлены симметричные матрицы, которые представляют собой квадратные матрицы, равные их транспонированию. Объяснены треугольные матрицы, в том числе верхняя и нижняя треугольные матрицы. Также обсуждаются диагональные матрицы, в которых все недиагональные элементы равны нулю. Матрицы тождеств, которые представляют собой квадратные матрицы с единицами на главной диагонали и нулями в других местах, объясняются в контексте их роли мультипликативных тождеств. Также вводятся ортогональные матрицы, образованные, когда скалярное произведение двух векторов равно нулю.
Видео продолжается обсуждением ортогональных матриц и тензоров. Ортогональная матрица — это особый тип квадратной матрицы, в которой столбцы и строки представляют собой ортогональные единичные векторы. Эти матрицы эффективны в вычислительном отношении и стабильны для вычисления своих обратных значений, что делает их полезными в различных приложениях, включая модели глубокого обучения. Далее в видео упоминается, что в TensorFlow тензоры являются фундаментальной структурой данных и обобщением векторов и матриц. Тензоры представлены в виде многомерных массивов, и ими можно манипулировать в Python с помощью n-мерных массивов, подобных матрицам. В видео подчеркивается, что поэлементные тензорные операции, такие как сложение и вычитание, могут выполняться с тензорами, матрицами и векторами, обеспечивая интуитивное представление о более высоких измерениях.
Далее в видео представлена декомпозиция матрицы, которая представляет собой метод разбиения матрицы на составные части. Разложение матриц упрощает сложные операции с матрицами и обеспечивает эффективность вычислений. Рассмотрены два широко используемых метода матричной декомпозиции: LU (нижняя-верхняя) декомпозиция для квадратных матриц и QR (QR-факторизация) декомпозиция для прямоугольных матриц.
Разложение LU может упростить линейные уравнения в контексте задач линейной регрессии и облегчить вычисления, такие как определитель и обратная матрица. QR-разложение имеет приложения для решения систем линейных уравнений. Оба метода декомпозиции могут быть реализованы с помощью встроенных функций пакета NumPy в Python, обеспечивая эффективные и надежные решения для различных задач линейной алгебры.
Кроме того, в видео обсуждается разложение Холецкого, которое специально используется для симметричных и положительно определенных матриц. Разложение Холецкого представлено нижней треугольной матрицей и считается почти вдвое более эффективным, чем разложение LU для разложения симметричных матриц.
В видео кратко упоминается, что методы разложения матриц, в том числе разложение по Эйгену, используются для упрощения сложных операций. Разложение по собственным числам разлагает матрицу на собственные векторы и собственные значения. Собственные векторы — это коэффициенты, представляющие направления, а собственные значения — скаляры. И собственные векторы, и собственные значения имеют практическое применение, такое как уменьшение размерности и выполнение сложных матричных операций.
Наконец, видео затрагивает концепцию разложения по сингулярным числам (SVD) и ее применения в машинном обучении. SVD используется в различных матричных операциях и методах обработки данных в машинном обучении. Он играет решающую роль в таких вычислениях, как линейная регрессия методом наименьших квадратов, сжатие изображений и данные по шумоподавлению.
В видео объясняется, что SVD позволяет разложить матрицу на три отдельные матрицы: U, Σ и V. Матрица U содержит левые сингулярные векторы, Σ — диагональная матрица, содержащая сингулярные значения, а V содержит правые сингулярные векторы. Восстановив исходную матрицу по этим компонентам, можно получить аппроксимацию исходных данных при уменьшении ее размерности.
Одним из основных применений SVD является уменьшение размерности. Выбрав подмножество наиболее значимых сингулярных значений и соответствующих им сингулярных векторов, можно представить данные в пространстве меньшей размерности без потери важной информации. Этот метод особенно полезен в случаях, когда данные имеют большую размерность, поскольку он обеспечивает более эффективное хранение и вычисления.
В видео подчеркивается, что SVD успешно применяется для обработки естественного языка с использованием метода, называемого скрытым семантическим анализом (LSA) или скрытым семантическим индексированием (LSI). Представляя текстовые документы в виде матриц и выполняя SVD, LSA может фиксировать базовую семантическую структуру документов, позволяя выполнять такие задачи, как определение сходства документов и моделирование тем.
Кроме того, в ролике представлен усеченный класс SVD, непосредственно реализующий возможность уменьшения размерности матрицы. С усеченным SVD становится возможным преобразовать исходную матрицу в представление меньшего размера, сохраняя при этом наиболее важную информацию. Этот метод особенно полезен при работе с большими наборами данных, поскольку он позволяет более эффективно обрабатывать и анализировать.
Таким образом, видео охватывает различные темы, связанные с линейной алгеброй для машинного обучения. В нем подчеркивается важность изучения линейной алгебры как фундаментального строительного блока для понимания исчисления и статистики в контексте машинного обучения. В видео обсуждаются применения линейной алгебры в машинном обучении, такие как настройка и разработка алгоритмов, численная линейная алгебра, статистический анализ и различные другие области, такие как обработка сигналов и компьютерная графика.
Кроме того, в видео были рассмотрены ключевые понятия линейной алгебры, включая векторы, матрицы, матричные операции, векторные нормы, методы разложения матриц и разреженные матрицы. Он объяснил, как эти концепции используются в машинном обучении, и дал представление об их практическом применении.
Понимая линейную алгебру, специалисты по машинному обучению могут лучше понять математические основы алгоритмов машинного обучения и эффективно применять их к реальным задачам. Линейная алгебра служит мощным инструментом для манипулирования данными, уменьшения размерности и оптимизации, обеспечивая эффективные и действенные решения для машинного обучения.
Полное введение в XGBoost для инженеров по машинному обучению
Полное введение в XGBoost для инженеров по машинному обучению
В видео инструктор представляет всестороннее введение в XGBoost для инженеров по машинному обучению. Они объясняют, что XGBoost — это библиотека машинного обучения с открытым исходным кодом, известная своей способностью быстро создавать высокоточные модели классификации и регрессии. Он приобрел популярность как лучший выбор для построения моделей реального мира, особенно при работе с высокоструктурированными наборами данных. XGBoost был создан Тайки Ченом и основан на методе деревьев решений с повышением градиента, который обеспечивает быстрое и эффективное построение модели.
Инструктор подчеркивает, что XGBoost поддерживает несколько интерфейсов, включая реализации Python и scikit-learn. Они продолжают демонстрировать XGBoost, демонстрируя различные модули для загрузки данных и построения моделей.
Затем видео фокусируется на подготовке набора данных для обучения модели XGBoost. Преподаватель подчеркивает важность разделения данных на наборы для обучения и тестирования. Они идентифицируют целевую переменную как проблему бинарной классификации и объясняют процесс установки необходимых гиперпараметров для модели XGBoost. После того, как модель обучена на данных обучения, они оценивают ее точность на данных тестирования, используя показатель точности в качестве метрики.
Чтобы лучше понять XGBoost, инструктор углубляется в концепцию повышения градиента и его роль в более широкой категории традиционных моделей машинного обучения. Они объясняют, что повышение градиента — это метод, который объединяет слабую модель с другими моделями того же типа для создания более точной модели. В этом процессе каждое последующее дерево строится по остаткам предсказания предыдущего дерева. Преподаватель подчеркивает, что деревья решений используются при повышении градиента, поскольку они обеспечивают графическое представление возможных решений для принятия решений на основе заданных условий. Они также упоминают, что проектирование дерева решений требует хорошо документированного мыслительного процесса для эффективного определения потенциальных решений.
В видео далее исследуется создание бинарных деревьев решений с использованием рекурсивного бинарного разбиения. Этот процесс включает жадную оценку всех входных переменных и точек разделения, чтобы минимизировать функцию стоимости, которая измеряет близость прогнозируемых значений к фактическим значениям. Преподаватель объясняет, что выбрано разделение с наименьшей стоимостью, и полученные группы могут быть далее рекурсивно разделены. Они подчеркивают, что используемый алгоритм является жадным, поскольку он ориентирован на принятие наилучшего решения на каждом этапе. Однако предпочтительнее иметь деревья решений с меньшим количеством разбиений, чтобы обеспечить лучшую понятность и снизить риск переобучения данных. Инструктор подчеркивает, что XGBoost предоставляет механизмы для предотвращения переобучения, такие как ограничение максимальной глубины каждого дерева и удаление ненужных ветвей. Кроме того, они охватывают кодирование меток и демонстрируют загрузку набора данных радужной оболочки глаза с помощью scikit-learn.
Далее в видео показан процесс кодирования целевой метки как числовой переменной с использованием метода кодировщика меток. После разделения данных на обучающие и тестовые наборы данных инструктор определяет и обучает классификатор XGBoost на обучающих данных. Затем они используют обученную модель для прогнозирования тестового набора данных, достигая точности 90%. Концепция ансамблевого обучения представлена как метод объединения нескольких моделей для повышения точности прогнозирования, что в конечном итоге повышает эффективность алгоритма обучения. Преподаватель подчеркивает важность выбора правильной модели для задач классификации или регрессии для достижения оптимальных результатов.
Видео раскрывает концепцию предвзятости и дисперсии в моделях машинного обучения и подчеркивает необходимость баланса между ними. Ансамблевое обучение представлено как метод достижения этого баланса путем объединения групп слабых учащихся для создания более сложных моделей. Представлены две ансамблевые техники: бэггинг и бустинг. Бэггинг направлен на уменьшение дисперсии за счет создания подмножеств данных для обучения деревьев решений и создания ансамбля моделей с высокой дисперсией и низким смещением. Повышение, с другой стороны, включает в себя последовательное изучение моделей с деревьями решений, что позволяет исправлять ошибки, допущенные предыдущими моделями. Преподаватель подчеркивает, что повышение градиента — это особый тип повышения, который оптимизирует дифференцируемую функцию потерь с использованием слабых учеников в виде деревьев регрессии.
Видео подробно объясняет концепцию повышения градиента, описывая его трехэтапный процесс. Первый шаг включает в себя итеративное добавление слабых обучающихся (например, деревьев решений) для минимизации потерь. Второй шаг — это последовательное добавление деревьев, а последний шаг направлен на уменьшение ошибки модели посредством дальнейших итераций. Чтобы продемонстрировать процесс, видео демонстрирует использование k-кратной перекрестной проверки для сегментации данных. Через XGBoost баллы получаются за каждую складку. Преподаватель выбирает деревья решений в качестве слабых учеников, обеспечивая малую глубину, чтобы избежать переобучения. Наконец, функция потерь определяется как мера того, насколько хорошо модель машинного обучения соответствует данным.
Объясняются основные этапы повышения градиента, которые включают в себя оптимизацию функции потерь, использование слабых учеников (часто деревьев решений) и объединение нескольких слабых учеников аддитивным образом посредством ансамблевого обучения. Видео также охватывает практические аспекты использования XGBoost, такие как обработка пропущенных значений, сохранение моделей на диск и использование ранней остановки. Демонстрации с использованием кода Python предназначены для иллюстрации различных вариантов использования XGBoost. Кроме того, в видео подчеркивается важность очистки данных, включая методы обработки пропущенных значений, такие как вменение среднего значения.
Докладчик обсуждает важность правильной очистки данных, а не полагаться исключительно на алгоритмы для выполнения этой работы. Они демонстрируют, как удаление пустых значений может повысить точность модели, и предостерегают от алгоритмов, обрабатывающих пустые значения. Концепция травления, предполагающая сохранение обученных моделей на диск для последующего использования, представлена с помощью библиотеки pickle в Python. Спикер демонстрирует, как сохранять и загружать модели. Они также показывают, как построить график важности каждого атрибута в наборе данных, используя функцию важности графика в XGBoost и библиотеку matplotlib.
Докладчик обсуждает важность анализа и тестирования различных сценариев при построении моделей машинного обучения, подчеркивая, что оценки важности функций от XGBoost могут не всегда отражать фактическое влияние функции на точность модели. Они используют пример набора данных «Титаник», чтобы продемонстрировать, как добавление атрибута «пол» повышает точность модели, несмотря на то, что они занимают низкие оценки важности признаков. Докладчик подчеркивает важность тестирования различных сценариев, а не только полагаться на оценки важности функций. Они также упоминают, что XGBoost может оценивать и сообщать о производительности набора тестов во время обучения.
В видео объясняется, как контролировать производительность модели XGBoost во время обучения, указав метрику оценки и передав массив пар x и y. Производительность модели на каждом оценочном наборе сохраняется и становится доступной после обучения. Видео охватывает кривые обучения, которые дают представление о поведении модели и помогают предотвратить переоснащение, прекращая обучение на ранней стадии. Ранняя остановка вводится как метод остановки обучения после фиксированного количества эпох, если не наблюдается улучшения в оценке проверки.
В видео рассказывается об использовании раундов ранней остановки в XGBoost и демонстрируется построение регрессионной модели для оценки цен на жилье в Бостоне. Обсуждаются преимущества параллелизма в повышении градиента с акцентом на построение отдельных деревьев и эффективную подготовку входных данных. Видео демонстрирует поддержку многопоточности, которая использует все ядра системы для одновременного выполнения вычислений, что приводит к более быстрому выполнению программы. Хотя XGBoost в первую очередь ориентирован на проблемы классификации, в видео подчеркивается его способность преуспеть и в построении регрессионных моделей.
Спикер создает список для хранения количества итераций для примера и использует цикл for для проверки скорости выполнения модели на основе количества потоков. Они печатают скорость сборки для каждой итерации и отображают результаты, показывая, как скорость модели уменьшается по мере увеличения количества потоков. Затем докладчик обсуждает настройку гиперпараметров, которая включает настройку параметров модели для повышения ее производительности. Они исследуют параметры по умолчанию для XGBoost и scikit-learn и отмечают, что настройка гиперпараметров необходима для оптимизации производительности модели XGBoost. В видео объясняется, что гиперпараметры — это настройки, которые не извлекаются из данных, а задаются пользователем вручную. Настройка гиперпараметров включает в себя систематический поиск наилучшей комбинации значений параметров, обеспечивающих максимальную производительность модели.
Для выполнения настройки гиперпараметров в видео представлены два распространенных подхода: поиск по сетке и случайный поиск. Поиск по сетке включает в себя определение сетки значений гиперпараметров и исчерпывающую оценку каждой комбинации. Случайный поиск, с другой стороны, случайным образом выбирает комбинации гиперпараметров из предопределенного пространства поиска. В видео рекомендуется использовать случайный поиск, когда пространство поиска велико или количество гиперпараметров велико.
Видео демонстрирует настройку гиперпараметров с использованием класса RandomizedSearchCV из scikit-learn. Они определяют сетку параметров, содержащую различные значения гиперпараметров, таких как скорость обучения, максимальная глубина и коэффициент подвыборки. Класс RandomizedSearchCV выполняет случайный поиск с перекрестной проверкой, оценивая производительность каждой комбинации параметров. После настройки выбираются лучшие гиперпараметры, и модель обучается с этими оптимальными значениями.
Докладчик объясняет, что настройка гиперпараметров помогает найти наилучший компромисс между недообучением и переоснащением. Важно соблюдать баланс и избегать переобучения, тщательно выбирая гиперпараметры на основе конкретного набора данных и решаемой проблемы.
Помимо настройки гиперпараметров, в видео обсуждается важность функций в моделях XGBoost. Важность функций дает представление о том, какие функции оказывают наиболее значительное влияние на прогнозы модели. Докладчик объясняет, что важность функции определяется средним выигрышем, который измеряет улучшение функции потерь, вызванное функцией, когда она используется в дереве решений. Более высокий средний прирост указывает на более высокую важность.
Видео демонстрирует, как извлекать и визуализировать важность функций с помощью библиотеки XGBoost. Они строят гистограмму, показывающую основные функции и соответствующие им оценки важности. Докладчик отмечает, что важность функций может помочь в выборе функций, уменьшении размерности и понимании основной проблемы.
Ближе к концу видео спикер кратко упоминает другие сложные темы, связанные с XGBoost. Они касаются обработки несбалансированных наборов данных путем настройки гиперпараметра scale_pos_weight, обработки отсутствующих значений с использованием встроенной возможности XGBoost и обработки категориальных переменных с помощью горячего кодирования или использования встроенной поддержки категориальных функций в XGBoost.
В видео представлен всесторонний обзор XGBoost, включая его ключевые концепции, реализацию, настройку гиперпараметров и анализ важности функций. Демонстрации и примеры кода помогают проиллюстрировать практические аспекты работы с XGBoost в Python. Он служит ценным ресурсом для инженеров по машинному обучению, которые хотят использовать XGBoost для своих задач классификации и регрессии.
Пример разработки функций в Python для инженеров по машинному обучению
Пример разработки функций в Python для инженеров по машинному обучению
Преподаватель начинает курс с представления концепции разработки признаков и ее решающей роли в извлечении ценности из огромного количества данных, генерируемых каждый день. Они подчеркивают важность разработки функций для максимизации ценности, извлеченной из беспорядочных данных. Предполагается, что учащиеся обладают базовыми знаниями Python, а также опытом использования NumPy, Pandas и Scikit-Learn.
Преподаватель подчеркивает важность исследовательского анализа данных и очистки данных в процессе построения модели машинного обучения. Они объясняют, что эти этапы будут в центре внимания курса. Хотя учащиеся пройдут весь конвейер в последней главе, основное внимание будет уделено разработке функций.
Преподаватель подчеркивает, что разработка признаков необходима для повышения производительности модели. Они объясняют, что разработка признаков включает преобразование необработанных данных в признаки, которые лучше представляют базовый сигнал для моделей машинного обучения. Качество функций напрямую влияет на производительность модели, поскольку хорошие функции могут сделать даже простые модели мощными. Преподаватель советует руководствоваться здравым смыслом при выборе функций, убирая ненужные и включая факторы, имеющие отношение к анализируемой проблеме.
В видео показаны различные приемы очистки и инженерные особенности. Выбросы удаляются, данные нормализуются и преобразуются для устранения асимметрии, функции объединяются для создания более полезных, а категориальные переменные создаются из непрерывных. Эти методы направлены на получение функций, которые точно фиксируют важные тенденции в данных, отбрасывая ненужную информацию. В качестве примера представлен набор данных «Титаник», содержащий информацию о пассажирах на борту корабля.
Преподаватель обсуждает проблему дисбаланса классов в машинном обучении, когда положительных случаев значительно меньше, чем отрицательных. Они предлагают настроить модель для лучшего обнаружения сигнала в обоих случаях, например, путем понижения дискретизации отрицательного класса. Однако, поскольку набор данных, используемый в примере, не сильно несбалансирован, инструктор переходит к изучению функций данных. Базовый исследовательский анализ данных проводится по непрерывным функциям, а нечисловые функции, такие как имя, билет, пол, каюта и посадка, отбрасываются. Отображается очищенный набор данных, и исследуются распределение и корреляция признаков. Обнаружено, что функции «p-класс» и «плата за проезд» демонстрируют самую сильную корреляцию со столбцом выживания, что указывает на их потенциальную полезность при прогнозировании.
Дальнейший анализ разведочных данных проводится по непрерывным признакам. Нечисловые функции, такие как имя и билет, удаляются, и печатаются первые пять строк набора данных. Данные описываются с помощью функций pandas, выявляющих пропущенные значения и бинарную целевую переменную под названием «Survived». Матрица корреляции анализируется для определения корреляций между признаками и их связи с «выжившим». Подчеркивается важность рассмотрения полного распределения данных, поскольку опора исключительно на средние или медианные значения может привести к неточным выводам. Графики и визуализации используются для изучения взаимосвязи между категориальными признаками и коэффициентом выживаемости, выявляя такие тенденции, как более высокий коэффициент выживаемости среди пассажиров первого класса и тех, у кого меньше членов семьи.
Преподаватель подчеркивает важность разработки функций и советует не слишком сокращать функции без надлежащего тестирования. Они обсуждают процесс изучения и проектирования категориальных функций, включая определение отсутствующих значений и количество уникальных значений в каждой функции. Группировка объектов и анализ среднего значения целевой переменной в каждой группе предлагается в качестве полезного подхода для лучшего понимания набора данных. Исследована взаимосвязь между отсутствующей функцией кабины и коэффициентом выживаемости, что привело к открытию сильного индикатора коэффициента выживаемости, несмотря на кажущуюся низкую ценность этой функции.
Изучение функций показывает, что титулы, индикаторы кабины и пол имеют сильную корреляцию с выживанием, в то время как добавленная функция является избыточной. Взаимосвязь между каютой и коэффициентом выживаемости объясняется наблюдением, что у большего количества людей, которые сели в Шербуре, были каюты, что привело к более высокому коэффициенту выживаемости. Количество ближайших членов семьи на борту объединено в одну характеристику, и из-за их соотношения предлагается либо пассажирский класс, либо тариф.
Преподаватель объясняет, что следующим шагом будет проектирование функций на основе информации, полученной в результате исследовательского анализа данных. Они начинают с создания новой функции под названием «Заголовок» из функции «Имя». Функция «Заголовок» извлекает титул из имени каждого пассажира (например, «мистер», «миссис», «мисс»), поскольку он может предоставить дополнительную информацию, связанную с социальным статусом и выживаемостью. Затем функция «Заголовок» для простоты сопоставляется с числовыми значениями.
Далее инструктор фокусируется на функции «Кабина», в которой изначально было много пропущенных значений. Однако путем анализа выживаемости пассажиров с информацией о салоне и без нее было обнаружено, что наличие записанного номера салона имело более высокий коэффициент выживаемости. На основе этого понимания создается новая двоичная функция под названием «HasCabin», которая указывает, есть ли у пассажира зарегистрированная кабина или нет.
Далее инструктор занимается функцией «Секс». Поскольку модели машинного обучения обычно лучше работают с числовыми данными, функция «Пол» сопоставляется с двоичными значениями, где 0 представляет мужчину, а 1 — женщину.
После разработки функции «Секс» инструктор обращается к функции «Посадка», которая указывает порт посадки (C = Шербур, Q = Квинстаун, S = Саутгемптон). Однако ранее было определено, что функция «Посадка» является избыточной и не вносит существенного вклада в прогноз выживания. Поэтому он удаляется из набора данных.
Затем инструктор сосредотачивается на характеристиках «Pclass» и «Fare», которые продемонстрировали сильную корреляцию с выживаемостью во время исследовательского анализа данных. Эти функции оставлены как есть, поскольку они уже имеют формат, подходящий для модели машинного обучения.
На этом этапе инструктор подчеркивает важность предварительной обработки данных и подготовки функций для модели. Набор данных разделен на наборы для обучения и тестирования, чтобы точно оценить производительность модели. Отсутствующие значения в функции «Возраст» вводятся с использованием медианного возраста пассажиров, и все функции стандартизированы, чтобы иметь нулевое среднее значение и единичную дисперсию с использованием функций предварительной обработки Scikit-Learn.
Наконец, инструктор кратко обсуждает концепцию быстрого кодирования для категориальных функций и упоминает, что более подробно она будет рассмотрена в следующем видео. Горячее кодирование — это распространенный метод, используемый для представления категориальных переменных в виде двоичных векторов, что позволяет модели правильно интерпретировать их.
Подводя итог, можно сказать, что в этой части курса преподаватель представил концепцию разработки признаков и объяснил ее значение в машинном обучении. Они провели исследовательский анализ данных, очистили набор данных и разработали функции на основе полученных сведений. Преподаватель продемонстрировал, как создавать новые функции, сопоставлять категориальные функции с числовыми значениями и удалять избыточные функции. Следующие шаги включали предварительную обработку данных и подготовку функций для модели машинного обучения.
Обратите внимание, что приведенное выше резюме является гипотетическим продолжением, основанным на общих темах, обычно рассматриваемых в курсе разработки функций. Фактическое содержание и примеры могут различаться в зависимости от конкретного курса и преподавателя.