MovieLensDataset

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

基类: DGLDataset

用于边预测任务的 MovieLens 数据集。原始数据集提取自 MovieLens <https://grouplens.org/datasets/movielens/>,由 Movielens unplugged: experiences with an occasionally connected recommender system <https://dl.acm.org/doi/10.1145/604045.604094> 一文引入。

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

统计

MovieLens-100K (ml-100k)

  • 用户数: 943

  • 电影数: 1,682

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

MovieLens-1M (ml-1m)

  • 用户数: 6,040

  • 电影数: 3,706

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

MovieLens-10M (ml-10m)

  • 用户数: 69,878

  • 电影数: 10,677

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

参数:
  • 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) – 一个转换函数,接受 DGLGraph 对象并返回一个转换后的版本。在每次访问数据集时,DGLGraph 对象都会被转换。

  • 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]

数据集中的样本数量。