MovieLens数据集

class dgl.data.MovieLensDataset(name, valid_ratio, test_ratio=None, raw_dir=None, force_reload=None, verbose=None, transform=None, random_state=0)[source]

Bases: DGLDataset

用于边缘预测任务的MovieLens数据集。原始数据集是从MovieLens 中提取的,由Movielens unplugged: experiences with an occasionally connected recommender system 引入。

数据集由用户对电影的评分组成,并以特征的形式包含了额外的用户/电影信息。 节点代表用户和电影,边存储用户对电影的评分。

统计:

电影推荐系统-100K (ml-100k)

  • 用户数: 943

  • 电影:1,682

  • 评分:100,000 (1, 2, 3, 4, 5)

电影推荐系统-1M (ml-1m)

  • 用户数:6,040

  • 电影:3,706

  • 评分:1,000,209 (1, 2, 3, 4, 5)

电影推荐系统-10M (ml-10m)

  • 用户数:69,878

  • 电影:10,677

  • 评分:10,000,054 (0.5, 1, 1.5, …, 4.5, 5.0)

Parameters:
  • name (str) – 数据集名称。 ("ml-100k", "ml-1m", "ml-10m").

  • valid_ratio (int) – 验证样本占整个数据集的比例。应在 (0.0, 1.0) 之间。

  • test_ratio (int, optional) – 测试样本占整个数据集的比例。应在 (0.0, 1.0) 范围内。并且它与 valid_ratio 的和也应在 (0.0, 1.0) 范围内。当 name"ml-100k" 时,此参数无效,因为其测试样本是预先指定的。 默认值:None

  • raw_dir (str, optional) – 用于下载/存储数据的原始文件目录。 默认值:~/.dgl/

  • force_reload (bool, optional) – 是否重新下载(如果数据集尚未下载)并重新处理数据集。 默认值:False

  • verbose (bool, optional) – 是否打印进度信息。默认值:True。

  • transform (callable, optional) – A transform that takes in a DGLGraph object and returns a transformed version. The DGLGraph object will be transformed before every access.

  • random_state (int, optional) – 用于随机数据集分割的随机种子。默认值:0

注释

  • name"ml-100k"时,test_ratio无效,训练比例等于1-valid_ratio

name"ml-1m""ml-10m"时,test_ratio有效, 且训练比例等于1-valid_ratio-test_ratio。 - 边的数量加倍以形成无向(双向)图结构。

示例

>>> from dgl.data import MovieLensDataset
>>> dataset = MovieLensDataset(name='ml-100k', valid_ratio=0.2)
>>> g = dataset[0]
>>> g
Graph(num_nodes={'movie': 1682, 'user': 943},
      num_edges={('movie', 'movie-user', 'user'): 100000, ('user', 'user-movie', 'movie'): 100000},
      metagraph=[('movie', 'user', 'movie-user'), ('user', 'movie', 'user-movie')])
>>> # get ratings of edges in the training graph.
>>> rate = g.edges['user-movie'].data['rate'] # or rate = g.edges['movie-user'].data['rate']
>>> rate
tensor([5., 5., 3.,  ..., 3., 3., 5.])
>>> # get train, valid and test mask of edges
>>> train_mask = g.edges['user-movie'].data['train_mask']
>>> valid_mask = g.edges['user-movie'].data['valid_mask']
>>> test_mask = g.edges['user-movie'].data['test_mask']
>>> # get train, valid and test ratings
>>> train_ratings = rate[train_mask]
>>> valid_ratings = rate[valid_mask]
>>> test_ratings = rate[test_mask]
>>> # get input features of users
>>> g.nodes["user"].data["feat"] # or g.nodes["movie"].data["feat"] for movie nodes
tensor([[0.4800, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000],
        [1.0600, 1.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000],
        [0.4600, 0.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000],
        ...,
        [0.4000, 0.0000, 1.0000,  ..., 0.0000, 0.0000, 0.0000],
        [0.9600, 1.0000, 0.0000,  ..., 0.0000, 0.0000, 0.0000],
        [0.4400, 0.0000, 1.0000,  ..., 0.0000, 0.0000, 0.0000]])
__getitem__(idx)[source]

获取索引处的数据对象。

__len__()[source]

数据集中的示例数量。