С точки зрения науки о данных.

TL; DR:

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

Пример машинного обучения: вы запускаете прогнозный анализ машинного обучения, скажем так, как линейную регрессию, а затем хотите сравнить его с другой моделью, скажем, регуляризованной регрессией (например, гребнем, лассо). Как вы интегрируете свой код для этого? Самым простым способом может быть скопировать -› вставить код вашей регрессионной модели, изменить часть модели, сохранить вывод с уникальным именем, интегрировать с предыдущим выводом (при условии, что вы сохранили имена столбцов и другую структуру унифицированным образом), и сделайте сравнение. Но самое интересное здесь только начинается ... что, если вы хотите добавить больше моделей, где некоторые модели также требуют настройки (выбор наилучшего значения параметра с помощью некоторого процесса оптимизации), или вы хотите попробовать некоторые методы ансамбля (упаковка, повышение, складывание ) что состоит из нескольких моделей? Вы по-прежнему собираетесь делать все с нуля, копировать-вставлять, вязать результаты из различных функций / пакетов, где у каждого свои имена и структура? Надеюсь, что нет… кто-то уже нашел решение этой проблемы и написал пакет, который объединяет этот громоздкий процесс и объединяет ваши самые смелые списки желаний в единую всеобъемлющую экосистему, которая сделает за вас грязную работу.

Пример временного ряда:

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

«Был там… Сделано»

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

Как определить пакет с нужным вам уровнем объема? давай пожаднем ... Как определить пакет с самым широким охватом?

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

Для меня это было похоже на… «Почему ты не сказал мне заранее, что это то, чем мы собираемся заняться позже… Если бы я знал это раньше, я мог бы создать свой инструмент по-другому с самого начала, поэтому Я мог бы добавить эту новую функцию / решение, не меняя дизайн (объем) моего инструмента ».

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

Где подвох? нет бесплатного обеда

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

Компромисс:

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

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

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

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

Предупреждение: избегайте пакета single-function-crazy-wrapper

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

Вывод:

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

Проверьте другие мои сообщения в блоге и мою страницу на GitHub для дополнительного увлекательного чтения. LinkedIn.