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"
时,此参数无效,因为其测试样本是预先指定的。默认值: Noneraw_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]])