Столбец PysparkShoitiesities () для расчета косинус-подобий между продуктами - PullRequest
0 голосов
/ 29 октября 2018

У меня большой набор данных, и мне необходимо вычислить косинус-сходства между продуктами в контексте совместной фильтрации по элементам для рекомендаций по продуктам. Поскольку данные содержат более 50000 элементов и 25000 строк, я выбрал использование Spark и нашел функцию columnSimilarities(), которую можно использовать в DistributedMatrix, в частности, в RowMatrix или IndexedRowMatrix.

Но есть 2 вопроса, которые меня интересуют.

1) В документации упоминается, что:

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

Поскольку у меня много продуктов, кажется, что RowMatrix - не лучший выбор для построения Матрицы подобия из моего ввода Spark Dataframe. Вот почему я решил начать с преобразования кадра данных в CoordinateMatrix, а затем использовать toRowMatrix(), потому что columnSimilarities() требует входной параметр в качестве RowMatrix. Между тем, я не уверен в его эффективности ..

2) Я узнал, что:

метод columnSimilities возвращает только не диагональные записи верхняя треугольная часть матрицы подобия.

ссылка

Значит ли это, что я не могу получить векторы сходства всех продуктов?

1 Ответ

0 голосов
/ 30 октября 2018

Итак, ваша текущая стратегия - вычислить сходство между каждым элементом, i, и каждым другим элементом. Это означает, что в лучшем случае вы должны вычислить верхний треугольник матрицы расстояний, я думаю, что это (i ^ 2/2) - i вычислений. Затем вы должны отсортировать для каждого из этих элементов.

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

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

Существуют различные библиотеки поиска ANN, annoy, nmslib, LSH. Доступное введение здесь: https://erikbern.com/2015/10/01/nearest-neighbors-and-vector-models-part-2-how-to-search-in-high-dimensional-spaces.html

НТН. Тим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...