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

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

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

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

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


person HTa    schedule 20.11.2010    source источник
comment
В патенте Amazon подробно описан их подход.   -  person arao6    schedule 02.05.2015


Ответы (4)


Это 2 разных типа рекомендательных систем.

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

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

Лучшее, но еще более сложное решение - это метод, называемый ограниченными машинами Больцмана. Их введение можно найти здесь

person dan_waterworth    schedule 20.11.2010
comment
@HTa: Различие между сходством клиентов и сходством продуктов, которое проводит @dan_waterworth, является наиболее фундаментальной разделительной линией среди стратегий механизма рекомендаций. Однако ограниченные машины Больцмана и кластеризацию k-средних следует рассматривать как замену для любого метода машинного обучения, который вы хотите использовать. Сходство клиента или продукта можно сделать с помощью матрицы или с помощью искусственного интеллекта. / stats / М.Л. Вы можете прочитать об этом в Википедии. - person isomorphismes; 09.03.2011

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

//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 лучших продуктов, купленных вместе с ним. Результат нужно поместить в какой-то словарь с ключом по идентификатору продукта.

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

person CodesInChaos    schedule 20.11.2010

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

person griZZZly8    schedule 20.11.2010

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

person dolyth    schedule 03.09.2015