Использование набора данных MovieLens

В последнем примере мы рассмотрим реальный набор данных с оценками фильмов, который называется MovieLens. Этот набор был подготовлен в ходе работы над проектом GroupLens в университете штата Миннесота. Загрузить его можно со страницы http://www.grouplens. org/node/12. Там есть два набора данных. Скачайте набор 100 000 в формате tar.gz или zip в зависимости от платформы, на которой вы работаете.

В архиве упаковано несколько файлов, но для нас представляют интерес только u.item, в котором содержится список идентификаторов и названий фильмов, и u.data, где находятся собственно оценки в следующем формате:

196 242 3 881250949 186 302 3 891717742 22 377 1 878887116 244 51 2 880606923 166 346 1 886397596 298 474 4 884182806

В каждой строке указан идентификатор пользователя, идентификатор фильма, оценка, выставленная фильму данным пользователем, и временной штамп. Получить список названий фильмов можно, но пользователи анонимны, поэтому нам придется работать только с их идентификаторами. В наборе имеются оценки 1682 фильмов, данные 943 пользователями, каждый из которых оценил не менее 20 фильмов. Создайте в файле recommendations.py новый метод loadMovieLens для загрузки этого набора данных:

def loadMovieLens(path=’/data/movielens’):

#       Получить названия фильмов movies={}

for line in open(path+’/u.item’): (id,title)=line.split(‘|’)[0:2] movies[id]=title

#       Загрузить данные prefs={}

for line in open(path+’/u.data’):

(user,movieid,rating,ts)=line.split(‘\t’) prefs.setdefault(user,{}) prefs[user][movies[movieid]]=float(rating) return prefs

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

>>> reload(recommendations)

>>> prefs=recommendations.loadMovieLens( )

>>> prefs[’87’]

{‘Birdcage, The (1996)’: 4.0, ‘E.T. the Extra-Terrestrial (1982)’: 3.0, ‘Bananas (1971)’: 5.0, ‘Sting, The (1973)’: 5.0, ‘Bad Boys (1995)’: 4.0, ‘In the Line of Fire (1993)’: 5.0, ‘Star Trek: The Wrath of Khan (1982)’:5.0,

‘Speechless (1994)’: 4.0, и т. д…

Теперь можно получить рекомендации путем фильтрации по схожести пользователей:

>>> recommendations.getRecommendations(prefs,’87’)[0:30]

[(5.0, ‘They Made Me a Criminal (1939)’), (5.0, ‘Star Kid (1997)’), (5.0, ‘Santa with Muscles (1996)’), (5.0, ‘Saint of Fort Washington (1993)’),

и т. д… ]

Если у вас не очень быстрый компьютер, то при выработке рекомендаций таким способом возникнет небольшая пауза. Связано это с тем, что теперь вы работаете с гораздо более объемным набором данных. Чем больше пользователей, тем больше времени будет занимать процедура выработки рекомендаций. А теперь попробуем фильтрацию по схожести образцов:

>>> itemsim=recommendations.calculateSimilarItems(prefs,n=50)

100 / 1664

200 / 1664 и т. д…

>>> recommendations.getRecommendedItems(prefs,itemsim,’87’)[0:30]

[(5.0, "What’s Eating Gilbert Grape (1993)"), (5.0, ‘Vertigo (1958)’), (5.0, ‘Usual Suspects, The (1995)’), (5.0, ‘Toy Story (1995)’),и т. д…]

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

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

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100