machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Как создать нечеткие наборы данных в Amazon Redshift

Дата публикации Mar 28, 2019

Нечеткое слияние - Фото автораМаркус СпишкенаUnsplash

Если вам повезет, при работе с несколькими наборами данных в вашем хранилище данных для таблиц, которые вы хотите объединить, будет доступен какой-то столбец объединения.

Когда это так, жизнь хороша. Однако современныйБольшое количество данныхРешения открывают сценарий использования для объединения всех видов данных из разнородных источников.

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

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

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

Нечеткое соответствие

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

Как люди, мы можем легко определить опечатки или концептуально понять, когда две одинаковые вещи одинаковы. Алгоритмы нечеткого соответствия пытаются помочь компьютеру сделать это. Вместо того, чтобы совпадение между двумя строками было логическим истинным или ложным, т. Е. Абсолютно одинаковым или не одинаковым, нечеткое сопоставление дает оценку близости.

Возьмите струны «Бруклинский мост» и «Бруклинский мост». Человек легко сможет заметить, что это одно и то же, даже если во второй строке есть орфографическая ошибка.

Алгоритм нечеткого соответствия, такой какРасстояние Левенштейнаэто дает процентное сходство, которое, вероятно, оценило бы эти две строки как минимум на 90%. Мы можем использовать это, чтобы установить порог того, что мы хотим, чтобы «похожий» был, т. Е. Любые две строки с нечеткой оценкой более 80% - это совпадение.

Реализация Python

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

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

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

>from fuzzywuzzy import fuzz
>fuzz.ratio(“brooklyn bridge”, “brooklin bridge”)> 93

Как и следовало ожидать, это возвращает довольно высокий балл, так как оба очень похожи.

Redshift UDF

Определяемые пользователем функции позволяют добавлять повторяемые блоки кода в Redshift с использованием SQL или Python. Поддержка python позволит нам взять реализацию из предыдущего раздела и добавить ее в Redshift, чтобы мы могли просто вызывать ее, как любую другую встроенную функцию SQL.

Прежде всего нам нужно добавить библиотеку fuzzywuzzy в Redshift. Существует некотораятщательная документацияно я опишу основные шаги ниже.

  1. Скачатьfuzzywuzzyрепо из github
  2. Возьмите копию папки fuzzywuzzy в репозитории и заархивируйте ее.
  3. Скопируйте эту заархивированную папку в корзину S3
  4. В Redshift запустите следующую команду для импорта библиотеки fuzzywuzzy
CREATE LIBRARY fuzzywuzzy LANGUAGE plpythonu FROM 's3://<bucket_name>/fuzzywuzzy.zip' CREDENTIALS 'aws_access_key_id=<access key id>;aws_secret_access_key=<secret key>'

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

CREATE FUNCTION fuzzy_test (string_a TEXT,string_b TEXT) RETURNS FLOAT IMMUTABLE
AS
$$
FROM fuzzywuzzy import fuzz
RETURN fuzz.ratio (string_a,string_b)
$$ LANGUAGE plpythonu;

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

SELECT fuzzy_test('brooklyn bridge', 'brooklin bridge');> 93

Заворачивать

И это так просто. Это хорошая функция, позволяющая Python UDF предоставить вам большую гибкость благодаря широкому спектру библиотек, доступных в Python.

Благодаря мощности кластера Redshift это означает, что возможны крупномасштабные нечеткие совпадения, которые, вероятно, никогда не закончатся на ноутбуке. Тем не мение…

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

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map