Подтвердить что ты не робот

Как я могу реализовать механизм рекомендаций?

Пожалуйста, будьте терпеливы с моим письмом, так как мой английский не имеет опыта.

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

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

Буду признателен, если кто-нибудь сможет указать некоторые алгоритмы. Или, в основном, укажите некоторые хорошие прямые ссылки/книги, из которых мы все можем учиться. Спасибо всем!

4b9b3361

Ответ 1

Это два разных типа рекомендуемых двигателей.

Простейшим является товарный, т.е. "клиенты, которые купили продукт А, также купили продукт B". Это легко реализовать. Храните разреженную симметричную матрицу nxn (где n - количество элементов). Каждый элемент (m [a] [b]) - это количество тех, кто купил элемент "a" вместе с пунктом "b".

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

Лучшее решение, но еще более сложным является метод, называемый Restricted Boltzmann Machines. Там представлено введение здесь

Ответ 2

Первая попытка может выглядеть так:

//First Calculate how often any product pair was bought together
//The time/memory should be about Sum over all Customers of Customer.BoughtProducts^2
Dictionary<Pair<ProductID,ProductID>> boughtTogether=new Dictionary<Pair<ProductID,ProductID>>();
foreach(Customer in Customers)
{
    foreach(product1 in Customer.BoughtProducts)
        foreach(product2 in Customer.BoughtProducts)
            {
                int counter=boughtTogether[Pair(product1,product2)] or 0 if missing;
                counter++;
                boughtTogether[Pair(product1,product2)]=counter;
            }
}

boughtTogether.GroupBy(entry.Key.First).Select(group.OrderByDescending(entry=>entry.Value).Take(10).Select(new{key.Second as ProductID,Value as Count}));

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

Это может стать слишком медленным или слишком дорогостоящим для больших баз данных.

Ответ 3

Я думаю, вы говорите о базовых системах знаний. Я не помню язык программирования (возможно, LISP), но есть реализации. Кроме того, посмотрите OWL.

Ответ 4

Там также prediction.io, если вы ищете решение с открытым исходным кодом или решения SaaS, такие как mag3llan.com.