Личное путешествие на языках науки о данных

1656593178 lichnoe puteshestvie na yazykah nauki o dannyh

Содержание статьи

Елена Нисиоти

N4lljDHLmC36qx5zq5RwYYplgpn9E98UDOlk
Авторство оригинального изображения: OffensiveArtist[CCBY-SA40(сWikimediaCommonsобозначеноповторногоиспользованиясмодификацией[CCBY-SA40(fromWikimediaCommonslabeledforreusewithmodification)[CCBY-SA40(зWikimediaCommonsпозначенодляповторноговикористаннязмодифікацією[CCBY-SA40(fromWikimediaCommonslabeledforreusewithmodification

В TensorFlow не просто зайти.

Докторская степень – это хорошая возможность для самоанализа. На самом деле, важно создать возможности для самоанализа, независимо от того, насколько занято или незначительно настоящее.

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

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

Прошлое. Именно об этом и пойдет речь в этой статье. Рассказ о моих попытках использовать MATLAB, Weka, R, C++ и Python в своей карьере в области науки о данных.

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

Как следствие, палитра языков программирования для науки о данных похожа на вселенную: для исследования недостаточно всей жизни и она постоянно расширяется.

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

MATLAB

Я познакомился с миром машинного обучения через онлайн-курс, ведущий Эндрю Нг. Я рекомендую его по сей день людям, которые ищут плавного введения в, по признанию, страшно огромный мир машинного обучения.

Хотя Python и R были гораздо более популярны в то время, Эндрю выбрал MATLAB для задач курса. Тогда меня это волновало, но сегодня это кажется странным. Курсы науки о данных больше сосредотачиваются на том, как использовать язык (или библиотеку) для анализа данных, чем на том, как производить анализ данных с помощью языка.

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

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

Я очень рано узнал разницу между знанием названия чего-то и знанием чего-то. – Ричард Фейнман

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

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

wBmD4fCLR6Mkl5LedyoauCvlnbbC8HVLEjiR
Это не всегда должно аварийно.

Weka

Мой опыт работы с Weka был недолгим. Нас познакомили с ним как дополнительный инструмент для задания на курсе «Распознавание образов» в моем университете.

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

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

Иллюзия о том, что мы можем создавать хорошие модели для реальных проблем, не имея предварительного понимания данных, разрушилась из-за таких сбоев, как MarketSwitch и KXEN, в конце 90-х. Автоматизированные инструменты могут облегчить нашу работу, обнаружив хорошие параметры алгоритмов, полезные шаги предварительной обработки и эффективные конвейеры тестирования. Но они не могут заменить эксперта-человек, по крайней мере, с нашим нынешним уровнем экспертизы.

В общем, вы должны нести ответственность за модели, которые вы создаете.

«Люди, – крикнул я, – как ты необразован в своей гордости мудрости!» – Мэри Уолстонкрафт Шелли, Франкенштейн

Р

Я вникал в секреты и чудеса R во время своей дипломной работы. Вы, наверное, слышали, что R – особый ребенок в семье языков анализа данных. Но стремительная кривая обучения – это занижение чувств неуверенности в себе и полной дезориентации, которые я испытал в начале развертывания.

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

Имея настройку целого фреймворка, я хотел использовать чудеса объектно-ориентированного программирования в своем дизайне. Итак, первый вопрос, который мне пришлось ответить, был: поддерживает ли R объектную ориентацию? Это делает! На самом деле четырьмя разными способами. Ни одно из них непосредственно не соответствует объектно-ориентированному программированию, которое я испытывал на C++, Java или Python.

Различные способы появлялись постепенно, пока потребности R-сообщества были обнаружены, и были необходимы методы для легкого определения и групповых функций. Не смотря на отсутствие четкого плана желаемых качеств класса, не удивительно, что теперь у вас есть свобода (или я могу сказать бремя) выбирать между классами S3, S4, эталонным и R6. Сегодня существует немало ресурсов по этой теме, но достаточно сказать, что если вашему проекту нужна объектная ориентация, то R, вероятно, не тот язык.

После того, как я остановился на референтных классах, я стал давать плоть своему программному скелету. Вскоре я понял, что R, по-видимому, развился с – как я называю – принципом наибольшего удивления. Специализируясь на анализе данных, R может предложить множество удобных инструментов, таких как модные структуры данных, называемые data.frames, элегантно фиксирующие характеристики и потребности набора данных.

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

Люди решают назвать свой пакет SVM «e1071» вместо чего-то более интуитивного, и именно так вы должны его скачать. Вы хотите выполнить ту же операцию, например обучение, и разные пакеты используют для нее разные имена. Читать инструкцию к разным пакетам, чтобы выполнить то же действие, трудно. Это также приводит ко многим ошибкам, если вы игнорируете руководство, поскольку вы предполагаете последовательность.

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

Когда дело доходит до машинного обучения, существует средство от отсутствия совместимости между разными пакетами. Это называется каретка и является попыткой предоставить общие интерфейсы для предварительной обработки, обучения и прогнозирования, которые поддерживают многие полезные пакеты, такие как nnet для нейронных сетей и svmRadial для опорных векторов машин. Наш инструмент automl был бы (намного большим) беспорядком, если бы мы не использовали полезность caret.

C++

Теперь зачем вам делать анализ данных на C++? Зачем кому это делать?

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

Тем не менее, я решил провести свои эксперименты на R и когда приближался конец стажировки, я мог перенести свои модели и функции на C++. Что может пойти не так ли?

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

После того, как я получил удовлетворительные результаты, используя простые пакеты R для PCA и машин поддержки векторов, я решился включить свои модели в существующую (и поразительно громоздкую) фреймворк C++. Пакет libsvm, казалось, подходит для моего варианта, предлагая операции, связанные с машинами опорных векторов.

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

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

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

После этого опыта с научным аспектом данных C++ я пересмотрел свое строгое суждение относительно безжизненного отношения R.

Python

Одним из первых обсуждений с моим нынешним руководителем было:

– Итак, на каком языке вы будете использовать свои будущие эксперименты?

– Думаю, я пойду на Python.

— Итак, у вас есть опыт работы с Python?

— Нет, я только что пережил многое и имею об этом очень хорошее предчувствие.

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

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

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

Жизнь можно понять только вспять; но это надо жить вперед — Серен Кьеркегор

Добавить комментарий

Ваш адрес email не будет опубликован.