График овуляции построить


Шаг за шагом: как создать свой график БТ - Базальная температура

Исходные данные

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

Пояснения к форме настроек:

  • Начало планирования - Когда Вы начали планировать беременность? Вы можете задать в поле Начало планирования дату, когда Вы перестали предохраняться. Эта информация поможет в последствии корректно анализировать Ваш график участниками сайта. 
  • Время пробуждения - это очень важная информация для программы, которая будет влиять на весь Ваш график. Здесь Вам нужно задать Ваше обычное время пробуждения. Дело в том, что базальная температура должна измеряться строго в одно и то же время. Если Вы спали дольше, чем обычно или встали раньше обычного, то Ваша базальная температура будет скорей всего непоказательна. Программа сверяет время заданное здесь со временем измерения, которое Вы будете задавать в своем дневнике. Если в какой-то из дней цикла время измерения на более чем полчаса будет отличаться от обычного, то программа не будет учитывать такую температуру.
  • Средняя длина цикла - как долго обычно длится Ваш цикл? Сколько дней проходит от первого дня менструации до начала следующей менструации? Эта информация нужна для того, чтобы правильно рассчитать дни предполагаемой овуляции и дни задержки.

Данные, которые Вы задаете в этой форме, Вы можете в последствии изменить, так что, если пока что-то неясно, то заполняйте наугад. Нажмите на кнопку Сохранить настройки под формой и Вы автоматически попадете в свой дневник БТ.

Создание первого цикла

После заполнения настроек вы видите ваш дневник БТ. Для того, чтобы создать первый цикл:

  1. Выберите дату начала вашего текущего цикла в поле Дата. Для этого нажмите на кнопку Другая дата и задайте ее или выберите дату в выпадающем календаре (стрелочка вниз рядом с датой). Нажмите на Перейти. 
  2. В поле Менструация выберите да.
  3. Нажмите на Сохранить.

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

Дневник БТ

Итак, Вы уже прошли большую часть пути. Посмотрите как устроен Ваш дневник.

Его можно поделить на две основных части:

  1. Ввод данных - здесь Вы будете заносить Ваши данные день за днем, из которых будет строиться Ваш график.
  2. График базальной температуры будет выстраиваться автоматически на основании данных занесенных Вами в форму рядом с ним.

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

На Вашем первом графике Вы видите желтую полоску, охватывающую три дня. Это - предполагаемая дата овуляции, самое благоприятное время для зачатия, рассчитанное программой на основании заданной Вами средней длины цикла. Это время рассчитывается по формуле: длина цикла - 14 дней (+/- 1 день). С каждым циклом и по мере накопления Ваших данных прогноз программы становится все более точным. Предполагаемая дата овуляции будет вычисляться на основе данных из Ваших предыдущих циклов, а средняя длина цикла будет рассчитываться автоматически. Розовая полоска на графике в конце цикла означает предполагаемую дату следующей менструации. Дни после этой даты считаются днями задержки.

Форма ввода данных

Давайте теперь рассмотрим форму ввода данных подробней.

  • Дата. Если Вы не выбрали определенную дату, то здесь Вы видите сегодняшнюю дату. Все данные, которые Вы внесете в форму будут сохранены для этой даты. Если Вы выберите другой день в этом поле, то дата изменится и Вы сможете внести данные для выбранного дня. Над графиком и формой ввода данных вы видите день цикла, который рассчитывается на основании выбранной даты в календаре и даты начала цикла. На примере изображения, дата для ввода данных 4 ноября, начало цикла 1 ноября, следовательно 4 ноября у Вас 4 день цикла.
  • Время измерения проставляется автоматически - это то время, которое Вы задали под настройками БТ. Если в этот день Вы замеряли температуру в другое время, то задайте это время в форме.
  • Не учитывать - Вы можете поставить здесь галочку, если Вы не соблюдали правила измерения базальной температуры в этот день. Также, если время измерения в этот день на более чем полчаса отличается от обычного измерения, то программа отметит этот пункт автоматически после сохранения данных.
  • Базальная температура - здесь Вы записываете Ваши температурные значения. На основании температур, заданных в цикле, программа будет пытаться вычислить овуляцию.
  • Овуляция по УЗИ - отметьте этот пункт, если в этот день овуляция была подтверждена врачом с помощью УЗИ и вы не хотите, чтобы программа пыталась вычислить день овуляции по нашему алгоритму. Если вы не поставите здесь галочку, то возможно, что программа сама рассчитает этот день, как день овуляции.
  • Менструация - если Вы в начале цикла и у Вас идет менструальное кровотечение, то выберите да. Выделения - это что-то пограничное, как часто бывает, что вроде уже менструация закончилась, но еще есть выделения. Или наоборот, менструация еще не началась, но уже есть выделения. При выборе "да" в поле Менструация программа попытается создать новый цикл, если это имеет смысл.
  • Половой акт - если в этот день у Вас был половой акт, то Вы можете отметить это, для того, чтобы впоследствии, когда будет рассчитана овуляция увидеть, насколько удачно по времени было половое сношение. Это поле также учитывается при расчете вероятности зачатия.
  • Тест на беременность - если Вы сделали тест на беременность, Вы можете отметить здесь результат тестирования. Помните, что тесты на беременность стоит использовать только после задержки, т. е. не ранее чем в первый день после дня отмеченного в Вашем графике розовой линией. Тесты, сделанные до задержки часто дают ложноотрицательные результаты. Экономьте деньги и нервы.
  • Наблюдения - в этом поле Вы можете задать Ваши общие ощущения или отметить, если были какие-то отклонения в измерении.

Вот и все. После заполнения формы нажмите на кнопку Сохранить. Ваш график автоматически изменится. День за днем, на Вашем графике будет рисоваться Ваша температурная кривая и отмечаться данные, которые Вы задали в Вашем дневнике. На примере внизу Вы видите, где на графике показываются, заданные Вами данные в дневнике.

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

Дополнительные поля и настройки БТ

Для вашего удобства в нашей программе можно добавлять или убирать поля из дневника БТ, чтобы не "засорять" его вид. Под вкладкой Настройки БТ, вы можете выбрать, какие поля вам нужны, а также, что вы хотите видеть на графике или под графиком.

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

Нам остается только пожелать Вам скорой удачи и скорейшей беременности!

Введение в графические нейронные сети | by Joao Schapke

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

Прогнозирование узла - это задача прогнозирования значения или метки для узлы в одном или нескольких графах. Ex. прогнозирование тематики статьи в сети цитирования.

Эти задачи можно решить, просто применив описанную выше свертку. Большинство тестов находятся в режиме полу-контроля, где наборы данных состоят из одного графа с некоторыми метками узлов, предназначенными для обучения / проверки, а другие - для тестирования.

Прогнозирование графика , прогнозирование значения или метки для графика. напр. прогнозирование токсичности конкретной молекулы.

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

Операция считывания может быть просто взятием среднего / среднего / максимального количества пулов по всем узлам.

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

Их можно решить с помощью графических автоэнкодеров .

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

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

Больше примеров задач (а также тестов и статей) можно найти здесь.

Далее мы исследуем несколько расширений сетей свертки графов и GNN.

Created by starline

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

Данные пространственно-временного графика представлены в виде нескольких графиков, каждый из которых представляет временные шаги, причем графики могут иметь разные размеры.

Существует два основных подхода к работе с упорядоченными графами, применяя RNN или CNN .

Решения RNN обычно применяют свертки графов для агрегирования информации уровня узлов и применяют RNN для агрегирования информации временного уровня.

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

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

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

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

Пример.

Рассмотрим изображение ниже в задаче прогнозирования потока трафика.

Из Сюй Гэн и Ягуан Ли .

Изображение содержит несколько точек интереса (POI), поток трафика которых следует прогнозировать. Эта задача хорошо подходит для пространственно-временных сетей GNN, поскольку дороги имеют естественную графическую структуру, и вся региональная информация (например, наличие ближайшей школы или парка) может быть встроена в граф. Задача также связана со временем, транспортный поток будет меняться в зависимости от часа дня или дня недели.

Естественно, мы видим, что существует важная локальная корреляция с прогнозом, поток трафика зависит от близлежащих объектов вокруг него. И мы также замечаем нелокальную, контекстную корреляцию. В частности, мы можем предположить, что у POI 1 и 3 будут сильно коррелированные транспортные потоки, поскольку обе точки расположены в школе, рядом с которой находится больница и парк развлечений. Возможность идентифицировать такую ​​контекстную корреляцию должна улучшить обобщение модели. Решение, предложенное Xu Geng и Yaguang Li , заключалось в том, чтобы измерить сходство между интересными точками, и если они очень похожи, информация будет принята во внимание:

'As' - это матрица N x N, которая служит цель, аналогичная назначению матрицы смежности, как в уравнении для GCN выше.

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

Подходы на основе внимания.

Еще одним большим источником вдохновения для новых исследований была разработка механизмов внимания и моделей полного непрерывного внимания, которые позволили достичь нового уровня техники в широком диапазоне тестов в НЛП.

Методы внимания были успешно применены ко многим сверточным сетям графов, таким как GAT и GAAN.В отличие от стандартных сверточных сетей графов, таких как GCN, которые при выполнении свертки присваивают одинаковые веса всем соседним узлам, GAT вводит механизм внимания, который присваивает разные веса соседям узла.

Интересно, что исходная модель Transformer в NLP также была адаптирована для работы с графическими данными, поэтому неудивительно, что модель получила название Graph Transformer.

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

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

Как и все остальные области машинного обучения, графические нейронные сети являются быстрорастущей и быстро развивающейся областью.

Но, в отличие от многих других, большинство проблем в GNN не имеют хорошо зарекомендовавшего себя решения или превосходной модельной архитектуры, которая служила бы средством решения Plug and Play. Проблемы в области графа определенно требуют вертикального мышления, и широкий спектр решений может дать превосходные результаты в зависимости от проблемы и данных. Один пример из соревнования kaggle с задачей предсказания силы взаимодействия между атомами в конкретной связи молекулы, первое решение решало проблему с сквозным преобразователем графов, а второе-четвертое решения создавали вручную последовательности с помощью графики и использовались стандартные преобразователи NLP, другие подходы использовали более общие нейронные сети свертки графов, такие как GAT и GCN, или использовали GNN, созданные специально для работы с данными поля, такие как SchNet.Это показывает неоднородность подходов в данной области.

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

GNN - это интересная область, которую я изучал последние пару месяцев. Я ни в коем случае не являюсь в ней экспертом. Если вы заметили какие-то ошибки, обязательно оставьте комментарий.

Ссылки:

Комплексное исследование графических нейронных сетей - Zonghan Wu

Глубокое обучение на графах: обзор - Цзывэй Чжан

Графические нейронные сети: обзор методов и приложений - Цзе Чжоу, Ганку Цуй, Чжэнъян Чжан

.

практических графических нейронных сетей с PyTorch и PyTorch Geometric | Автор: Kung-Hsiang, Huang (Steeve)

Без сомнения, учитывая преимущество в скорости и удобстве, PyG является одной из самых популярных и широко используемых библиотек GNN. Давайте погрузимся в тему и запачкаем руки!

  • PyTorch - 1.1.0
  • PyTorch Geometric - 1.2.0

В этом разделе вы познакомитесь с основами PyG. По сути, он будет охватывать torch_geometric.data и torch_geometric.№ . Вы узнаете, как передавать геометрические данные в вашу GNN и как создать собственный слой MessagePassing, являющийся ядром GNN.

Данные

Модуль torch_geometric.data содержит класс данных, который позволяет очень легко создавать графики из ваших данных. Вам нужно только указать:

  1. атрибуты / функции, связанные с каждым узлом
  2. связность / смежность каждого узла (граничный индекс)

Давайте использовать следующий график, чтобы продемонстрировать, как создать объект данных

Пример графика

Итак, в графе есть 4 узла, v1… v4, каждый из которых связан с двумерным вектором признаков, и метка y , указывающая его класс.Эти два могут быть представлены как FloatTensors:

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

Обратите внимание, что порядок индекса края не имеет отношения к создаваемому вами объекту данных, поскольку такая информация предназначена только для вычисления матрицы смежности. Следовательно, указанный выше edge_index выражает ту же информацию, что и следующий.

Собрав их вместе, мы можем создать объект Data, как показано ниже:

Dataset

Процедура создания набора данных не очень проста, но может показаться знакомой тем, кто использовал torchvision , поскольку PyG следует за ней. конвенция. PyG предоставляет два разных типа классов наборов данных: InMemoryDataset и Dataset. Как они буквально указывают, первый предназначен для данных, которые помещаются в вашей оперативной памяти, а второй - для данных гораздо большего размера. Поскольку их реализации очень похожи, я буду рассматривать только InMemoryDataset.

Для создания объекта InMemoryDataset необходимо реализовать 4 функции:

Он возвращает список, который показывает список необработанных, необработанных имен файлов. Если у вас есть только файл, то возвращаемый список должен содержать только 1 элемент. Фактически, вы можете просто вернуть пустой список и указать свой файл позже в process () .

Подобно последней функции, она также возвращает список, содержащий имена файлов всех обработанных данных. После вызова process () обычно возвращаемый список должен содержать только один элемент, в котором хранится единственное имя файла обработанных данных.

Эта функция должна загружать данные, с которыми вы работаете, в каталог, указанный в self.raw_dir. Если вам не нужно загружать данные, просто введите

 и введите 

в функцию.

Это самый важный метод набора данных. Вам необходимо собрать свои данные в список объектов данных. Затем вызовите self.collate () , чтобы вычислить срезы, которые будут использоваться объектом DataLoader. Ниже показан пример настраиваемого набора данных с официального сайта PyG.

Позже в этой статье я покажу вам, как создать собственный набор данных из данных, предоставленных в RecSys Challenge 2015.

DataLoader

Класс DataLoader позволяет без труда загружать данные в модель в виде партии. Чтобы создать объект DataLoader, вы просто указываете набор данных и желаемый размер пакета.

 loader = DataLoader (dataset, batch_size = 512, shuffle = True) 

Каждая итерация объекта DataLoader дает объект Batch, который очень похож на объект Data, но с атрибутом «batch».Он указывает, с каким графом связан каждый узел. Поскольку DataLoader объединяет x , y и edge_index из разных выборок / графиков в пакеты, модели GNN требуется эта «пакетная» информация, чтобы знать, какие узлы принадлежат одному и тому же графу в пакете для выполнения вычислений.

  для партии   в загрузчике : партия 

>>> Пакет (x = [1024, 21], edge_index = [2, 1568], y = [512], пакет = [1024])

MessagePassing

Передача сообщений - это суть GNN, которая описывает, как изучаются вложения узлов.Я говорил об этом в своем последнем посте, поэтому я просто кратко расскажу об этом, используя термины, соответствующие документации PyG.

Передача сообщения

x обозначает встраивание узла, e обозначает граничные функции, 𝜙 обозначает функцию сообщения , □ обозначает функцию агрегирования , 𝛾 обозначает функцию обновления . Если рёбра в графе не имеют других свойств, кроме связности, e, по сути, является индексом рёбер графа. Верхний индекс представляет индекс слоя.Когда k = 1, x представляет входную характеристику каждого узла. Ниже я проиллюстрирую, как работает каждая функция:

  • распространять (edge_index, size = None, ** kwargs):

Он принимает индекс края и другую дополнительную информацию, такую ​​как особенности узла (встраивание). Вызов этой функции, следовательно, вызовет сообщение и обновление .

Вы определяете, как вы создаете «сообщение» для каждой пары узлов (x_i, x_j). Поскольку он следует за вызовами распространить , он может принимать любой аргумент, передаваемый в распространять .Следует отметить, что вы можете определить отображение аргументов в конкретные узлы с помощью «_i» и «_j». Следовательно, вы должны быть очень осторожны при именовании аргумента этой функции.

  • update (aggr_out, ** kwargs)

Он принимает агрегированное сообщение, а другие аргументы, переданные в , распространяют , присваивая новое значение внедрения для каждого узла.

Пример

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

https://arxiv.org/abs/1706.02216

Здесь мы используем максимальный пул в качестве метода агрегирования. Следовательно, правая часть первой строки может быть записана как:

https://arxiv.org/abs/1706.02216

, что показывает, как построено «сообщение». Вложение каждого соседнего узла умножается на матрицу весов, добавляется смещение и передается через функцию активации. Это легко сделать с помощью torch.nn.Linear.

 класс SAGEConv (MessagePassing): 
def __init __ (self, in_channels, out_channels):
super (SAGEConv, self).__init __ (aggr = 'max')
self.lin = torch.nn.Linear (in_channels, out_channels)
self.act = torch.nn.ReLU ()

def message (self, x_j):
# x_j имеет форму [ E, in_channels]

x_j = self.lin (x_j)
x_j = self.act (x_j)

return x_j

Что касается части обновления, агрегированное сообщение и встраивание текущего узла агрегируются. Затем он умножается на другую матрицу весов и применяется другая функция активации.

 класс SAGEConv (MessagePassing): 
def __init __ (self, in_channels, out_channels):
super (SAGEConv, self).__init __ (aggr = 'max')
self.update_lin = torch.nn.Linear (in_channels + out_channels, in_channels, bias = False)
self.update_act = torch.nn.ReLU ()

def update (self, aggr_out, x ):
# aggr_out имеет форму [N, out_channels]

new_embedding = torch.cat ([aggr_out, x], dim = 1)
new_embedding = self.update_lin (new_embedding)
new_embedding = torch.update_act (new_embedding)

) return new_embedding

Собирая все вместе, мы получаем следующий слой SageConv.

RecSys Challenge 2015 предлагает специалистам по обработке данных создать систему рекомендаций на основе сеансов. Участникам этого задания предлагается решить две задачи:

  1. Предсказать, будет ли событие покупки, за которым следует последовательность кликов
  2. Предсказать, какой товар будет куплен

Сначала мы загружаем данные с официального сайта RecSys Challenge 2015 и создайте набор данных. Начнем с первого задания, так как это проще.

Задача предоставляет два основных набора данных, yoochoose-clicks.dat и yoochoose-buys.dat , содержащие события щелчка и события покупки соответственно. Давайте быстро просмотрим данные:

yoochoose-click.datyoochoose-buys.dat

Предварительная обработка

После загрузки данных мы предварительно обрабатываем их, чтобы их можно было передать в нашу модель. item_ids категориально закодированы, чтобы гарантировать, что закодированные item_ids, которые позже будут отображены в матрицу внедрения, начинаются с 0.

Поскольку данные довольно большие, мы выполняем субдискретизацию для упрощения демонстрации.

Число уникальных элементов в подвыборке данных

Чтобы определить основную истину, то есть есть ли какое-либо событие покупки для данного сеанса, мы просто проверяем, присутствует ли session_id в yoochoose-clicks.dat в yoochoose-buys.dat тоже.

Построение набора данных

Данные готовы к преобразованию в объект набора данных после этапа предварительной обработки. Здесь мы рассматриваем каждый элемент в сеансе как узел, и поэтому все элементы в одном сеансе образуют граф.Чтобы построить набор данных, мы группируем предварительно обработанные данные по session_id и перебираем эти группы. На каждой итерации item_id в каждой группе снова категорично кодируется, поскольку для каждого графа индекс узла должен отсчитываться от 0. Таким образом, мы имеем следующее:

После построения набора данных мы вызываем shuffle () , чтобы убедиться, что он был случайным образом перемешан, а затем разделен на три набора для обучения, проверки и тестирования.

Построение графической нейронной сети

Следующая настраиваемая GNN использует ссылку из одного из примеров в официальном репозитории PyG на Github.Я изменил слой GraphConv на наш самореализованный слой SAGEConv, показанный выше. Кроме того, выходной слой также был изменен в соответствии с настройкой двоичной классификации.

Обучение

Обучение нашей пользовательской GNN очень просто, мы просто повторяем DataLoader, созданный из обучающего набора, и распространяем обратно функцию потерь. Здесь мы используем Адама в качестве оптимизатора со скоростью обучения, установленной на 0,005, и двоичной кросс-энтропией в качестве функции потерь.

Проверка

Эта метка сильно несбалансирована с подавляющим количеством отрицательных меток, поскольку за большинством сессий не следует никаких событий покупки.Другими словами, глупая модель, предполагающая все негативы, даст вам точность более 90%. Таким образом, вместо точности показатель «Площадь под кривой» (AUC) является лучшим показателем для этой задачи, поскольку он заботится только о том, имеют ли положительные примеры более высокую оценку, чем отрицательные. Мы используем стандартную функцию расчета AUC от Sklearn.

Результат

Я обучил модель в течение 1 эпохи и измерил оценки AUC обучения, проверки и тестирования:

Имея всего 1 миллион строк обучающих данных (около 10% всех данных) и 1 эпоху обучения, мы может получить оценку AUC около 0.73 для валидации и тестового набора. Оценка, скорее всего, улучшится, если для обучения модели будет использоваться больше данных с большими шагами обучения.

Заключение

Вы изучили основы использования PyTorch Geometric, включая построение набора данных, настраиваемый слой графа и обучение GNN с реальными данными. Весь код в этом посте также можно найти в моем репозитории Github, где вы можете найти еще один файл записной книжки Jupyter, в котором я решаю вторую задачу RecSys Challenge 2015. Надеюсь, вам понравилась эта статья.Если у вас есть вопросы или комментарии, оставьте их ниже! Не забудьте подписаться на меня в твиттере, где я делюсь своим сообщением в блоге или интересными новостями машинного обучения / глубокого обучения! Удачи, играя в GNN с PyG!

.

Справка в Интернете - Программирование LabTalk

Создание графиков

Построить график Создать график Создание графиков, вероятно, является наиболее часто выполняемой операцией в Origin. Для этого Origin предоставляет набор функций X-Function и LabTalk. Вы можете найти все X-функции, используемые для построения графиков, в категории Plotting и можете перечислить их, введя следующую команду:

 люкс cat: = "черчение"; 

Некоторые X-функции являются общими инструментами для построения графика на основе определенных видов данных, например plotxy для построения графиков на основе данных диапазона XY и plotm для построения графика на основе данных матрицы.Некоторые из них используются для построения графика особого типа, например plotgboxraw для построения сгруппированной прямоугольной диаграммы на основе необработанных данных и plotpiper для создания piper plot. Пожалуйста, обратитесь к разделу построения категорий для получения подробной информации по каждой X-функции.

В следующих разделах приведены примеры двух X-функций, которые позволяют создавать графики непосредственно из скриптов LabTalk: plotxy и plotgroup . После создания графика вы можете использовать свойства объекта, такие как страница, слой, объекты оси, и задать командный формат графика.

Создание графика с помощью PLOTXY X-Function

plotxy - X-функция, используемая для черчения общего назначения. Он используется для создания нового окна графика, построения графика в шаблоне графика или построения нового графического слоя. Он имеет синтаксис, общий для всех X-функций:

plotxy option1: = optionValue option2: = optionValue ... option N : = optionValue

Все возможные опции и значения приведены в справке X-Function для plotxy .Поскольку это несколько неинтуитивно, вариант plot и его наиболее распространенные значения суммированы здесь:

участок: = Тип участка
200 линия
201 Разброс
202 Линия + символ
203 столбец

Все возможные значения для опции plot можно найти в идентификаторах типа графика.

Построение графика X Y

Ввод XYRange со ссылкой на X и Y

В следующем примере показаны первые два столбца данных на активном листе, где первый столбец будет отображаться как X, а второй столбец как Y в виде линейного графика.

 plotxy iy: = (1,2) plot: = 200; 
Входной диапазон XYRange, ссылающийся только на Y

В следующем примере второй столбец данных на активном листе отображается в виде Y против связанного с ним X в виде линейного графика.Если вы не укажете X явно, Origin будет использовать столбец X, связанный с этим столбцом Y на листе, или, если связанный столбец X отсутствует, будет использоваться X. По умолчанию X - номер строки.

 plotxy iy: = 2 plot: = 200; 

Построение графика X YY

В следующем примере показаны первые три столбца данных из Book1, Sheet1, где первый столбец будет отображаться как X, а второй и третий столбцы как Y, как сгруппированная диаграмма рассеяния.

 plotxy iy: = [Book1] Sheet1! (1,2: 3) plot: = 201; 

Построение графика XY XY

В следующем примере показаны первые четыре столбца данных на активном листе, где первый столбец будет отображаться как X против второго столбца как Y, а третий столбец как X против четвертого столбца как Y, как сгруппированная линия + символ сюжет.

 plotxy iy: = ((1,2), (3,4)) plot: = 202; 

Построение графиков с использованием обозначений столбцов на листе

В следующем примере отображаются все столбцы на активном листе с использованием обозначений столбцов рабочего листа в качестве столбцов.'?' указывает на использование обозначений рабочего листа; «1: конец» указывает на то, что нужно построить все столбцы.

 plotxy iy: = (?, 1: end) plot: = 203; 

Построение подмножества столбца

В следующем примере строки 1–12 всех столбцов на активном листе отображаются в виде сгруппированного линейного графика.

 plotxy iy: = (1,2: end) [1:12] plot: = 200; 

Примечание. Дополнительные сведения о подмножестве см. В разделе «Указание поддиапазона с использованием значений X».

Построение графика в шаблоне

В следующем примере первый столбец отображается как тета (X), а второй столбец как r (Y) на активном листе в шаблоне графика полярной диаграммы , а окно графика называется MyPolarGraph .

 plotxy (1,2) plot: = 192 ogl: = [<новый шаблон: = полярное имя: = MyPolarGraph>]; 

Нанесение на существующий слой графа

В следующем примере столбцы 10–20 активного рабочего листа с помощью обозначений столбцов отображаются на втором уровне Graph2. Все эти столбцы могут быть столбцами Y, и они по-прежнему будут отображаться относительно связанного столбца X на листе.

 plotxy iy: = (?, 10:20) ogl: = [Graph2] 2 !; 

Создание нового графического слоя Create LayerGraph Layer

В следующем примере к активному окну графика добавляется новый слой Bottom-X Left-Y, отображающий первый столбец как X, а третий столбец как Y из Book1, Sheet2 в виде линейного графика.Когда окно графика активно и выходной слой графика не указан, создается новый слой.

 plotxy iy: = [Book1] Sheet2! (1,3) plot: = 200; 

Создание графика с двойной Y График с двойной Y

 // Импортировать файл данных строка fpath $ = "Samples \ Import and Export \ S15-125-03.dat"; строка fname $ = system.path.program $ + fpath $; impASC; // Запоминаем имена книг и листов строка bkname $ = page.name $; строка shname $ = layer.name $; // Построим первый и второй столбцы как X и Y // Рабочий лист активен, поэтому можно просто указать диапазон столбцов plotxy iy: = (1,2) plot: = 202 ogl: = [<новый шаблон: = doubleY>]; // Наносим первый и третий столбцы как X и Y на второй слой // Теперь, когда окно графика является активным окном, необходимо указать Book // и Лист plotxy iy: = [bkname $] shname $! (1,3) plot: = 202 ogl: = 2; 

Создание групп графиков с помощью PLOTGROUP X-FunctionGraph Groups

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

В этом примере показано, как построить график по группам.

 // Установить путь к образцу данных fn $ = system.path.program $ + "Samples \ Statistics \ body.dat"; новая книга; impASC fn $; // Импортировать в новую книгу // Рабочий лист сортировки - сортировка очень важна! wsort bycol: = 3; // График по группе группа сюжетов iy: = (4,5) pgrp: = Col (3); 

В следующем примере создаются графические окна на основе одной группы. и графические слои на основе второй группы:

 // Принесите данные образца fn $ = система.path.program $ + "Примеры \ Графики \ Категориальные данные.dat"; новая книга; impASC fn $; // Сортировать набор данных sortcol = {4,3}; // сортируем по препарату, затем по полу sortord набора данных = {1,1}; // обе сортировки по возрастанию wsort nest: = sortcol ord: = sortord; // Помещаем каждое лекарство на отдельный график с разделением полов слоями сюжетная группа iy: = (2,1) pgrp: = col (лекарство) lgrp: = col (пол); 

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

Создание трехмерных графиков с помощью рабочего листа -p CommandGraph, 3D

Для создания 3D-графиков используйте Рабочий лист (команда) (переключатель -p).

Сначала создайте простой трехмерный график рассеяния:

 // Создаем новую книгу новая книга r: = bkn $; // Запускаем скрипт на bkn $ win -o bkn $ { // Импортируем образцы данных строка fname $ = system.path.program $ + "\ samples \ Матричное преобразование и привязка" + "\ XYZ Random Gaussian.dat"; impasc; // Сохраняем название новой книги bkn $ =% H; // Меняем тип столбца на Z нед.col3.type = 6; // Выбираем столбец 3 рабочий лист -s 3; // Строим трехмерный график рассеяния по шаблону с именем "3d" рабочий лист -p 240 3d; }; 

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

Мы можем запустить следующий скрипт после примера выше и создать трехмерный каркасный график из матрицы:

 win -o bkn $ { // Грид методом Шепарда xyz_shep 3; // Постройте трехмерный каркасный график; рабочий лист -p 242 wirefrm; }; 

Создание трехмерного графика и контурных графиков из виртуальной матрицы Виртуальная матрица

Origin также может создавать трехмерные графики, такие как трехмерная цветовая карта, контур или трехмерная сетка и т. Д., из рабочего листа с помощью X-функции plotvm. Эта функция создает виртуальную матрицу, а затем строит из нее график. Например:

 // Создайте новую книгу и импортируйте образцы данных новая книга; string fname $ = system.path.program $ + "Samples \ Graphing \ VSurface 1.dat"; impasc; // Обработка всего листа как виртуальной матрицы и создание поверхностного графика цветовой карты plotvm irng: = 1! формат: = xacross rowpos: = selrow1 colpos: = selcol1 ztitle: = "VSurface 1" type: = 242 ogl: = <новый шаблон: = cmap>; // Изменить масштаб оси X на логарифм // Нелинейный тип оси поддерживается для трехмерных графиков, созданных из виртуальной матрицы СЛОЙ.X.type = 2; 

Создать круговую дендрограмму

Меню «Создание круговой дендрограммы» не поддерживает графический интерфейс Origin. Если вы хотите построить этот тип графика, вы можете выполнить Hierarchical Cluster Analysis для создания графика или использовать следующий сценарий:

 run.section (участок, CircularPhyTree); run.section (сюжет, CircularBinPhyTree); 

В этом примере показано, как построить такой график:

 // Импортировать файл данных новая книга; string fpath $ = "Образцы \ Графики \ Средняя температура США.dat "; строка fname $ = system.path.program $ + fpath $; impASC; // Иерархический кластерный анализ hcluster -r 2 irng: = [USMeanTempera] "Средняя температура в США"! D "Январь" [1]: O "Декабрь" [100] ссылка: = номер отделения: = 4 center: = 1; // Выделить наборы данных page.active $ = "Данные кластерного графика1"; рабочий лист -s 1 0 3 0; // Создаем график run.section (сюжет, CircularPhyTree); 

Установка и удаление шаблона графика с помощью LabTalk Установка шаблона графика

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

 // Установить run.section (dofile.ogs, OnInstallTemplate, "% YMyTemplate.otpu"); // Чтобы удалить run.section (dofile.ogs, OnUnInstallTemplate, "% YMyTemplate.otpu"); 
.

Смотрите также

НА ВЕРХ