Как вычислить сходство между списками функций? - PullRequest
0 голосов
/ 12 августа 2011

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

Я хочу получить показатель сходства между моими пользователями в отношении этих функций, но я не могу найти способ объединить функции ресурса вместе.Я сделал это с помощью текстовых функций, так как можно добавлять документы вместе, а затем извлекать функции (скажем, TF-IDF), но я не знаю, как действовать с этой конфигурацией.

Чтобы бытькак можно яснее, вот что у меня есть:

>>> len(user_features)
13 # that's my number of users
>>> user_features[0].shape
(2374, 17) # 2374 documents for this user, and 17 features

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

>>> euclidean_distance(user_features[0], user_features[0])

Но я не знаю, как сравнить пользователей друг с другом.Я должен каким-то образом объединить функции вместе, чтобы получить матрицу N_Users X N_Features, но я не знаю, как.

Есть какие-нибудь советы о том, как действовать?о функциях, которые я использую:

Функции, которые у меня есть, не полностью исправлены.Пока что у меня есть 13 различных функций, которые уже объединены из «представлений».У меня есть стандартное отклонение, среднее и т. Д. Для каждого из представлений, чтобы иметь что-то «плоское», чтобы можно было их сравнить.У меня есть одна особенность: было ли местоположение изменено с момента последнего просмотра?А как насчет часа назад?Два часа назад?

Ответы [ 3 ]

1 голос
/ 12 августа 2011

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

Вы говорите, что можете получить матрицу сходства документов.Затем предположим, что пользователь U1 посетил документы D1, D2, D3, а пользователь U2 посетил документы D1, D3, D4.У вас будет два набора векторов S1 = {U1 (D1), U1 (D2), U1 (D3)} для пользователя 1 и S2 = {U2 (D1), U2 (D3), U2 (D4)}.Обратите внимание, что поскольку взаимодействие каждого пользователя с документом отличается, они представлены как таковые.Если я правильно понимаю, элементы этих наборов должны соответствовать соответствующим строкам в матрице каждого пользователя.

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

0 голосов
/ 12 августа 2011

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

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

0 голосов
/ 12 августа 2011

Вы можете использовать среднее значение функций в наборе ресурсов каждого пользователя, что кажется естественным способом подвести итог пользователю.numpy.mean с соответствующим аргументом axis должно получить среднее значение, а затем вычислить евклидово расстояние между результирующими "векторами пользователя" (длины n_features), как вы делали ранее между векторами документа.

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