Метод ближайшего соседа Graphlab, неправильный вывод

Я пытаюсь найти сходство между новыми пользователями и существующими (создал обученную модель из рекомендованного метода graphlab) из обученной модели. Итак, попытался использовать метод подобия ближайшего соседа (параметр запроса) в graphalb, чтобы сделать это таким образом. //данные - это набор данных, содержащий 100 пользователей и их рейтинги элементов

model = graphlab.nearest_neighbors.create(data)
qry=graphlab.SFrame({'UserId':[101,101,101,101,101,101,101,101,101,101,101],
                'ItemId':["activity1","activity2","activity3","activity4","activity5","activity6","activity7","activity8","activity9","activity10","activity11"],
                'Rating':[3,9,8,5,7,4,8,6,6,3,7]})
 qry.swap_columns('UserId','ItemId')
 qry.swap_columns('ItemId','Rating')
 qry.print_rows()
 kn=model.query(qry)

По сути, я передаю данные нового идентификатора пользователя (101) в методе запроса, идентификаторы элементов и соответствующие рейтинги этих действий. Эти itemId и рейтинги не что иное, как рейтинги существующих пользователей, которые я передаю новому пользователю, чтобы проверить сходство, похож ли новый пользователь на существующего.

Результат, ожидаемый от использования query(), заключается в том, что он должен возвращать SFrame с четырьмя столбцами: метка запроса, метка ссылки, расстояние и ранг контрольной точки среди ближайших соседей точки запроса (согласно документации Graphlab). Но я получаю что-то вроде этого-

| Точки запроса | # Пары | % Полный. | Истекшее время |

| 0 | 11 | 0,0909091 | 624us | | Готово | | 100 | 3,68 мс |

Может ли кто-нибудь помочь, почему это не дает правильного вывода?


person user6127405    schedule 11.04.2016    source источник


Ответы (1)


Модель ближайших соседей GraphLab Create предполагает, что каждая строка будет соответствовать пользователю как для справочных данных, так и для данных запроса, поэтому для пользователя запроса 101 все рейтинги должны быть «разложены» в одну строку:

qry = qry.unstack(['ItemId', 'Rating'], new_column_name='Rating')

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

Другое замечание: вывод, который вы видели, — это просто печать прогресса. Чтобы увидеть фактические результаты, проверьте объект kn:

print kn
person papayawarrior    schedule 06.05.2016