Наука о данных — это быстро развивающаяся область, изначально основанная на статистике. За последние несколько десятилетий она стала намного шире из-за экспоненциального роста объема данных и вычислительных ресурсов, а также из-за возникшей необходимости понимать их более глубоко. Искусственный интеллект и машинное обучение во многих отношениях очень близки к науке о данных, но, что наиболее важно, их цель — заставить машины понимать и обрабатывать данные, в основном автоматизируя ещё больше из того, что сейчас люди делают с помощью компьютеров.
Я считаю, что было бы справедливо охарактеризовать науку о данных как общую основу почти для всех исследовательских и практических областей, которые возникли с развитием цифровых компьютеров, а также для большинства эмпирических областей, которые для достижения прогресса полагаются на фактические данные и их анализ. Однако, поскольку наука о данных стала намного шире, чем просто статистика, становится всё труднее обмениваться идеями и работать вместе над важными проектами без уточнения базовой теории. В этой статье я хочу восполнить этот пробел, поэтому дам простое определение основным концепциям и с их помощью опишу наиболее распространенные типы данных.
Что такое данные
Данные — представление информации о чем-либо в различной форме: текст, числа, графика, акустика. Они получаются в результате измерений, построения изображений, интеллектуального анализа данных, описаний и многих других способов. Важно понимать метод сбора данных и его ограничения, чтобы не забывать, что это неполное описание реальности. Однако данные — это всё, что мы можем обсуждать и анализировать.
Согласно нынешнему пониманию физики, на самом базовом уровне все данные могут быть разделены на типы отдельных объектов. Непрерывные представления полезны как приблизительные значения во многих сценариях, но их также можно рассматривать как абстрактные или математические объекты. Некоторые данные, например искусство, вряд ли хоть как-то могут быть описаны формальными языками.
Хотя любые данные могут быть представлены как объект, иногда их лучше описать как связь между объектами. Этот тип данных обычно содержит информацию об идентификаторах связанных объектов, также часто включает в себя описание соединения или функций кодера/декодера для передачи информации между ними.
Иногда источник данных бывает случайным, как результат подбрасывания монеты. Обычно он представлен набором всевозможных состояний, например (орел; решка), в сочетании с числовыми значениями, которые представляют наши убеждения о том, насколько вероятно, что система окажется в одном из состояний во время наблюдения, например (0,5; 0,5) для правильной монеты. В большинстве случаев вероятностные переменные представляют наши приблизительные значения из-за недостатка знаний. Например, вы можете точно предсказать, с какой стороны приземлится монета, если у вас достаточно данных о ней, приложенной к ней силе, состоянии воздуха и других деталей. Однако это вряд ли поможет в случае с квантовыми частицами, которые кажутся стохастическими по своей природе, но мы вернемся к этому позже.
Понимание вероятностей важно для понимания того, как обычно количественно оценивается информация, которая хранится в данных. Представьте, что вы подбрасываете монету не глядя. Какой минимальный объем данных вам должны передать, чтобы вы знали результат? Орел/решка, 1/0 или что-то другое? Это основная идея в энтропии, которая обозначается как H и обычно измеряется в битах. Необходим хотя бы 1 бит информации, чтобы узнать результат. Если взять английский язык, то понадобится гораздо больше информации, чтобы описать даже одно слово, поскольку существуют миллионы возможных слов и их форм, а не только два возможных варианта. Интересно, что с каждым последующим словом в предложении, по мере того как идея становится яснее, вероятности большинства слов стремятся к нулю, в то время как их остаётся меньше, и каждое следующее слово передаёт меньше информации.
Ещё одна важная концепция, основанная на энтропии, на которую я буду ссылаться позже — это взаимная информация, обозначаемая как I. Проще говоря, это мера того, сколько общей информации существует между двумя частями данных, или сколько информация об одной части сообщает нам о другой. В приведённом выше примере с предложениями на английском языке каждое слово имеет общую информацию со своими соседями, и в среднем каждое новое слово добавляет меньше сведений, которых не было в предыдущих. Кроме того, это объясняет, почему предложения редко содержат больше 10–50 слов, несмотря на то что языки способны создавать произвольно длинные последовательности.
Что с ними делать
Часто необработанные данные настолько тяжёлые, что в них сложно что-то понять. Чтобы извлечь из данных интересную информацию, с ними необходимо выполнять операции. На практике мы используем множество различных преобразований: сортировку, фильтрацию, очистку, подсчёт, запросы, слияние, реконструкцию, рефакторинг, моделирование, визуализацию, поиск, преобразование, приближение, сжатие, сокращение и многое другое.
Общим для всех этих операций является то, что, если мы рассмотрим все входные данные, включая функции, используемые в процессе, выходные данные будут содержать такой же или меньший объём информации. А если мы откажемся от операций, производящих выходные данные, которые не зависят от предоставленных входных данных, таких как функции математических констант, у нас останутся операции, которые действительно могут помочь нам осмысленно преобразовать данные и найти нужную информацию. Поскольку целью обычно является сократить массивы данных до интерпретируемых форм представления данных, я предлагаю назвать этот тип операций редукцией и обозначить его как ~>. Говоря математическим языком:
Для некоторых данных A, для которых определена операция, A ~> B является допустимой редукцией, если B = f (A), где оператор f не вводит новую информацию H (A) ≥ H (B) и сохраняет по крайней мере её часть I(A; B) > 0.
Многие такие операции имеют собственные названия, как в приведенных выше примерах, но не все. И даже для операций, имеющих название, фактические вычисления могут различаться при разных типах или экземплярах данных. Кроме того, такая нотация заставляет нас учитывать все данные, которые используются для выполнения вывода, такие как параметры функции или модели, внутренняя работа базы данных, неявные или явные знания о предметной области, из которой эти числа получены, и многие другие потенциальные аспекты.
Примеры редукции: (2 + 2) ~> 4, sin (π) ~> 0, «I am going» ~> «I’m going», База данных(Запрос) ~> Результат, Модель(Ввод) ~> Вывод, (Таблица с пропущенными значениями ∪ функция для их заполнения) ~> (Заполненная таблица), (Квантовое состояние Ψ = aX+bY) ~> X или Y.
О конкретном представлении данных
Теперь мы можем рассмотреть некоторые практические случаи, которые могут встретиться в работе, начиная с более интуитивных и постепенно переходя к сложным реальным задачам.
Естественный язык. Начнем с того, что вы читаете прямо сейчас — с письменного естественного языка. Я немного упомянул об этом в примерах выше, но этот тип данных очень богат, и при этом состоит из относительно небольшого набора символов. В некоторых языках действительно есть сотни и тысячи основных символов, таких как египетские иероглифы или некоторые восточные системы письма, которые часто графически отражают значение этих символов. Помимо широко используемых языков, существуют также разговорные варианты, которые могут практически точь-в-точь соответствовать своим письменным аналогам или сильно отличаться; языки жестов, которые обычно содержат ту же информацию, что и разговорные, но в совершенно другом представлении, шрифт Брайля и т. д. Одним из распространенных способов редукции является резюмирование, когда некоторые данные в сочетании со знанием языка могут быть сокращены до более короткой формы.
Математический язык. Один язык, который особенно выделяется и используется во всем мире — математический. Он очень формален, компактен и удобен для определения вычислений, которые человек может выполнить сам или с помощью компьютера.
Основные формы представления данных в цифровых компьютерах — биты и байты (1 байт = 8 бит) — обычно обозначаются единицами и нулями. Логические значения True/False представляют собой 1/0, целые числа напрямую переводятся в двоичную систему исчисления с дополнительным битом, представляющим знак, число с плавающей запятой — это комбинация экспоненты и дроби, умножение которой даёт записанное значение. Строки могут быть представлены различными кодировками, такими как ASCII или Unicode, но все они являются просто отображениями между целыми числами и присвоенными символами. Массивы, векторы, тензоры обычно представляют собой просто наборы значений одного типа. В зависимости от языка программирования и библиотек эти представления могут также иметь встроенные функции/редукции или объединяться в более сложные структуры.
Код. В языках программирования код представляет собой строку, которая переводится в машинный код, являющийся отображением между целыми числами и заданными операциями в процессоре. Эти отображения обычно называются архитектурами набора команд или просто компьютерными архитектурами. Наиболее популярными среди них являются x86, которая в основном используется в настольных компьютерах и серверах, и ARM, которая в основном используется в мобильных устройствах. Интересно, что недавно ARM вышла на рынки ноутбуков и серверов.
Компиляторы и интерпретаторы. Программы, преобразующие код более высокого уровня в инструкции низкого уровня, обычно называемые компиляторами или интерпретаторами, когда-то сами писались непосредственно по этим инструкциям, но современные версии компилируются с использованием более старых. Важно отметить, что в этом процессе обычно теряется много информации, такой как имена переменных и комментарии, а исходный код в сочетании с компилятором сокращается до серии конкретных инструкций машинного уровня.
Файловые системы. Помимо кода и основных типов, описанных выше, компьютеры часто хранят другие данные, такие как тексты, таблицы, изображения, звуки, видео, закодированные разным образом. Все эти данные разделены на файлы в соответствии с какой-либо файловой системой, чтобы люди могли просматривать и понимать их. Это хорошо работает для относительно небольшого количества фрагментов данных с небольшой общей структурой.
Базы данных. Однако работать с тысячами, миллионами или даже миллиардами записей как с файлами практически невозможно. Вот где нам нужны базы данных. База данных представляет собой набор таблиц с сохраненными данными, кодировщиками/декодерами, предназначенными для них, механизм запросов, который может добавлять новые записи или выполнять различные редукции существующих, а также множество дополнительных инструментов для управления доступом, перемещения, копирования и прочего.
Типы баз данных. Основная разница между базами данных заключается в том, сколько внимания они уделяют отдельным объектам и связям между ними. С одной стороны, есть базы данных SQL, которые реализуют язык структурированных запросов и хорошо подходят для данных с множеством связей. С другой, есть базы данных NoSQL, хранилища ключевых значений и документов, которые превосходно обрабатывают множество независимых записей. Где-то между ними ещё есть графовые базы данных, которые представляют данные в виде узлов для объектов и рёбер для связей. Хотя графовые базы данных пока не очень популярны, я считаю, что их гибкость, интуитивность и улучшенная способность представлять беспорядочные реальные данные в конечном итоге сделают их не менее популярными, чем их конкурентов SQL и NoSQL.
Распараллеливание. Один компьютер может хранить до сотен триллионов байтов и выполнять до сотен триллионов простейших операций в секунду. Может показаться, что это много, но такая производительность достигается благодаря тысячам ядер и на практике требует распараллеливания рабочих нагрузок. Например, если вы хотите получить sin (x²), вы не можете начать вычислять sin(), пока не закончите возведение x в квадрат. Однако, если вам нужно что-то вроде (a*b) + (c*d), вы можете выполнить умножение одновременно на разных ядрах, а затем суммировать результаты на одном из них.
Сеть. Но если вы не хотите создавать суперкомпьютер, чтобы масштабировать его ещё больше, или если вы хотите подключаться к компьютерам удаленно, вам нужны сети. Помимо оборудования понадобятся такие протоколы, как TCP и HTTP, чтобы иметь общие формы представления для передаваемых данных. Благодаря этому вы можете подключать к Интернету все виды вещей с цифровыми компьютерами, даже вашу одежду и мебель — явление, обычно называемое «интернет вещей».
Шифрование. Простая отправка необработанных данных туда и обратно может быть небезопасна. Десятилетия назад только правительство, банки и ещё несколько организаций нуждались в защите своих данных. Но в настоящее время, когда все вокруг собирают и контролируют цифровые данные, нам необходимо шифрование, чтобы контролировать доступ к чтению и редактированию этой информации. Грубо говоря, шифрование работает путем преобразования данных в неузнаваемые формы представления, сохраняя при этом полную информацию с помощью цифровых ключей. Эти ключи необходимы в качестве входных данных для работы алгоритмов кодирования и декодирования. Контролируя доступ к этим ключам, вы контролируете доступ к данным.
Блокчейн. Одна особенно интересная структура данных, основанная на сочетании базы данных, интернета и шифрования — это блокчейн (англ. blockchain — цепь из блоков). Основная идея заключается в создании базы данных, в которую каждый может добавлять новые блоки данных в соответствии с процедурой консенсуса и которая будет защищена с помощью шифрования от таких манипуляций, как редактирование или удаление. Самым популярным примером использования являются криптовалюты, например, Bitcoin и Ethereum, но таких примеров намного больше. Однако название этой структуры немного вводит в заблуждение, поскольку на практике сложно хранить все данные в одной цепочке, а масштабирование требует определённого количества ветвлений для работы с тысячами и миллионами пользователей. В реальности блокчейн уже ближе к чему-то вроде «блоктри» (англ. blocktree — дерево из блоков), и я считаю, что было бы полезно обобщить основные идеи до чего-то похожего на «блокграф» (англ. blockgraph — график из блоков), чтобы сделать структуру ещё более масштабируемой и применимой к более широкому кругу задач.
Модель. Более общая концепция представлений, описывающая поведение какого-либо объекта, называется моделью. Это может как простая линейная функция одной переменной, например, общее расстояние d, пройденное с фиксированным параметром скорости v, и заданное время t : d = v*t, так и сложные искусственные нейронные сети с миллиардами параметров, работающие для произвольной длинной серии входов. Существуют модели данных, которые определяют, как они должны быть представлены в базах данных, модели, описывающие, как вещи должны классифицироваться, оцениваться, генерироваться, решаться и многие другие.
Модели машинного обучения. Модели машинного обучения, такие как регрессии, деревья решений или нейронные сети, особенно полезны, потому что человеку не нужно давать точную характеристики того, что он хочет смоделировать. Модели «учат» формы представление этого из предоставленных примеров. Если отрегулировать параметры таким образом, чтобы улучшить способность моделей имитировать данные, которые им предоставляются, они могут автоматизировать любые задачи обработки данных, а иногда они превосходят людей в решении важных задач. Но их эффективность напрямую зависит от того, сколько информации об интересующем объекте содержится в этих примерах и насколько близка их архитектура к внутренней работе объекта.
Физические модели. Ещё один важный тип моделей — физические модели. Это самые точные и подробные описания реального мира, которые у нас есть. Среди них вы можете найти модели таких обычных вещей, как вода, электричество, описание того, как работают компьютеры, гравитация, как вокруг звезд образуются планеты, а также описание темной материи, темной энергии и других малоизвестных вещей.
Модели квантовой физики. Наиболее фундаментальными и широко распространенными среди них являются модели квантовой физики. В основном они описывают поведение мельчайших частиц, которые мы наблюдаем. Но эти данные также глубоко связаны с нашим пониманием черных дыр и того, как вселенная превратилась в то, что мы видим вокруг. Существуют также модели для ещё более мелкие базовых объектов, например, теория струн, и множества абстрактных явлений более высокого уровня, таких как электрические цепи или двигатели внутреннего сгорания.
Квантовые частицы. Квантовые частицы обладают множеством загадочных свойств, но наиболее противоречивыми из них являются суперпозиция и запутанность. Первый термин означает, что частица может находиться одновременно в разных состояниях, а в каком именно, будет видно после измерений в соответствии с распределением вероятностей. Второй термин означает явление, при котором квантовые состояния двух или большего числа частиц оказываются взаимозависимыми, даже когда частицы разнесены на большое расстояние, при этом информация между ними передаётся мгновенно. Такое странное поведение создаёт проблемы, потому что с вычислительной точки зрения его сложно моделировать и понимать с помощью классических цифровых компьютеров, в результате изобрели квантовые компьютеры, предназначенные для этого.
Квантовые компьютеры. Основная единица данных в квантовых компьютерах — кубит, т. е. квантовый бит. Мы знаем, что такие компьютеры могут выполнять определенные операции намного быстрее, чем их классические аналоги, но у нас нет теории, которая описывала бы все эти операции, и такие компьютеры по-прежнему чрезвычайно редкие и дорогие. Ещё одно важное различие: работая с классическими данными, вы всегда можете применить редукцию к копии и получить результат, сохранив оригинал без изменений, но это не всегда работает с квантовыми данными.
Квантовые эффекты и ДНК. Вся видимая материя состоит из квантовых частиц, включая живые организмы. Хотя большинство её составляющих относительно просты с физической и химической точек зрения, некоторые из них чрезвычайно сложны и с трудом понимаются даже после десятилетий исследований. ДНКявляется наверное наиболее интересной биохимической структурой, поскольку в ней хранятся почти все данные о том, как отдельные клетки ведут себя и строят таких больших существ, как мы. Принято думать о ДНК как о длинном списке статических данных, которые кодируют некоторые белки, но она также динамически реагирует на изменения в окружающей среде, и все сложности и возможности, лежащие в основе этих механизмов, всё ещё плохо изучены. Кроме того, она окружена множеством других биохимических механизмов, которые взаимодействуют с ней разными способами, и в этом масштабе даже вполне возможны некоторые квантовые эффекты.
Квантовые эффекты и нейроны. Вокруг и внутри нас существует бесчисленное множество видов бактерий и типов клеток. Но один конкретный тип особенно интересен своими возможностями обработки данных — нейроны. Они могут образовывать тысячи соединений друг с другом и с другими ячейками на расстоянии даже нескольких метров, получая, неся и посылая сигналы как в электрической, так и в химической форме. Мозг — часть тела с наибольшей концентрацией нейронов — имеет чрезвычайно сложную и взаимосвязанную архитектуру, которую мы едва понимаем. Одна большая проблема, связанная с мозгом, заключается в том, что мы не знаем, какая часть сигнала является ненужным шумом, а какая — целенаправленно стохастической. Я не рассматриваю возможность квантового эффекта на этом уровне. Но дилемма «Исследование vs следование», связанная со стимулированным обучением и эффективностью шума при тренировки моделей машинного обучения, предполагает, что некоторая случайность может свидетельствовать об эволюции, а не о проблеме.
Квантовые эффекты и общество. Нейроны и группа других клеток вместе составляет человека, а группа людей составляет общество. В этих масштабах квантовые эффекты больше не являются проблемой, но сбор данных и выполнение операций над людьми сопряжены с множеством этических и других проблем. Кроме того, благодаря интернету и цифровым устройствам стало намного проще общаться с людьми за тысячи километров. Однако эти устройства также можно использовать для сбора всевозможной информации о нашей жизни, которой мы, возможно, не захотим делиться, особенно когда мы не знаем, кто её увидит. В целом понимание общества и политики никогда не было так важно, как сегодня, поскольку мы можем объединиться через границы по всему миру, а также потому, что у нас достаточно ядерного оружия, чтобы уничтожить все цивилизации и убить практически всё, оставив всю планету непригодной для жизни.
В заключение хочу отметить, что невозможно подсчитать все типы, формы представления данных и операции с ними. Каждый день физики открывают новые факты о вселенной, биологи — новые виды жизни, инженеры — новые инструменты, психологи — новые измерения в нашем сознании, и многие другие специалисты собирают новые знания в самых разных формах. Однако с помощью компьютеров мы можем найти новое понимание в этих тоннах данных, которые, в свою очередь, можно использовать для положительных изменений во многих аспектах нашей жизни.
Читайте также:
- Суть 4 хитроумных концепций Python для новичков
- 5 типов алгоритмов машинного обучения, которые нужно знать
- 4 принципа успешной поисковой системы и не только
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Egor Dezhic: Foundation for Data Science.