Интересный и основанный на местоположении алгоритм для Android-приложения для Android

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

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

Позволяет мне иметь данные в этом формате JSON для пользователей

User1: {location: "Delhi, India", interests: ["Jogging", "Travelling", "Praying"] }
User2: {location: "Noida, India", interests: ["Running", "Eating", "Praying"] }
User3: {location: "Bangalore, India", interests: ["Exercise", "Visiting new places", "Chanting"] }

Я пишу соответствующий алгоритм, который соответствует нескольким ниже критериям -

  • Если пользователь1 заинтересован в "Jogging", а другой пользователь2 заинтересован в "Беге", так как бег и бег - это альтернатива своего рода упражнению, поэтому они должны соответствовать обоим профилям, а также быть местным, а также как можно ближе к началу.

  • Алгоритм, выполняющийся в масштабе, должен быть достаточно результативным. Это означает, что я хотел бы избежать сравнения каждого пользователя отдельно друг с другом. Для N пользователей это операция O (N ^ 2). В идеале я хотел бы разработать какой-то "счет", который я могу создать для каждого пользователя отдельно, поскольку это включает в себя цикл через всех пользователей только один раз. Затем я могу найти других пользователей со сходными баллами и определить наилучшее соответствие, основанное на этом.

Может кто-нибудь предложить мне с некоторой реализацией, как я могу достичь этого с помощью firebase-cloud-function и firebase-database.

Ответы

Ответ 1

Я думаю, что жесткое кодирование сходства - неправильный подход. FYI ни одна из основных поисковых систем не полагается на такие сопоставления.

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

Для местоположения есть какой-то радиус (предпочтительно это может быть задан пользователем) и соответствовать людям в радиусе.

Ответ 2

Прежде всего, я бы сказал, избавиться от избыточных функций в вашем наборе данных, Jogging и running могут быть 1 функцией вместо 2, а также после этого вы можете использовать алгоритм K-средних для группировки данных неконтролируемым образом чтобы узнать больше о K-средствах, вы можете перейти по этой ссылке: https://www.coursera.org/learn/machine-learning/lecture/93VPG/k-means-algorithm

Также, когда вы строите онлайн-систему, она должна ежедневно улучшаться Вы можете посмотреть это, чтобы узнать немного больше о онлайн-обучении https://www.coursera.org/learn/machine-learning/lecture/ABO2q/online-learning

Также https://www.coursera.org/learn/machine-learning/lecture/DoRHJ/stochastic-gradient-descent этот стохастический градиент будет полезен для понимания.

Эти концептуальные видео ничего не реализуют сами, вы всегда можете использовать библиотеку, такую ​​как tensorflow https://www.tensorflow.org/

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