【发布时间】:2016-11-28 21:08:54
【问题描述】:
我想获得 MovieLens 标签数据集的 tf-idf 表示。标签采用“coo”格式:
import pandas as pd
ratings = pd.read_csv('data/ratings.csv',sep=',')
movies = pd.read_csv('data/movies.csv',sep=',')
tags = pd.read_csv('data/tags.csv',sep=',')
print(tags)
userId movieId tag \
0 15 339 sandra 'boring' bullock
1 15 1955 dentist
2 15 7478 Cambodia
3 15 32892 Russian
4 15 34162 forgettable
5 15 35957 short
6 15 37729 dull story
7 15 45950 powerpoint
8 15 100365 activist
9 15 100365 documentary
10 15 100365 uganda
11 23 150 Ron Howard
...
我的 tf-idf 代码的第一个版本如下所示:
vectorizer = TfidfVectorizer(use_idf=True, norm= 'l2')
X = vectorizer.fit_transform(tags['tag'])
print(X)
(0, 89) 0.603928505945
(0, 80) 0.52013528953
(0, 577) 0.603928505945
(1, 160) 1.0
(2, 94) 1.0
(3, 573) 1.0
(4, 255) 1.0
(5, 604) 1.0
...
虽然这看起来不错,但这并不是我想要的确切表示。主要有两个问题:
- 我认为“标签”矩阵中的每一行都被视为一个不正确的文档。许多电影被不同的用户标记为单独的条目。
- “X”中的 id 是矩阵索引。我怎样才能知道相应的 ML-id?假设我想知道 MLid: 150 的电影的 tf-idf 表示。我怎么知道?
如果你能告诉我如何解决上述情况,我认为这是一件很容易的事,那就太好了。
【问题讨论】:
-
您将什么定义为文档?电影所有标签的串联?
-
每部电影都是一个文档。在这种情况下,在标签矩阵中,每个文档都有一个唯一的movieId。因此,是的,给定电影的所有标签的串联定义了该文档(电影)。