transform
и predict
, по-прежнему являются пандами DataFrames, что странно. Эта проблема отслеживает обновление наших методов для возврата структур данных Woodwork.Пока что, учитывая, что Woodwork завершает планы по большим обновлениям. Если Woodwork станет расширением pandas, нам может не понадобиться это делать.
@angela97lin и я зарегистрировались и обсудили несколько вариантов реализации:
fit
и т. д., либо придерживайтесь шаблона текстового функционализатора с использованием параметров инициализации для указания соответствующих столбцов. Недостаток: некрасиво с точки зрения API, поэтому мы в первую очередь создали изделия из дерева.Статус: @angela97lin в настоящее время использует вариант 3 в № 1668.
План: мы продолжим эту стратегию, следя за сокращением времени выполнения из-за нескольких экземпляров ww datatable. И мы рассмотрим, есть ли какие-либо пожелания, которые мы должны сделать для работы с деревом, чтобы упростить эту задачу. Мы также будем следить за любыми привлекательными вариантами, которые мы, возможно, пропустили до сих пор.
@chukarsten @gsheni
Кажется, что третий вариант — лучший, самый чистый вариант. Надеюсь, на производительность это не повлияет, но концептуально все выглядит хорошо. Спасибо, что обратили на это мое внимание... пытаясь уложить в голове все эти вещи.
Взломать это и подумать еще немного:
Конечная цель состоит в том, что нам нужен какой-то способ отслеживать исходные логические типы, которые нужны пользователю. Это может быть информация, хранящаяся в графе компонентов, или передаваемая каждому компоненту, который отвечает за установку этих типов обратно после преобразования некоторых данных. В настоящее время преследую 3 и добавляю информацию в граф компонентов, так как это проще всего протестировать (вместо обновления каждого компонента)... но на уровне компонентов это не имеет смысла.
Скажем, пользователь указывает Woodwork DataTable и явно преобразует категориальный столбец в естественный язык. Пользователь передает это компоненту. Нам нужно преобразовать в pandas, чтобы перейти к внешним библиотекам, и мы хотели бы вернуть объект Woodwork. Если мы просто вызовем конструктор Woodwork, он примет только предполагаемый тип (категориальный), что странно? Таким образом, мы должны отслеживать исходный указанный тип естественного языка и преобразовывать его перед передачей обратно пользователю.
Интересно отметить стандартный масштабатор: он может принимать столбцы int и преобразовывать их в числа с плавающей запятой. Если затем мы попытаемся вернуть столбцу исходный тип (int), нас будут ругать за попытку конвертировать числа с плавающей запятой в целые, когда это небезопасно. 😬
Обновление: быстро поговорили с @dsherry и @chukarsten. В настоящее время я реализую № 3, но имею дескриптор графа компонентов, отслеживающий исходные типы пользователей и обновляющий эту информацию по мере ее передачи от компонента к компоненту. Это работает нормально и приводит нас к месту, где работают AutoML/конвейеры, но после слияния # 1668 мы должны заняться обработкой этого на уровне компонентов и удалением этого кода из графа компонентов.
Мои следующие задачи: исправить индексные тесты при обновлении ветки из основной, очистить комментарии и проблемы с файлами, которые можно решить, не связанные с этим PR (просто общий код очистки). Как только код станет более чистым, найдите избыточность и профиль, чтобы увидеть, откуда берется эта огромная разница во времени / что мы можем с этим поделать.
Самый полезный комментарий
Кажется, что третий вариант — лучший, самый чистый вариант. Надеюсь, на производительность это не повлияет, но концептуально все выглядит хорошо. Спасибо, что обратили на это мое внимание... пытаясь уложить в голове все эти вещи.